{"push_id":570936090,"size":39,"distinct_size":26,"ref":"refs/heads/pu","head":"af3afd6c677797b9be4cbea4a471666b6e6084cf","before":"077a1e49fce03300b343728358074ec47677074b","commits":[{"sha":"e60059276b26db5760e36aa85cf1091f662430fb","author":{"email":"8d6e34f987851aa599257d3831a1af040886842f@sunshineco.com","name":"Eric Sunshine"},"message":"builtin/blame: destroy initialized commit_info only\n\nSince ea02ffa3 (mailmap: simplify map_user() interface, 2013-01-05),\nfind_alignment() has been invoking commit_info_destroy() on an\nuninitialized auto 'struct commit_info' (when METAINFO_SHOWN is not\nset). commit_info_destroy() calls strbuf_release() for each\n'commit_info' strbuf member, which randomly invokes free() on\nwhatever random stack value happens to reside in strbuf.buf, thus\nleading to periodic crashes.\n\nReported-by: Dilyan Palauzov <dilyan.palauzov@aegee.org>\nSigned-off-by: Eric Sunshine <sunshine@sunshineco.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/gitster/git/commits/e60059276b26db5760e36aa85cf1091f662430fb"},{"sha":"5e915f3085db3c0edbc80269f889341172e8595b","author":{"email":"696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","name":"Jeff King"},"message":"fast-import: avoid running end_packfile recursively\n\nWhen an import has finished, we run end_packfile() to\nfinalize the data and move the packfile into place. If this\nprocess fails, we call die() and end up in our die_nicely()\nhandler.  Which unfortunately includes running end_packfile\nto save any progress we made. We enter the function again,\nand start operating on the pack_data struct while it is in\nan inconsistent state, leading to a segfault.\n\nOne way to trigger this is to simply start two identical\nfast-imports at the same time. They will both create the\nsame packfiles, which will then try to create identically\nnamed \".keep\" files. One will win the race, and the other\nwill die(), and end up with the segfault.\n\nSince 3c078b9, we already reset the pack_data pointer to\nNULL at the end of end_packfile. That covers the case of us\ncalling die() right after end_packfile, before we have\nreinitialized the pack_data pointer. This new problem is\nquite similar, except that we are worried about calling\ndie() _during_ end_packfile, not right after. Ideally we\nwould simply set pack_data to NULL as soon as we enter the\nfunction, and operate on a copy of the pointer.\n\nUnfortunately, it is not so easy. pack_data is a global, and\nend_packfile calls into other functions which operate on the\nglobal directly. We would have to teach each of these to\ntake an argument, and there is no guarantee that we would\ncatch all of the spots.\n\nInstead, we can simply use a static flag to avoid\nrecursively entering the function. This is a little less\nelegant, but it's short and fool-proof.\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/gitster/git/commits/5e915f3085db3c0edbc80269f889341172e8595b"},{"sha":"45b6b7137ef63795e84321ec3d2ff9a77733b9eb","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"index-pack: reduce memory footprint a bit\n\nFor each object in the input pack, we need one struct object_entry. On\nx86-64, this struct is 64 bytes long. Although:\n\n - The 8 bytes for delta_depth and base_object_no are only useful when\n   show_stat is set. And it's never set unless someone is debugging.\n\n - The three fields hdr_size, type and real_type take 4 bytes each\n   even though they never use more than 4 bits.\n\nBy moving delta_depth and base_object_no out of struct object_entry\nand make the other 3 fields one byte long instead of 4, we shrink 25%\nof this struct.\n\nOn a 3.4M object repo that's about 53MB. The saving is less impressive\ncompared to index-pack total memory use (about 400MB before delta\nresolving, so the saving is just 13%)\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/gitster/git/commits/45b6b7137ef63795e84321ec3d2ff9a77733b9eb"},{"sha":"7b4ff41a2e3cc02f2a1ec1ecb7d138a86ee261ba","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"FIXUP","distinct":false,"url":"https://api.github.com/repos/gitster/git/commits/7b4ff41a2e3cc02f2a1ec1ecb7d138a86ee261ba"},{"sha":"3538291b27f0de9a22bd0c6bdb42983c928a26f1","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Duy Nguyen"},"message":"index-pack: kill union delta_base to save memory\n\nOnce we know the number of objects in the input pack, we allocate an\narray of nr_objects of struct delta_entry. On x86-64, this struct is\n32 bytes long. The union delta_base, which is part of struct\ndelta_entry, provides enough space to store either ofs-delta (8 bytes)\nor ref-delta (20 bytes).\n\nNotice that with \"recent\" Git versions, ofs-delta objects are\npreferred over ref-delta objects and ref-delta objects have no reason\nto be present in a clone pack. So in clone case we waste\n(20-8) * nr_objects bytes because of this union. That's about 38MB out\nof 100MB for deltas[] with 3.4M objects, or 38%. deltas[] would be\naround 62MB without the waste.\n\nThis patch attempts to eliminate that. deltas[] array is split into\ntwo: one for ofs-delta and one for ref-delta. Many functions are also\nduplicated because of this split. With this patch, ofs_delta_entry[]\narray takes 38MB. ref_deltas[] should remain unallocated in clone case\n(0 bytes). This array grows as we see ref-delta. We save more than\nhalf in clone case, or 25% of total book keeping.\n\nThe saving is more than the calculation above because padding is\nremoved by __attribute__((packed)) on ofs_delta_entry. This attribute\nshould be ok to use, as we used to have it in our code base for some\ntime. The last use was removed because it may lead to incorrect\nbehavior when the struct is not packed, which is not the case in\nindex-pack.\n\nA note about ofs_deltas allocation. We could use ref_deltas memory\nallocation strategy for ofs_deltas. But that probably just adds more\noverhead on top. ofs-deltas are generally the majority (1/2 to 2/3) in\nany pack. Incremental realloc may lead to too many memcpy. And if we\npreallocate, say 1/2 or 2/3 of nr_objects initially, the growth rate\nof ALLOC_GROW() could make this array larger than nr_objects, wasting\nmore memory.\n\nBrought-up-by: Matthew Sporleder <msporleder@gmail.com>\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/gitster/git/commits/3538291b27f0de9a22bd0c6bdb42983c928a26f1"},{"sha":"87d82cf251e272782c8172022f807a9725cbdcce","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'es/blame-commit-info-fix' into jch\n\n* es/blame-commit-info-fix:\n  builtin/blame: destroy initialized commit_info only","distinct":false,"url":"https://api.github.com/repos/gitster/git/commits/87d82cf251e272782c8172022f807a9725cbdcce"},{"sha":"1f0a737eeb5259fc3bd3b3cb9cf71cf3727b9914","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'es/squelch-openssl-warnings-on-macosx' into jch\n\n* es/squelch-openssl-warnings-on-macosx:\n  git-compat-util: do not step on MAC_OS_X_VERSION_MIN_REQUIRED","distinct":false,"url":"https://api.github.com/repos/gitster/git/commits/1f0a737eeb5259fc3bd3b3cb9cf71cf3727b9914"},{"sha":"6044cad3aeaa2b4ab2356f2b9f9a2488ddf04786","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'ab/merge-file-prefix' into jch\n\n* ab/merge-file-prefix:\n  merge-file: correctly open files when in a subdir","distinct":false,"url":"https://api.github.com/repos/gitster/git/commits/6044cad3aeaa2b4ab2356f2b9f9a2488ddf04786"},{"sha":"073f5884413e692f04b2787dd5f761581dd7476c","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'jk/fast-import-die-nicely-fix' into jch\n\n* jk/fast-import-die-nicely-fix:\n  fast-import: avoid running end_packfile recursively","distinct":false,"url":"https://api.github.com/repos/gitster/git/commits/073f5884413e692f04b2787dd5f761581dd7476c"},{"sha":"c536c0755f6450b7bcce499cfda171f8c6d1e593","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"apply: reject input that touches outside the working area\n\nBy default, a patch that affects outside the working area (either a\nGit controlled working tree, or the current working directory when\n\"git apply\" is used as a replacement of GNU patch) is rejected as a\nmistake (or a mischief).  Git itself does not create such a patch,\nunless the user bends over backwards and specifies a non-standard\nprefix to \"git diff\" and friends.\n\nWhen `git apply` is used as a \"better GNU patch\", the user can pass\nthe `--unsafe-paths` option to override this safety check. This\noption has no effect when `--index` or `--cached` is in use.\n\nThe new test was stolen from Jeff King with slight enhancements.\nNote that a few new tests for touching outside the working area by\nfollowing a symbolic link are still expected to fail at this step,\nbut will be fixed in later steps.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/gitster/git/commits/c536c0755f6450b7bcce499cfda171f8c6d1e593"},{"sha":"3c37a2e339e695c7cc41048fe0921cbc8b48b0f0","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"apply: do not read from the filesystem under --index\n\nWe currently read the preimage to apply a patch from the index only\nwhen the --cached option is given.  Do so also when the command is\nrunning under the --index option.  With --index, the index entry and\nthe working tree file for a path that is involved in a patch must be\nidentical, so this should not affect the result, but by reading from\nthe index, we will get the protection to avoid reading an unintended\npath beyond a symbolic link automatically.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/gitster/git/commits/3c37a2e339e695c7cc41048fe0921cbc8b48b0f0"},{"sha":"fdc2c3a926c21e24986677abd02c8bc568a5de32","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"apply: do not read from beyond a symbolic link\n\nWe should reject a patch, whether it renames/copies dir/file to\nelsewhere with or without modificiation, or updates dir/file in\nplace, if \"dir/\" part is actually a symbolic link to elsewhere,\nby making sure that the code to read the preimage does not read\nfrom a path that is beyond a symbolic link.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/gitster/git/commits/fdc2c3a926c21e24986677abd02c8bc568a5de32"},{"sha":"e0d201b61601e17e24ed00cc3d16e8e25ca68596","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"apply: do not touch a file beyond a symbolic link\n\nBecause Git tracks symbolic links as symbolic links, a path that\nhas a symbolic link in its leading part (e.g. path/to/dir/file,\nwhere path/to/dir is a symbolic link to somewhere else, be it\ninside or outside the working tree) can never appear in a patch\nthat validly applies, unless the same patch first removes the\nsymbolic link to allow a directory to be created there.\n\nDetect and reject such a patch.\n\nThings to note:\n\n - Unfortunately, we cannot reuse the has_symlink_leading_path()\n   from dir.c, as that is only about the working tree, but \"git\n   apply\" can be told to apply the patch only to the index or to\n   both the index and to the working tree.\n\n - We cannot directly use has_symlink_leading_path() even when we\n   are applying only to the working tree, as an early patch of a\n   valid input may remove a symbolic link path/to/dir and then a\n   later patch of the input may create a path path/to/dir/file, but\n   \"git apply\" first checks the input without touching either the\n   index or the working tree.  The leading symbolic link check must\n   be done on the interim result we compute in-core (i.e. after the\n   first patch, there is no path/to/dir symbolic link and it is\n   perfectly valid to create path/to/dir/file).\n\n   Similarly, when an input creates a symbolic link path/to/dir and\n   then creates a file path/to/dir/file, we need to flag it as an\n   error without actually creating path/to/dir symbolic link in the\n   filesystem.\n\nInstead, for any patch in the input that leaves a path (i.e. a non\ndeletion) in the result, we check all leading paths against the\nresulting tree that the patch would create by inspecting all the\npatches in the input and then the target of patch application\n(either the index or the working tree).\n\nThis way, we catch a mischief or a mistake to add a symbolic link\npath/to/dir and a file path/to/dir/file at the same time, while\nallowing a valid patch that removes a symbolic link path/to/dir and\nthen adds a file path/to/dir/file.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/gitster/git/commits/e0d201b61601e17e24ed00cc3d16e8e25ca68596"},{"sha":"b0c5a9de49f2381f2d67259ccea336d64da01f55","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'jc/apply-beyond-symlink' into pu\n\n\"git apply\" was not very careful about reading from, removing,\nupdating and creating paths outside the working tree (under\n--index/--cached) or the current directory (when used as a\nreplacement for GNU patch).\n\nMay need to re-review the tests.\n\n* jc/apply-beyond-symlink:\n  apply: do not touch a file beyond a symbolic link\n  apply: do not read from beyond a symbolic link\n  apply: do not read from the filesystem under --index\n  apply: reject input that touches outside the working area","distinct":true,"url":"https://api.github.com/repos/gitster/git/commits/b0c5a9de49f2381f2d67259ccea336d64da01f55"},{"sha":"eba20a9d46e677d403deb05a0a9949613b995b4a","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'jc/diff-b-m' into pu\n\n\"git diff -B -M\" produced incorrect patch when the postimage of a\ncompletely rewritten file is similar to the preimage of a removed\nfile; such a resulting file must not be expressed as a rename from\nother place.\n\nThe fix in this patch is broken, unfortunately.\n\n* jc/diff-b-m:\n  diff: do not use creation-half of -B as a rename target candidate","distinct":true,"url":"https://api.github.com/repos/gitster/git/commits/eba20a9d46e677d403deb05a0a9949613b995b4a"},{"sha":"a563a139a8d4c59385549f09df3ae019fe3f3c85","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'je/quiltimport-no-fuzz' into pu\n\n\"quiltimport\" drove \"git apply\" always with -C1 option to reduce\ncontext of the patch in order to give more chance to somewhat stale\npatches to apply.  Add an \"--exact\" option to disable, and also\n\"-C$n\" option to customize this behaviour.  The top patch\noptionally flips the default to \"--exact\".\n\nTired of waiting for an Ack; will discard.\n\n* je/quiltimport-no-fuzz:\n  git-quiltimport: flip the default not to allow fuzz\n  git-quiltimport.sh: allow declining fuzz with --exact option","distinct":true,"url":"https://api.github.com/repos/gitster/git/commits/a563a139a8d4c59385549f09df3ae019fe3f3c85"},{"sha":"776d56e7e67b35913310b1398ea5519d9a65e70a","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'pw/remote-set-url-fetch' into pu\n\n* pw/remote-set-url-fetch:\n  remote: add --fetch and --both options to set-url","distinct":true,"url":"https://api.github.com/repos/gitster/git/commits/776d56e7e67b35913310b1398ea5519d9a65e70a"},{"sha":"829acec86c63efdae64e4c230e90edfbc73b754f","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'tr/remerge-diff' into pu\n\n\"log -p\" output learns a new way to let users inspect a merge\ncommit by showing the differences between the automerged result\nwith conflicts the person who recorded the merge would have seen\nand the final conflict resolution that was recorded in the merge.\n\n* tr/remerge-diff:\n  t4213: avoid \"|\" in sed regexp\n  log --remerge-diff: show what the conflict resolution changed\n  name-hash: allow dir hashing even when !ignore_case\n  merge-recursive: allow storing conflict hunks in index\n  merge_diff_mode: fold all merge diff variants into an enum\n  combine-diff: do not pass revs->dense_combined_merges redundantly\n  merge-recursive: -Xindex-only to leave worktree unchanged\n  merge-recursive: internal flag to avoid touching the worktree\n  merge-recursive: remove dead conditional in update_stages()","distinct":true,"url":"https://api.github.com/repos/gitster/git/commits/829acec86c63efdae64e4c230e90edfbc73b754f"},{"sha":"4e48a14eb1ba32c7ad7d9e828ffc4f099af97c7b","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'bg/rebase-off-of-previous-branch' into pu\n\nTeach \"git rebase -\" to report the concrete name of the branch\n(i.e. the previous one).\n\nBut it stops short and does not do the same for \"git rebase @{-1}\".\n\n* bg/rebase-off-of-previous-branch:\n  git-rebase: print name of rev when using shorthand","distinct":true,"url":"https://api.github.com/repos/gitster/git/commits/4e48a14eb1ba32c7ad7d9e828ffc4f099af97c7b"},{"sha":"f7b590031b8d29880afb9f0d80b843a37e610752","author":{"email":"a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","name":"Junio C Hamano"},"message":"Merge branch 'rb/merge-prepare-commit-msg-hook' into pu\n\nExpose more merge states (e.g. $GIT_DIR/MERGE_MODE) to hooks that\nrun during \"git merge\".  The log message stresses too much on one\nhook, prepare-commit-msg, but it would equally apply to other hooks\nlike post-merge, I think.\n\n* rb/merge-prepare-commit-msg-hook:\n  merge: drop unused arg from abort_commit method signature\n  merge: make prepare_to_commit responsible for write_merge_state\n  t7505: ensure cleanup after hook blocks merge\n  t7505: add missing &&","distinct":true,"url":"https://api.github.com/repos/gitster/git/commits/f7b590031b8d29880afb9f0d80b843a37e610752"}]}