{"push_id":697855103,"size":233,"distinct_size":233,"ref":"refs/heads/master","head":"e96e074c252c8df6d7df6d6f1f22f824c7cb2315","before":"731fe282e1c9d3721055bfcebcb80ac6a61b742f","commits":[{"sha":"ce41720cad79d858f09ebfc88cf84a4b152645c7","author":{"email":"139449a27381270391752f9e0993fccac55fea0e@gmail.com","name":"Alex Henrie"},"message":"blame, log: format usage strings similarly to those in documentation\n\nEarlier, 9c9b4f2f (standardize usage info string format, 2015-01-13)\ntried to make usage-string in line with the documentation by\n\n    - Placing angle brackets around fill-in-the-blank parameters\n    - Putting dashes in multiword parameter names\n    - Adding spaces to [-f|--foobar] to make [-f | --foobar]\n    - Replacing <foobar>* with [<foobar>...]\n\nbut it missed a few places.\n\nSigned-off-by: Alex Henrie <alexhenrie24@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/ce41720cad79d858f09ebfc88cf84a4b152645c7"},{"sha":"89c855ed3cbe64bea93ea081d0e96077e9ee8517","author":{"email":"df03e0c7173e07ef3c9602924c6f30b9854066f0@gmail.com","name":"Elia Pinto"},"message":"git-compat-util.h: implement a different ARRAY_SIZE macro for for safely deriving the size of array\n\nTo get number of elements in an array git use the ARRAY_SIZE macro\ndefined as:\n\n       #define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))\n\nThe problem with it is a possibility of mistakenly passing to it a\npointer instead an array. The ARRAY_SIZE macro as conventionally\ndefined does not provide good type-safety and the open-coded\napproach is more fragile, more verbose and provides no improvement in\ntype-safety.\n\nUse instead a different but compatible ARRAY_SIZE() macro,\nwhich will also break compile if you try to\nuse it on a pointer. This implemention revert to the original code\nif the compiler doesn't know the typeof and __builtin_types_compatible_p\nGCC extensions.\n\nThis can ensure our code is robust to changes, without\nneeding a gratuitous macro or constant. A similar\nARRAY_SIZE implementation also exists in the linux kernel.\n\nCredits to Rusty Russell and his ccan library.\n\nSigned-off-by: Elia Pinto <gitter.spiros@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/89c855ed3cbe64bea93ea081d0e96077e9ee8517"},{"sha":"7253a02348c1c44c84f8a13309d6d30b443bf23c","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"http-backend: fix die recursion with custom handler\n\nWhen we die() in http-backend, we call a custom handler that\nwrites an HTTP 500 response to stdout, then reports the\nerror to stderr. Our routines for writing out the HTTP\nresponse may themselves die, leading to us entering die()\nagain.\n\nWhen it was originally written, that was OK; our custom\nhandler keeps a variable to notice this and does not\nrecurse. However, since cd163d4 (usage.c: detect recursion\nin die routines and bail out immediately, 2012-11-14), the\nmain die() implementation detects recursion before we even\nget to our custom handler, and bails without printing\nanything useful.\n\nWe can handle this case by doing two things:\n\n  1. Installing a custom die_is_recursing handler that\n     allows us to enter up to one level of recursion. Only\n     the first call to our custom handler will try to write\n     out the error response. So if we die again, that is OK.\n     If we end up dying more than that, it is a sign that we\n     are in an infinite recursion.\n\n  2. Reporting the error to stderr before trying to write\n     out the HTTP response. In the current code, if we do\n     die() trying to write out the response, we'll exit\n     immediately from this second die(), and never get a\n     chance to output the original error (which is almost\n     certainly the more interesting one; the second die is\n     just going to be along the lines of \"I tried to write\n     to stdout but it was closed\").\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/7253a02348c1c44c84f8a13309d6d30b443bf23c"},{"sha":"f6a1e1e288d13472f5f7fe2b907bb8c0bd69a018","author":{"email":"ebff1e80cba88b382be6a6d1b3599a8cb31682cc@gmail.com","name":"Jim Hill"},"message":"sha1_file: pass empty buffer to index empty file\n\n`git add` of an empty file with a filter pops complaints from\n`copy_fd` about a bad file descriptor.\n\nThis traces back to these lines in sha1_file.c:index_core:\n\n\tif (!size) {\n\t\tret = index_mem(sha1, NULL, size, type, path, flags);\n\nThe problem here is that content to be added to the index can be\nsupplied from an fd, or from a memory buffer, or from a pathname. This\ncall is supplying a NULL buffer pointer and a zero size.\n\nDownstream logic takes the complete absence of a buffer to mean the\ndata is to be found elsewhere -- for instance, these, from convert.c:\n\n\tif (params->src) {\n\t\twrite_err = (write_in_full(child_process.in, params->src, params->size) < 0);\n\t} else {\n\t\twrite_err = copy_fd(params->fd, child_process.in);\n\t}\n\n~If there's a buffer, write from that, otherwise the data must be coming\nfrom an open fd.~\n\nPerfectly reasonable logic in a routine that's going to write from\neither a buffer or an fd.\n\nSo change `index_core` to supply an empty buffer when indexing an empty\nfile.\n\nThere's a patch out there that instead changes the logic quoted above to\ntake a `-1` fd to mean \"use the buffer\", but it seems to me that the\ndistinction between a missing buffer and an empty one carries intrinsic\nsemantics, where the logic change is adapting the code to handle\nincorrect arguments.\n\nSigned-off-by: Jim Hill <gjthill@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/f6a1e1e288d13472f5f7fe2b907bb8c0bd69a018"},{"sha":"d89df367f61e8da1ae05ef7054bab4343eb67cdf","author":{"email":"d4d2cc2a6ec7b2aa587d4887cc5ed200f9b685a1@imag.fr","name":"Matthieu Moy"},"message":"Documentation/log: clarify what --raw means\n\nThere are several \"raw formats\", and describing --raw as \"Generate the\nraw format\" in the documentation for git-log seems to imply that it\ngenerates the raw *log* format.\n\nClarify the wording by saying \"raw diff format\" explicitly, and make a\nspecial-case for \"git log\": \"git log --raw\" does not just change the\nformat, it shows something which is not shown by default.\n\nSigned-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/d89df367f61e8da1ae05ef7054bab4343eb67cdf"},{"sha":"838d6a928fc3aef3827d9a45e6aac044fea7451e","author":{"email":"a13b1135e6f2f8530e85bc2896cd5ed89a6ed863@twopensource.com","name":"David Turner"},"message":"clean: only lstat files in pathspec\n\nEven though \"git clean\" takes pathspec to limit the part of the\nworking tree to be cleaned, it checked the paths it encounters\nduring its directory traversal with lstat(2), before checking if\nthe path is within the pathspec.\n\nIgnore paths outside pathspec and proceed without checking with\nlstat(2).  Even if such a path is unreadable due to e.g. EPERM,\n\"git clean\" should not care.\n\nSigned-off-by: David Turner <dturner@twopensource.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/838d6a928fc3aef3827d9a45e6aac044fea7451e"},{"sha":"5c2a581dc9c7ce61c0dfbbdc56fc951aa0b8288f","author":{"email":"9bdbbc3d590c5e3f492c7e4c46eccce25481330a@gmail.com","name":"Michael Coleman"},"message":"Documentation/git-commit: grammofix\n\nSigned-off-by: Michael Coleman <michael.karl.coleman@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/5c2a581dc9c7ce61c0dfbbdc56fc951aa0b8288f"},{"sha":"cc969c8dc1cfd1f60b1dab8ee3117172d9d1bb4f","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"t5551: factor out tag creation\n\nOne of our tests in t5551 creates a large number of tags,\nand jumps through some hoops to do it efficiently. Let's\nfactor that out into a function so we can make other similar\ntests.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/cc969c8dc1cfd1f60b1dab8ee3117172d9d1bb4f"},{"sha":"d6cc2df5c80dc4f52a56679baa5e32539eb028b1","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"stash: complain about unknown flags\n\nThe option parser for git-stash stuffs unknown flags into\nthe $FLAGS variable, where they can be accessed by the\nindividual commands. However, most commands do not even look\nat these extra flags, leading to unexpected results like\nthis:\n\n  $ git stash drop --help\n  Dropped refs/stash@{0} (e6cf6d80faf92bb7828f7b60c47fc61c03bd30a1)\n\nWe should notice the extra flags and bail. Rather than\nannotate each command to reject a non-empty $FLAGS variable,\nwe can notice that \"stash show\" is the only command that\nactually _wants_ arbitrary flags. So we switch the default\nmode to reject unknown flags, and let stash_show() opt into\nthe feature.\n\nReported-by: Vincent Legoll <vincent.legoll@gmail.com>\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/d6cc2df5c80dc4f52a56679baa5e32539eb028b1"},{"sha":"5ba28313f29bcc2e8571c4b325646fecfbe238df","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"stash: recognize \"--help\" for subcommands\n\nIf you run \"git stash --help\", you get the help for stash\n(this magic is done by the git wrapper itself). But if you\nrun \"git stash drop --help\", you get an error. We\ncannot show help specific to \"stash drop\", of course, but we\ncan at least give the user the normal stash manpage.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/5ba28313f29bcc2e8571c4b325646fecfbe238df"},{"sha":"dbe44faadb87f88e092f3dac387f96070268137a","author":{"email":"2da278a99b557fc93ddbed7517a413ad793e2e6a@web.de","name":"René Scharfe"},"message":"use file_exists() to check if a file exists in the worktree\n\nCall file_exists() instead of open-coding it.  That's shorter, simpler\nand the intent becomes clearer.\n\nSigned-off-by: Rene Scharfe <l.s.r@web.de>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/dbe44faadb87f88e092f3dac387f96070268137a"},{"sha":"5cd83e18851445cdc20d5842b53373fe15554ae9","author":{"email":"2da278a99b557fc93ddbed7517a413ad793e2e6a@web.de","name":"René Scharfe"},"message":"clean: remove unused variable buf\n\nIt had never been used.\n\nSigned-off-by: Rene Scharfe <l.s.r@web.de>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/5cd83e18851445cdc20d5842b53373fe15554ae9"},{"sha":"22570b68e3cb9380403d903680be3b3112a26490","author":{"email":"2da278a99b557fc93ddbed7517a413ad793e2e6a@web.de","name":"René Scharfe"},"message":"dir: remove unused variable sb\n\nIt had never been used.\n\nSigned-off-by: Rene Scharfe <l.s.r@web.de>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/22570b68e3cb9380403d903680be3b3112a26490"},{"sha":"92de92172d1c01f3029d592f7e0f15d52149200b","author":{"email":"d4d2cc2a6ec7b2aa587d4887cc5ed200f9b685a1@imag.fr","name":"Matthieu Moy"},"message":"Documentation/log: clarify sha1 non-abbreviation in log --raw\n\nSigned-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/92de92172d1c01f3029d592f7e0f15d52149200b"},{"sha":"d201a1ecdb1231a349d696a2252b7209ef7be103","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"test_bitmap_walk: free bitmap with bitmap_free\n\nCommit f86a374 (pack-bitmap.c: fix a memleak, 2015-03-30)\nnoticed that we leak the \"result\" bitmap. But we should use\n\"bitmap_free\" rather than straight \"free\", as the former\nremembers to free the bitmap array pointed to by the struct.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/d201a1ecdb1231a349d696a2252b7209ef7be103"},{"sha":"6bc0cb5176a5e42ca4a74e3558e8f0790ed09bb1","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"http-backend: spool ref negotiation requests to buffer\n\nWhen http-backend spawns \"upload-pack\" to do ref\nnegotiation, it streams the http request body to\nupload-pack, who then streams the http response back to the\nclient as it reads. In theory, git can go full-duplex; the\nclient can consume our response while it is still sending\nthe request.  In practice, however, HTTP is a half-duplex\nprotocol. Even if our client is ready to read and write\nsimultaneously, we may have other HTTP infrastructure in the\nway, including the webserver that spawns our CGI, or any\nintermediate proxies.\n\nIn at least one documented case[1], this leads to deadlock\nwhen trying a fetch over http. What happens is basically:\n\n  1. Apache proxies the request to the CGI, http-backend.\n\n  2. http-backend gzip-inflates the data and sends\n     the result to upload-pack.\n\n  3. upload-pack acts on the data and generates output over\n     the pipe back to Apache. Apache isn't reading because\n     it's busy writing (step 1).\n\nThis works fine most of the time, because the upload-pack\noutput ends up in a system pipe buffer, and Apache reads\nit as soon as it finishes writing. But if both the request\nand the response exceed the system pipe buffer size, then we\ndeadlock (Apache blocks writing to http-backend,\nhttp-backend blocks writing to upload-pack, and upload-pack\nblocks writing to Apache).\n\nWe need to break the deadlock by spooling either the input\nor the output. In this case, it's ideal to spool the input,\nbecause Apache does not start reading either stdout _or_\nstderr until we have consumed all of the input. So until we\ndo so, we cannot even get an error message out to the\nclient.\n\nThe solution is fairly straight-forward: we read the request\nbody into an in-memory buffer in http-backend, freeing up\nApache, and then feed the data ourselves to upload-pack. But\nthere are a few important things to note:\n\n  1. We limit the in-memory buffer to prevent an obvious\n     denial-of-service attack. This is a new hard limit on\n     requests, but it's unlikely to come into play. The\n     default value is 10MB, which covers even the ridiculous\n     100,000-ref negotation in the included test (that\n     actually caps out just over 5MB). But it's configurable\n     on the off chance that you don't mind spending some\n     extra memory to make even ridiculous requests work.\n\n  2. We must take care only to buffer when we have to. For\n     pushes, the incoming packfile may be of arbitrary\n     size, and we should connect the input directly to\n     receive-pack. There's no deadlock problem here, though,\n     because we do not produce any output until the whole\n     packfile has been read.\n\n     For upload-pack's initial ref advertisement, we\n     similarly do not need to buffer. Even though we may\n     generate a lot of output, there is no request body at\n     all (i.e., it is a GET, not a POST).\n\n[1] http://article.gmane.org/gmane.comp.version-control.git/269020\n\nTest-adapted-from: Dennis Kaarsemaker <dennis@kaarsemaker.net>\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/6bc0cb5176a5e42ca4a74e3558e8f0790ed09bb1"},{"sha":"7419a03fdb3f4f1e6e78debf34a084533512c24a","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'jk/http-backend-deadlock-2.2' into jk/http-backend-deadlock-2.3\n\n* jk/http-backend-deadlock-2.2:\n  http-backend: spool ref negotiation requests to buffer\n  t5551: factor out tag creation\n  http-backend: fix die recursion with custom handler","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/7419a03fdb3f4f1e6e78debf34a084533512c24a"},{"sha":"636614f337409abccf60b00dddd04e6628bf85de","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'jk/http-backend-deadlock-2.3' into jk/http-backend-deadlock\n\n* jk/http-backend-deadlock-2.3:\n  http-backend: spool ref negotiation requests to buffer\n  t5551: factor out tag creation\n  http-backend: fix die recursion with custom handler","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/636614f337409abccf60b00dddd04e6628bf85de"},{"sha":"8ade009c952b2977508d6d88aacc290c645125d2","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"clone: use OPT_STRING_LIST for --reference\n\nNot only does this save us having to implement a custom\ncallback, but it handles \"--no-reference\" in the usual way\n(to clear the list).\n\nThe generic callback does copy the string, which we don't\ntechnically need, but that should not hurt anything.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/8ade009c952b2977508d6d88aacc290c645125d2"},{"sha":"14f8b9b494c990188a4dfe772c384b1be5f8351b","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"clone: reorder --dissociate and --reference options\n\nThese options are intimately related, so it makes sense to\nlist them nearby in the \"-h\" output (they are already\nadjacent in the manpage).\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":true,"url":"https://api.github.com/repos/git-for-windows/git/commits/14f8b9b494c990188a4dfe772c384b1be5f8351b"}]}