{"push_id":651150225,"size":23,"distinct_size":0,"ref":"refs/heads/jk/optimize-packed-refs","head":"3b2f090b8ce25d88addb88d7de8fdab4b5ed83b1","before":"132172fbb6e6b5d247f0337c9288af65ddb395f3","commits":[{"sha":"7348cdeb6c24e36b9192d5304aac005204ab92c2","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@drmicha.warpmail.net","name":"Michael J Gruber"},"message":"rev-list-options.txt: complete sentence about notes matching\n\nSigned-off-by: Michael J Gruber <git@drmicha.warpmail.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/7348cdeb6c24e36b9192d5304aac005204ab92c2"},{"sha":"64f7a26494f955f56510d82ba7f07fa8b85a2317","author":{"email":"c24c152f145c57791e809b126db9e61bd1c1782d@alum.mit.edu","name":"Michael Haggerty"},"message":"git tag: mention versionsort.prereleaseSuffix in manpage\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/64f7a26494f955f56510d82ba7f07fa8b85a2317"},{"sha":"9c589d971ee5712b58e1ffaf134db585478a6330","author":{"email":"c24c152f145c57791e809b126db9e61bd1c1782d@alum.mit.edu","name":"Michael Haggerty"},"message":"status: document the -v/--verbose option\n\nDocument `git status -v`, including its new doubled `-vv` form.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/9c589d971ee5712b58e1ffaf134db585478a6330"},{"sha":"631f6f1d47cc51a46c8ab48ea1178ea04cff0b8a","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'jc/push-cert' into maint\n\nThe \"git push --signed\" protocol extension did not limit what the\n\"nonce\" that is a server-chosen string can contain or how long it\ncan be, which was unnecessarily lax.  Limit both the length and the\nalphabet to a reasonably small space that can still have enough\nentropy.\n\n* jc/push-cert:\n  push --signed: tighten what the receiving end can ask to sign","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/631f6f1d47cc51a46c8ab48ea1178ea04cff0b8a"},{"sha":"89ba311df399d27a962b273e1acd95a38af2c821","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'ma/bash-completion-leaking-x' into maint\n\nThe completion script (in contrib/) contaminated global namespace\nand clobbered on a shell variable $x.\n\n* ma/bash-completion-leaking-x:\n  completion: fix global bash variable leak on __gitcompappend","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/89ba311df399d27a962b273e1acd95a38af2c821"},{"sha":"ad34ad614da30387c82a54c7087705050b4de441","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'tb/connect-ipv6-parse-fix' into maint\n\nAn earlier update to the parser that disects a URL broke an\naddress, followed by a colon, followed by an empty string (instead\nof the port number), e.g. ssh://example.com:/path/to/repo.\n\n* tb/connect-ipv6-parse-fix:\n  connect.c: ignore extra colon after hostname","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/ad34ad614da30387c82a54c7087705050b4de441"},{"sha":"16018ae5fb368151f3eff13730cf089b63f41962","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Git 2.3.7\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/16018ae5fb368151f3eff13730cf089b63f41962"},{"sha":"fb3e7d5515308c73c54c797356651d6ca41b58a6","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Sync with 2.3.7","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/fb3e7d5515308c73c54c797356651d6ca41b58a6"},{"sha":"36bf6d46972df55ffb1c53c88d1b0e463f522116","author":{"email":"c24c152f145c57791e809b126db9e61bd1c1782d@alum.mit.edu","name":"Michael Haggerty"},"message":"Update git-multimail to version 1.0.2\n\nThe only changes are to the README files, most notably the list of\nmaintainers and the project URL.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/36bf6d46972df55ffb1c53c88d1b0e463f522116"},{"sha":"5b9496768faba9378a685a2c750c29eb5662332a","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'mg/status-v-v'\n\n* mg/status-v-v:\n  status: document the -v/--verbose option","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/5b9496768faba9378a685a2c750c29eb5662332a"},{"sha":"b7990520bcac8ca1ade41ac61db80c5dcd0d821a","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'nd/versioncmp-prereleases'\n\n* nd/versioncmp-prereleases:\n  git tag: mention versionsort.prereleaseSuffix in manpage","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/b7990520bcac8ca1ade41ac61db80c5dcd0d821a"},{"sha":"3f5872603d00d4a0e5d2ca4c5e8772fa4667dda8","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'mg/show-notes-doc'\n\nDocumentation fix.\n\n* mg/show-notes-doc:\n  rev-list-options.txt: complete sentence about notes matching","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/3f5872603d00d4a0e5d2ca4c5e8772fa4667dda8"},{"sha":"0ab00b9464051509d7ebd0755bdff1df0a4a51de","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'mh/multimail-renewal'\n\n* mh/multimail-renewal:\n  Update git-multimail to version 1.0.2","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/0ab00b9464051509d7ebd0755bdff1df0a4a51de"},{"sha":"3d4a3ffe64162b45ae7c991fc60623ecb4678cfd","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Git 2.4\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/3d4a3ffe64162b45ae7c991fc60623ecb4678cfd"},{"sha":"5b5ad0107ed951c14aaf9e759788a8105b491d47","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"strbuf_getwholeline: use getc macro\n\nstrbuf_getwholeline calls fgetc in a tight loop. Using the\ngetc form, which can be implemented as a macro, should be\nfaster (and we do not care about it evaluating our argument\ntwice, as we just have a plain variable).\n\nOn my glibc system, running \"git rev-parse\nrefs/heads/does-not-exist\" on a file with an extremely large\n(1.6GB) packed-refs file went from (best of 3 runs):\n\n  real    0m19.383s\n  user    0m18.876s\n  sys     0m0.528s\n\nto:\n\n  real    0m18.900s\n  user    0m18.472s\n  sys     0m0.448s\n\nfor a wall-clock speedup of 2.5%.","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/5b5ad0107ed951c14aaf9e759788a8105b491d47"},{"sha":"e6e2a983f6eb32306ffebc7e9623117850201e1b","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"git-compat-util: add fallbacks for unlocked stdio\n\nPOSIX.1-2001 specifies some functions for optimizing the\nlocking out of tight getc() loops. Not all systems are\nPOSIX, though, and even not all POSIX systems are required\nto implement these functions. We can check for the\nfeature-test macro to see if they are available, and if not,\nprovide a noop implementation.\n\nThere's no Makefile knob here, because we should just detect\nthis automatically. If there are very bizarre systems, we\nmay need to add one, but it's not clear yet in which\ndirection:\n\n  1. If a system defines _POSIX_THREAD_SAFE_FUNCTIONS but\n     these functions are missing or broken, we would want a\n     knob to manually turn them off.\n\n  2. If a system has these functions but does not define\n     _POSIX_THREAD_SAFE_FUNCTIONS, we would want a knob to\n     manually turn them on.\n\nWe can add such a knob when we find a real-world system that\nmatches this.","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/e6e2a983f6eb32306ffebc7e9623117850201e1b"},{"sha":"ee0026b124a8c743557f0fe0c3a0154813753009","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"strbuf_getwholeline: use getc_unlocked\n\nstrbuf_getwholeline calls getc in a tight loop. On modern\nlibc implementations, the stdio code locks the handle for\nevery operation, which means we are paying a significant\noverhead.  We can get around this by locking the handle for\nthe whole loop and using the unlocked variant.\n\nRunning \"git rev-parse refs/heads/does-not-exist\" on a repo\nwith an extremely large (1.6GB) packed-refs file went from:\n\n  real    0m18.900s\n  user    0m18.472s\n  sys     0m0.448s\n\nto:\n\n  real    0m10.953s\n  user    0m10.384s\n  sys     0m0.580s\n\nfor a wall-clock speedup of 42%. All times are best-of-3,\nand done on a glibc 2.19 system.\n\nNote that we call into strbuf_grow while holding the lock.\nIt's possible for that function to call other stdio\nfunctions (e.g., printing to stderr when dying due to malloc\nerror); however, the POSIX.1-2001 definition of flockfile\nmakes it clear that the locks are per-handle, so we are fine\nunless somebody else tries to read from our same handle.\nThis doesn't ever happen in the current code, and is\nunlikely to be added in the future (we would have to do\nsomething exotic like add a die_routine that tried to read\nfrom stdin).","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/ee0026b124a8c743557f0fe0c3a0154813753009"},{"sha":"202f17e1c61f204bbc6150773e3998501cdefa61","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"config: use getc_unlocked when reading from file\n\nWe read config files character-by-character from a stdio\nhandle using fgetc(). This incurs significant locking\noverhead, even though we know that only one thread can\npossibly access the handle. We can speed this up by taking\nthe lock ourselves, and then using getc_unlocked to read\neach character.\n\nOn a silly pathological case:\n\n  perl -le '\n    print \"[core]\";\n    print \"key$_ = value$_\" for (1..1000000)\n  ' >input\n  git config -f input core.key1\n\nthis dropped the time to run git-config from:\n\n  real    0m0.263s\n  user    0m0.260s\n  sys     0m0.000s\n\nto:\n\n  real    0m0.159s\n  user    0m0.152s\n  sys     0m0.004s\n\nfor a savings of 39%.  Most config files are not this big,\nbut the savings should be proportional to the size of the\nfile (i.e., we always save 39%, just of a much smaller\nnumber).","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/202f17e1c61f204bbc6150773e3998501cdefa61"},{"sha":"3bda32cacf115bcaf0bca9c6d7977155b1b79f36","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"strbuf_addch: avoid calling strbuf_grow\n\nWe mark strbuf_addch as inline, because we expect it may be\ncalled from a tight loop. However, the first thing it does\nis call the non-inline strbuf_grow(), which can handle\narbitrary-sized growth. Since we know that we only need a\nsingle character, we can use the inline strbuf_avail() to\nquickly check whether we need to grow at all.\n\nOur check is redundant when we do call strbuf_grow(), but\nthat's OK. The common case is that we avoid calling it at\nall, and we have made that case faster.\n\nOn a silly pathological case:\n\n  perl -le '\n    print \"[core]\";\n    print \"key$_ = value$_\" for (1..1000000)\n  ' >input\n  git config -f input core.key1\n\nthis dropped the time to run git-config from:\n\n  real    0m0.159s\n  user    0m0.152s\n  sys     0m0.004s\n\nto:\n\n  real    0m0.140s\n  user    0m0.136s\n  sys     0m0.004s\n\nfor a savings of 12%.","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/3bda32cacf115bcaf0bca9c6d7977155b1b79f36"},{"sha":"761b83f50dc22e78a5f9e1c6fdb9ab12e4433464","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"strbuf_getwholeline: avoid calling strbuf_grow\n\nAs with the recent speedup to strbuf_addch, we can avoid\ncalling strbuf_grow() in a tight loop of single-character\nadds by instead checking strbuf_avail.\n\nNote that we would instead call strbuf_addch directly here,\nbut it does more work than necessary: it will NUL-terminate\nthe result for each character read. Instead, in this loop we\nread the characters one by one and then add the terminator\nmanually at the end.\n\nRunning \"git rev-parse refs/heads/does-not-exist\" on a repo\nwith an extremely large (1.6GB) packed-refs file went from\n(best-of-5):\n\n  real    0m10.948s\n  user    0m10.548s\n  sys     0m0.412s\n\nto:\n\n  real    0m8.601s\n  user    0m8.084s\n  sys     0m0.524s\n\nfor a wall-clock speedup of 21%.\n\nHelped-by: Eric Sunshine <sunshine@sunshineco.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/761b83f50dc22e78a5f9e1c6fdb9ab12e4433464"}]}