{"push_id":1234296440,"size":51,"distinct_size":0,"ref":"refs/heads/jk/t4205-cleanup","head":"a34dc4ab957ec9597b751b8b921672458d11c5f2","before":"f5d107262209a6965d8078887cf77606501070ff","commits":[{"sha":"023ff39b2994804e4a7b2274b22336bdb37d4a54","author":{"name":"Jeff King","email":"7e57302763bea699aee296fb53304dc616ab92d5@peff.net"},"message":"parse_options: allocate a new array when concatenating\n\nIn exactly one callers (builtin/revert.c), we build up the\noptions list dynamically from multiple arrays. We do so by\nmanually inserting \"filler\" entries into one array, and then\ncopying the other array into the allocated space.\n\nThis is tedious and error-prone, as you have to adjust the\nfiller any time the second array is modified (although we do\nat least check and die() when the counts do not match up).\n\nInstead, let's just allocate a new array.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/023ff39b2994804e4a7b2274b22336bdb37d4a54"},{"sha":"43b8bba6b60aa644456d7682b99357dd4778e8d6","author":{"name":"Eric Wong","email":"47aede7528d154728613163cc3055c3c2c82ea2f@80x24.org"},"message":"http-walker: remove unused parameter from fetch_object\n\nThis parameter has not been used since commit 1d389ab65dc6\n(\"Add support for parallel HTTP transfers\") back in 2005\n\nSigned-off-by: Eric Wong <e@80x24.org>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/43b8bba6b60aa644456d7682b99357dd4778e8d6"},{"sha":"17966c0a63d25b1cc2dd1e98d30873e643bd581f","author":{"name":"Eric Wong","email":"47aede7528d154728613163cc3055c3c2c82ea2f@80x24.org"},"message":"http: avoid disconnecting on 404s for loose objects\n\n404s are common when fetching loose objects on static HTTP\nservers, and reestablishing a connection for every single\n404 adds additional latency.\n\nSigned-off-by: Eric Wong <e@80x24.org>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/17966c0a63d25b1cc2dd1e98d30873e643bd581f"},{"sha":"94e99012fc7a02c5504214294279fa49b4cc8ce3","author":{"name":"Eric Wong","email":"47aede7528d154728613163cc3055c3c2c82ea2f@80x24.org"},"message":"http-walker: reduce O(n) ops with doubly-linked list\n\nUsing the a Linux-kernel-derived doubly-linked list\nimplementation from the Userspace RCU library allows us to\nenqueue and delete items from the object request queue in\nconstant time.\n\nThis change reduces enqueue times in the prefetch() function\nwhere object request queue could grow to several thousand\nobjects.\n\nI left out the list_for_each_entry* family macros from list.h\nwhich relied on the __typeof__ operator as we support platforms\nwithout it.  Thus, list_entry (aka \"container_of\") needs to be\ncalled explicitly inside macro-wrapped for loops.\n\nThe downside is this costs us an additional pointer per object\nrequest, but this is offset by reduced overhead on queue\noperations leading to improved performance and shorter queue\ndepths.\n\nSigned-off-by: Eric Wong <e@80x24.org>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/94e99012fc7a02c5504214294279fa49b4cc8ce3"},{"sha":"77a9745d19b2b308c1ce97d18053322d1471bc4c","author":{"name":"Stefan Beller","email":"75e5af3a5fc6e432c184f339c5c73c118a246be6@google.com"},"message":"push options: {pre,post}-receive hook learns about push options\n\nThe environment variable GIT_PUSH_OPTION_COUNT is set to the number of\npush options sent, and GIT_PUSH_OPTION_{0,1,..} is set to the transmitted\noption.\n\nThe code is not executed as the push options are set to NULL, nor is the\nnew capability advertised.\n\nThere was some discussion back and forth how to present these push options\nto the user as there are some ways to do it:\n\nKeep all options in one environment variable\n============================================\n+ easiest way to implement in Git\n- This would make things hard to parse correctly in the hook.\n\nPut the options in files instead,\nfilenames are in GIT_PUSH_OPTION_FILES\n======================================\n+ After a discussion about environment variables and shells, we may not\n  want to put user data into an environment variable (see [1] for example).\n+ We could transmit binaries, i.e. we're not bound to C strings as\n  we are when using environment variables to the user.\n+ Maybe easier to parse than constructing environment variable names\n  GIT_PUSH_OPTION_{0,1,..} yourself\n- cleanup of the temporary files is hard to do reliably\n- we have race conditions with multiple clients pushing, hence we'd need\n  to use mkstemp. That's not too bad, but still.\n\nUse environment variables, but restrict to key/value pairs\n==========================================================\n(When the user pushes a push option `foo=bar`, we'd\nGIT_PUSH_OPTION_foo=bar)\n+ very easy to parse for a simple model of push options\n- it's not sufficient for more elaborate models, e.g.\n  it doesn't allow doubles (e.g. cc=reviewer@email)\n\nPresent the options in different environment variables\n======================================================\n(This is implemented)\n* harder to parse as a user, but we have a sample hook for that.\n- doesn't allow binary files\n+ allows the same option twice, i.e. is not restrictive about\n  options, except for binary files.\n+ doesn't clutter a remote directory with (possibly stale)\n  temporary files\n\nAs we first want to focus on getting simple strings to work\nreliably, we go with the last option for now. If we want to\ndo transmission of binaries later, we can just attach a\n'side-channel', e.g. \"any push option that contains a '\\0' is\nput into a file instead of the environment variable and we'd\nhave new GIT_PUSH_OPTION_FILES, GIT_PUSH_OPTION_FILENAME_{0,1,..}\nenvironment variables\".\n\n[1] 'Shellshock' https://lwn.net/Articles/614218/\n\nSigned-off-by: Stefan Beller <sbeller@google.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/77a9745d19b2b308c1ce97d18053322d1471bc4c"},{"sha":"c714e45f87301562b940e3621431ed7f7fbd16e5","author":{"name":"Stefan Beller","email":"75e5af3a5fc6e432c184f339c5c73c118a246be6@google.com"},"message":"receive-pack: implement advertising and receiving push options\n\nThe pre/post receive hook may be interested in more information from the\nuser. This information can be transmitted when both client and server\nsupport the \"push-options\" capability, which when used is a phase directly\nafter update commands ended by a flush pkt.\n\nSimilar to the atomic option, the server capability can be disabled via\nthe `receive.advertisePushOptions` config variable. While documenting\nthis, fix a nit in the `receive.advertiseAtomic` wording.\n\nSigned-off-by: Stefan Beller <sbeller@google.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/c714e45f87301562b940e3621431ed7f7fbd16e5"},{"sha":"f6a4e61fbb647928d615a0befaec163a5d2bf4af","author":{"name":"Stefan Beller","email":"75e5af3a5fc6e432c184f339c5c73c118a246be6@google.com"},"message":"push: accept push options\n\nThis implements everything that is required on the client side to make use\nof push options from the porcelain push command.\n\nSigned-off-by: Stefan Beller <sbeller@google.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/f6a4e61fbb647928d615a0befaec163a5d2bf4af"},{"sha":"3ac870300a7bb430341388a8f2ec465328986617","author":{"name":"Stefan Beller","email":"75e5af3a5fc6e432c184f339c5c73c118a246be6@google.com"},"message":"add a test for push options\n\nThe functions `mk_repo_pair` as well as `test_refs` are borrowed from\nt5543-atomic-push, with additional hooks installed.\n\nSigned-off-by: Stefan Beller <sbeller@google.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/3ac870300a7bb430341388a8f2ec465328986617"},{"sha":"ecba19531ac68586b4e06f6cc40e92447091bc28","author":{"name":"Eric Wong","email":"47aede7528d154728613163cc3055c3c2c82ea2f@80x24.org"},"message":"list: avoid incompatibility with *BSD sys/queue.h\n\nThe OS X build pulls in sys/queue.h, which pollutes the preprocessor\nnamespace with a macro generically named LIST_HEAD, and clashes with\nthe name we use here.\n\nref: http://mid.gmane.org/FB76544F-16F7-45CA-9649-FD62EE44B0DE@gmail.com\n\nReported-by: Lars Schneider <larsxschneider@gmail.com>\nSigned-off-by: Eric Wong <e@80x24.org>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/ecba19531ac68586b4e06f6cc40e92447091bc28"},{"sha":"508a285ceab4523412546a92cd9444f8e78065e1","author":{"name":"René Scharfe","email":"01bf718383f1a71128a0f88aabe513a64e609746@web.de"},"message":"submodule-config: use explicit empty string instead of strbuf in config_from()\n\nUse a string constant instead of an empty strbuf to shorten the code\nand make it easier to read.\n\nSigned-off-by: Rene Scharfe <l.s.r@web.de>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/508a285ceab4523412546a92cd9444f8e78065e1"},{"sha":"da470981defcace6e909b74ebc4ab5a40a702728","author":{"name":"Jonathan Tan","email":"cd7d9b1b2e07747e72c61609f6cb1551235775cd@google.com"},"message":"fetch-pack: grow stateless RPC windows exponentially\n\nWhen updating large repositories, the LARGE_FLUSH limit (that is, the\nlimit at which the window growth strategy switches from exponential to\nlinear) is reached quite quickly. Use a conservative exponential growth\nstrategy when that limit is reached instead (and increase LARGE_FLUSH so\nthat there is no regression in window size).\n\nThis optimization is only applied during stateless RPCs to avoid the\nissue raised and fixed in commit 44d8dc54 (Fix potential local\ndeadlock during fetch-pack, 2011-03-29).\n\nSigned-off-by: Jonathan Tan <jonathantanmy@google.com>\nReviewed-by: Jonathan Nieder <jrnieder@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/da470981defcace6e909b74ebc4ab5a40a702728"},{"sha":"f26eef302fc315394d1016eb06360637ac86f62e","author":{"name":"Jeff King","email":"7e57302763bea699aee296fb53304dc616ab92d5@peff.net"},"message":"check_everything_connected: always pass --quiet to rev-list\n\nThe check_everything_connected function takes a \"quiet\"\nparameter which does two things if non-zero:\n\n  1. redirect rev-list's stderr to /dev/null to avoid\n     showing errors to the user\n\n  2. pass \"--quiet\" to rev-list\n\nItem (1) is obviously useful. But item (2) is\nsurprisingly not. For rev-list, \"--quiet\" does not have\nanything to do with chattiness on stderr; it tells rev-list\nnot to bother writing the list of traversed objects to\nstdout, for efficiency.  And since we always redirect\nrev-list's stdout to /dev/null in this function, there is no\npoint in asking it to ever write anything to stdout.\n\nThe efficiency gains are modest; a best-of-five run of \"git\nrev-list --objects --all\" on linux.git dropped from 32.013s\nto 30.502s when adding \"--quiet\". That's only about 5%, but\ngiven how easy it is, it's worth doing.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/f26eef302fc315394d1016eb06360637ac86f62e"},{"sha":"434ea3cdadf8c7592ba167ce122d3984e984a158","author":{"name":"Jeff King","email":"7e57302763bea699aee296fb53304dc616ab92d5@peff.net"},"message":"rev-list: add optional progress reporting\n\nIt's easy to ask rev-list to do a traversal that may takes\nmany seconds (e.g., by calling \"--objects --all\"). In theory\nyou can monitor its progress by the output you get to\nstdout, but this isn't always easy.\n\nSome operations, like \"--count\", don't make any output until\nthe end.\n\nAnd some callers, like check_everything_connected(), are\nusing it just for the error-checking of the traversal, and\nthrow away stdout entirely.\n\nThis patch adds a \"--progress\" option which can be used to\ngive some eye-candy for a user waiting for a long traversal.\nThis is just a rev-list option and not a regular traversal\noption, because it needs cooperation from the callbacks in\nbuiltin/rev-list.c to do the actual count.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/434ea3cdadf8c7592ba167ce122d3984e984a158"},{"sha":"3be89f9b86cb3891a7865ad004230a50977e3d8c","author":{"name":"Jeff King","email":"7e57302763bea699aee296fb53304dc616ab92d5@peff.net"},"message":"check_everything_connected: convert to argv_array\n\nThis avoids the magic \"9\" array-size which we must avoid\noverflowing, making further patches simpler.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/3be89f9b86cb3891a7865ad004230a50977e3d8c"},{"sha":"7043c7071cdbdef60ce8413f425da622b8e6dc85","author":{"name":"Jeff King","email":"7e57302763bea699aee296fb53304dc616ab92d5@peff.net"},"message":"check_everything_connected: use a struct with named options\n\nThe number of variants of check_everything_connected has\ngrown over the years, so that the \"real\" function takes\nseveral possibly-zero, possibly-NULL arguments. We hid the\ncomplexity behind some wrapper functions, but this doesn't\nscale well when we want to add new options.\n\nIf we add more wrapper variants to handle the new options,\nthen we can get a combinatorial explosion when those options\nmight be used together (right now nobody wants to use both\n\"shallow\" and \"transport\" together, so we get by with just a\nfew wrappers).\n\nIf instead we add new parameters to each function, each of\nwhich can have a default value, then callers who want the\ndefaults end up with confusing invocations like:\n\n  check_everything_connected(fn, 0, data, -1, 0, NULL);\n\nwhere it is unclear which parameter is which (and every\ncaller needs updated when we add new options).\n\nInstead, let's add a struct to hold all of the optional\nparameters. This is a little more verbose for the callers\n(who have to declare the struct and fill it in), but it\nmakes their code much easier to follow, because every option\nis named as it is set (and unused options do not have to be\nmentioned at all).\n\nNote that we could also stick the iteration function and its\ncallback data into the option struct, too. But since those\nare required for each call, by avoiding doing so, we can let\nvery simple callers just pass \"NULL\" for the options and not\nworry about the struct at all.\n\nWhile we're touching each site, let's also rename the\nfunction to check_connected(). The existing name was quite\nlong, and not all of the wrappers even used the full name.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/7043c7071cdbdef60ce8413f425da622b8e6dc85"},{"sha":"e0331849a081fe4919f4130540165ce7d7355748","author":{"name":"Jeff King","email":"7e57302763bea699aee296fb53304dc616ab92d5@peff.net"},"message":"check_connected: relay errors to alternate descriptor\n\nUnless the \"quiet\" flag is given, check_connected sends any\nerrors to the stderr of the caller (because the child\nrev-list inherits that descriptor). However, server-side\ncallers may want to send these over a sideband channel\ninstead.  Let's make that possible.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/e0331849a081fe4919f4130540165ce7d7355748"},{"sha":"70d5e2d77b4c2afdb442b37924bc252793e106d9","author":{"name":"Jeff King","email":"7e57302763bea699aee296fb53304dc616ab92d5@peff.net"},"message":"check_connected: add progress flag\n\nConnectivity checks have to traverse the entire object graph\nin the worst case (e.g., a full clone or a full push). For\nlarge repositories like linux.git, this can take 30-60\nseconds, during which time git may produce little or no\noutput.\n\nLet's add the option of showing progress, which is taken\ncare of by rev-list.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/70d5e2d77b4c2afdb442b37924bc252793e106d9"},{"sha":"38e590ea12336bcfae0310092885743e6ba79781","author":{"name":"Jeff King","email":"7e57302763bea699aee296fb53304dc616ab92d5@peff.net"},"message":"clone: use a real progress meter for connectivity check\n\nBecause the initial connectivity check for a cloned\nrepository can be slow, 0781aa4 (clone: let the user know\nwhen check_everything_connected is run, 2013-05-03) added a\n\"fake\" progress meter; we simply say \"Checking connectivity\"\nwhen it starts, and \"done\" at the end, with nothing between.\n\nSince check_connected() now knows how to do a real progress\nmeter, we can drop our fake one and use that one instead.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/38e590ea12336bcfae0310092885743e6ba79781"},{"sha":"e376f17fd1a1efd4fe425d023610172bcba3fe97","author":{"name":"Jeff King","email":"7e57302763bea699aee296fb53304dc616ab92d5@peff.net"},"message":"index-pack: add flag for showing delta-resolution progress\n\nThe index-pack command has two progress meters: one for\n\"receiving objects\", and one for \"resolving deltas\". You get\nneither by default, or both with \"-v\".\n\nBut for a push through receive-pack, we would want only the\n\"resolving deltas\" phase, _not_ the \"receiving objects\"\nprogress. There are two reasons for this.\n\nOne is simply that existing clients are already printing\n\"writing objects\" progress at the same time.  Arguably\n\"receiving\" from the far end is more useful, because it\ntells you what has actually gotten there, as opposed to what\nmight be stuck in a buffer somewhere between the client and\nserver. But that would require a protocol extension to tell\nclients not to print their progress. Possible, but\ncomplexity for little gain.\n\nThe second reason is much more important. In a full-duplex\nconnection like git-over-ssh, we can print progress while\nthe pack is incoming, and it will immediately get to the\nclient. But for a half-duplex connection like git-over-http,\nwe should not say anything until we have received the full\nrequest.  Anything we write is subject to being stuck in a\nbuffer by the webserver.  Worse, we can end up in a deadlock\nif that buffer fills up.\n\nSo our best bet is to avoid writing anything that isn't a\nsmall fixed size until we've received the full pack.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/e376f17fd1a1efd4fe425d023610172bcba3fe97"},{"sha":"d06303bb9a6c3791ff67078b480a86cfd9b691ea","author":{"name":"Jeff King","email":"7e57302763bea699aee296fb53304dc616ab92d5@peff.net"},"message":"receive-pack: turn on index-pack resolving progress\n\nWhen we receive a large push, the server side may have to\nspend a lot of CPU processing the incoming packfile.\n\nDuring the \"receiving\" phase, we are typically network\nbound, and the client is writing its own progress to the\nuser. But during the delta resolution phase, we may spend\nminutes (e.g., for a full push of linux.git) without\nmaking any indication to the user that the connection has\nnot hung.\n\nLet's ask index-pack to produce progress output for this\nphase (unless the client asked us to be quiet, of course).\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/d06303bb9a6c3791ff67078b480a86cfd9b691ea"}]}
{"actor":{"display_login":"peff"}}