payload: {"push_id":4150322157,"size":113,"distinct_size":0,"ref":"refs/heads/jk/object-size-hooks","head":"a0aa2b47f9a78ae187d79841deb6fc7e54516945","before":"1daba26f929a3e893c000aeb8b11d47c60d4af93","commits":[{"sha":"d8523ca1b90641be4bddcdfc50fbf3a1be34adae","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: be consistent with assert\n\nIn commit 8daec1df03de (\"merge-recursive: switch from (oid,mode) pairs\nto a diff_filespec\", 2019-04-05), an assertion on a->path && b->path\nwas added for code readability to document that these both needed to be\nnon-NULL at this point in the code.  However, the subsequent lines also\nread o->path, so it should be included in the assert.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/d8523ca1b90641be4bddcdfc50fbf3a1be34adae"},{"sha":"65c01c644250fb0a92f929c2fc61f33771bf480f","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"checkout: provide better conflict hunk description with detached HEAD\n\nWhen running 'git checkout -m' and using diff3 style conflict markers,\nwe want all the conflict hunks (left-side, \"common\" or \"merge base\", and\nright-side) to have label markers letting the user know where each came\nfrom.  The \"common\" hunk label (o.ancestor) came from\nold_branch_info->name, but that is NULL when HEAD is detached, which\nresulted in a blank label.  Check for that case and provide an\nabbreviated commit hash instead.\n\n(Incidentally, this was the only case in the git codebase where\nmerge_trees() was called with opt->ancestor being NULL.  A subsequent\ncommit will prevent similar problems by enforcing that merge_trees()\nalways be called with opt->ancestor != NULL.)\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/65c01c644250fb0a92f929c2fc61f33771bf480f"},{"sha":"139ef37a2f4daf2071debeca8b2115b4e4b0a33f","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: enforce opt->ancestor != NULL when calling merge_trees()\n\nWe always want our conflict hunks to be labelled so that users can know\nwhere each came from.  The previous commit fixed the one caller in the\ncodebase which was not setting opt->ancestor (and thus not providing a\nlabel for the \"merge base\" conflict hunk in diff3-style conflict\nmarkers); add an assertion to prevent future codepaths from also\noverlooking this requirement.\n\nEnforcing this requirement also allows us to simplify the code for\nlabelling the conflict hunks by no longer checking if the ancestor label\nis NULL.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/139ef37a2f4daf2071debeca8b2115b4e4b0a33f"},{"sha":"743474cbfa8b65016dd02b4e56dd9f47f95652c3","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: provide a better label for diff3 common ancestor\n\nIn commit 7ca56aa07619 (\"merge-recursive: add a label for ancestor\",\n2010-03-20), a label was added for the '||||||' line to make it have\nthe more informative heading '|||||| merged common ancestors', with\nthe statement:\n\n    It would be nicer to use a more informative label.  Perhaps someone\n    will provide one some day.\n\nThis chosen label was perfectly reasonable when recursiveness kicks in,\ni.e. when there are multiple merge bases.  (I can't think of a better\nlabel in such cases.)  But it is actually somewhat misleading when there\nis a unique merge base or no merge base.  Change this based on the\nnumber of merge bases:\n    >=2: \"merged common ancestors\"\n    1:   <abbreviated commit hash>\n    0:   \"<empty tree>\"\n\nTests have also been added to check that we get the right ancestor name\nfor each of the three cases.\n\nAlso, since merge_recursive() and merge_trees() have polar opposite\npre-conditions for opt->ancestor, document merge_recursive()'s\npre-condition with an assertion.  (An assertion was added to\nmerge_trees() already a few commits ago.)  The differences in\npre-conditions stem from two factors: (1) merge_trees() does not recurse\nand thus does not have multiple sub-merges to worry about -- each of\nwhich would require a different value for opt->ancestor, (2)\nmerge_trees() is only passed trees rather than commits and thus cannot\ninternally guess as good of a label.  Thus, while external callers of\nmerge_trees() are required to provide a non-NULL opt->ancestor,\nmerge_recursive() expects to set this value itself.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/743474cbfa8b65016dd02b4e56dd9f47f95652c3"},{"sha":"8e01251694fa277df53e5c52c137f0b4134d2cd5","author":{"name":"Derrick Stolee","email":"ee0b68d4428a726bf8f65d5915bcba7139f7e5c7@microsoft.com"},"message":"merge-recursive: introduce an enum for detect_directory_renames values\n\nImprove code readability by introducing an enum to replace the\nnot-quite-boolean values taken on by detect_directory_renames.\n\nSigned-off-by: Derrick Stolee <dstolee@microsoft.com>\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/8e01251694fa277df53e5c52c137f0b4134d2cd5"},{"sha":"f836bf393731e141a289f6b82d549cf0a10a2bcc","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: future-proof update_file_flags() against memory leaks\n\nThere is a 'free_buf' label to which all but one of the error paths in\nupdate_file_flags() jump; that error case involves a NULL buf and is\nthus not a memory leak.  However, make that error case execute the same\ndeallocation code anyway so that if anyone adds any additional memory\nallocations or deallocations, then all error paths correctly deallocate\nresources.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/f836bf393731e141a289f6b82d549cf0a10a2bcc"},{"sha":"10f751c06bb3dbc2afed0e80ecfbd6242e12d538","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: remove another implicit dependency on the_repository\n\nCommit d7cf3a96e9a0 (\"merge-recursive.c: remove implicit dependency on\nthe_repository\", 2019-01-12) and follow-ups like commit 34e7771bc644\n(\"Use the right 'struct repository' instead of the_repository\",\n2019-06-27), removed most implicit uses of the_repository.  Convert\ncalls to get_commit_tree() to instead use repo_get_commit_tree() to get\nrid of another.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/10f751c06bb3dbc2afed0e80ecfbd6242e12d538"},{"sha":"9822175d2b349be1ed7a704d3a56dc912f5a7510","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"Ensure index matches head before invoking merge machinery, round N\n\nThis is the bug that just won't die; there always seems to be another\nform of it somewhere.  See the commit message of 55f39cf7551b (\"merge:\nfix misleading pre-merge check documentation\", 2018-06-30) for a more\ndetailed explanation), but in short:\n\n<quick summary>\n\nbuiltin/merge.c contains this important requirement for merge\nstrategies:\n\n    ...the index must be in sync with the head commit.  The strategies are\n    responsible to ensure this.\n\nThis condition is important to enforce because there are two likely\nfailure cases when the index isn't in sync with the head commit:\n\n  * we silently throw away changes the user had staged before the merge\n\n  * we accidentally (and silently) include changes in the merge that\n    were not part of either of the branches/trees being merged\n\nDiscarding users' work and mis-merging are both bad outcomes, especially\nwhen done silently, so naturally this rule was stated sternly -- but,\nunfortunately totally ignored in practice unless and until actual bugs\nwere found.  But, fear not: the bugs from this were fixed in commit\n  ee6566e8d70d (\"[PATCH] Rewrite read-tree\", 2005-09-05)\nthrough a rewrite of read-tree (again, commit 55f39cf7551b has a more\ndetailed explanation of how this affected merge).  And it was fixed\nagain in commit\n  160252f81626 (\"git-merge-ours: make sure our index matches HEAD\", 2005-11-03)\n...and it was fixed again in commit\n  3ec62ad9ffba (\"merge-octopus: abort if index does not match HEAD\", 2016-04-09)\n...and again in commit\n  65170c07d466 (\"merge-recursive: avoid incorporating uncommitted changes in a merge\", 2017-12-21)\n...and again in commit\n  eddd1a411d93 (\"merge-recursive: enforce rule that index matches head before merging\", 2018-06-30)\n\n...with multiple testcases added to the testsuite that could be\nenumerated in even more commits.\n\nThen, finally, in a patch in the same series as the last fix above, the\ndocumentation about this requirement was fixed in commit 55f39cf7551b\n(\"merge: fix misleading pre-merge check documentation\", 2018-06-30), and\nwe all lived happily ever after...\n\n</quick summary>\n\nUnfortunately, \"ever after\" apparently denotes a limited time and it\nexpired today.  The merge-recursive rule to enforce that index matches\nhead was at the beginning of merge_trees() and would only trigger when\nopt->call_depth was 0.  Since merge_recursive() doesn't call\nmerge_trees() until after returning from recursing, this meant that the\ncheck wasn't triggered by merge_recursive() until it had first finished\nall the intermediate merges to create virtual merge bases.  That is a\npotentially HUGE amount of computation (and writing of intermediate\nmerge results into the .git/objects directory) before it errors out and\nsays, in effect, \"Sorry, I can't do any merging because you have some\nlocal changes that would be overwritten.\"\n\nTrying to enforce that all of merge_trees(), merge_recursive(), and\nmerge_recursive_generic() checked the index == head condition earlier\nresulted in a bunch of broken tests.  It turns out that\nmerge_recursive() has code to drop and reload the cache while recursing\nto create intermediate virtual merge bases, but unfortunately that code\nruns even when no recursion is necessary.  This unconditional dropping\nand reloading of the cache masked a few bugs:\n\n  * builtin/merge-recursive.c: didn't even bother loading the index.\n\n  * builtin/stash.c: feels like a fake 'builtin' because it repeatedly\n    invokes git subprocesses all over the place, mixed with other\n    operations.  In particular, invoking \"git reset\" will reset the\n    index on disk, but the parent process that invoked it won't\n    automatically have its in-memory index updated.\n\n  * t3030-merge-recursive.h: this test has always been broken in that it\n    didn't make sure to make index match head before running.  But, it\n    didn't care about the index or even the merge result, just the\n    verbose output while running.  While commit eddd1a411d93\n    (\"merge-recursive: enforce rule that index matches head before\n    merging\", 2018-06-30) should have uncovered this broken test, it\n    used a test_must_fail wrapper around the merge-recursive call\n    because it was known that the merge resulted in a rename/rename\n    conflict.  Thus, that fix only made this test fail for a different\n    reason, and since the index == head check didn't happen until after\n    coming all the way back out of the recursion, the testcase had\n    enough information to pass the one check that it did perform.\n\nSo, load the index in builtin/merge-recursive.c, reload the in-memory\nindex in builtin/stash.c, and modify the t3030 testcase to correctly\nsetup the index and make sure that the test fails in the expected way\n(meaning it reports a rename/rename conflict).  This makes sure that\nall callers actually make the index match head.  The next commit will\nthen enforce the condition that index matches head earlier so this\nproblem doesn't return in the future.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/9822175d2b349be1ed7a704d3a56dc912f5a7510"},{"sha":"98a1d3d88895a1cbc01b88627776bb4e2bfd6b84","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: exit early if index != head\n\nWe had a rule to enforce that the index matches head, but it was found\nat the beginning of merge_trees() and would only trigger when\nopt->call_depth was 0.  Since merge_recursive() doesn't call\nmerge_trees() until after returning from recursing, this meant that the\ncheck wasn't triggered by merge_recursive() until it had first finished\nall the intermediate merges to create virtual merge bases.  That is a\npotentially huge amount of computation (and writing of intermediate\nmerge results into the .git/objects directory) before it errors out and\nsays, in effect, \"Sorry, I can't do any merging because you have some\nlocal changes that would be overwritten.\"\n\nFurther, not enforcing this requirement earlier allowed other bugs (such\nas an unintentional unconditional dropping and reloading of the index in\nmerge_recursive() even when no recursion was necessary), to mask bugs in\nother callers (which were fixed in the commit prior to this one).\n\nMake sure we do the index == head check at the beginning of the merge,\nand error out immediately if it fails.  While we're at it, fix a small\nleak in the show-the-error codepath.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/98a1d3d88895a1cbc01b88627776bb4e2bfd6b84"},{"sha":"b4db8a2b768742f4f43d4a6cdb1db39c2ffc9f7f","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: remove useless parameter in merge_trees()\n\nmerge_trees() took a results parameter that would only be written when\nopt->call_depth was positive, which is never the case now that\nmerge_trees_internal() has been split from merge_trees().  Remove the\nmisleading and unused parameter from merge_trees().\n\nWhile at it, add some comments explaining how the output of\nmerge_trees() and merge_recursive() differ.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/b4db8a2b768742f4f43d4a6cdb1db39c2ffc9f7f"},{"sha":"345480d1ed462135d98e99cb5b5a426da27257c8","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: don't force external callers to do our logging\n\nAlternatively, you can view this as \"make the merge functions behave\nmore similarly.\"  merge-recursive has three different entry points:\nmerge_trees(), merge_recursive(), and merge_recursive_generic().  Two of\nthese would call diff_warn_rename_limit(), but merge_trees() didn't.\nThis lead to callers of merge_trees() needing to manually call\ndiff_warn_rename_limit() themselves.  Move this to the new\nmerge_finalize() function to make sure that all three entry points run\nthis function.\n\nNote that there are two external callers of merge_trees(), one in\nsequencer.c and one in builtin/checkout.c.  The one in sequencer.c is\ncleaned up by this patch and just transfers where the call to\ndiff_warn_rename_limit() is made; the one in builtin/checkout.c is for\nswitching to a different commit and in the very rare case where the\nwarning might be triggered, it would probably be helpful to include\n(e.g. if someone is modifying a file that has been renamed in moving to\nthe other commit, but there are so many renames between the commits that\nthe limit kicks in and none are detected, it may help to have an\nexplanation about why they got a delete/modify conflict instead of a\nproper content merge in a renamed file).\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/345480d1ed462135d98e99cb5b5a426da27257c8"},{"sha":"724dd767b245db588840d7e9dbd46687ee84020b","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"cache-tree: share code between functions writing an index as a tree\n\nwrite_tree_from_memory() appeared to be a merge-recursive special that\nbasically duplicated write_index_as_tree().  The two have a different\nsignature, but the bigger difference was just that write_index_as_tree()\nwould always unconditionally read the index off of disk instead of\nworking on the current in-memory index.  So:\n\n  * split out common code into write_index_as_tree_internal()\n\n  * rename write_tree_from_memory() to write_inmemory_index_as_tree(),\n    make it call write_index_as_tree_internal(), and move it to\n    cache-tree.c\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/724dd767b245db588840d7e9dbd46687ee84020b"},{"sha":"4d7101e25cfd5fba24ddc310f10c3962edba8b4d","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: fix some overly long lines\n\nNo substantive code change, just add some line breaks to fix lines that\nhave grown in length due to various refactorings.  Most remaining lines\nof excessive length in merge-recursive include error messages and it's\nnot clear that splitting those improves things.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/4d7101e25cfd5fba24ddc310f10c3962edba8b4d"},{"sha":"ff1bfa2cd5693900a84750dc47cda3cee3cf6ba7","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: use common name for ancestors/common/base_list\n\nmerge_trees(), merge_recursive(), and merge_recursive_generic() in\ntheir function headers used four different names for the merge base or\nlist of merge bases they were passed:\n  * 'common'\n  * 'ancestors'\n  * 'ca'\n  * 'base_list'\nThey were able to refer to it four different ways instead of only three\nby using a different name in the signature for the .c file than the .h\nfile.  Change all of these to 'merge_base' or 'merge_bases'.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/ff1bfa2cd5693900a84750dc47cda3cee3cf6ba7"},{"sha":"bab56877e04efcf1bf9154398131dd57d73725d4","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: rename 'mrtree' to 'result_tree', for clarity\n\nIt is not at all clear what 'mr' was supposed to stand for, at least not\nto me.  Pick a clearer name for this variable.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/bab56877e04efcf1bf9154398131dd57d73725d4"},{"sha":"c749ab1da812cdb1263f868c63fe1808a12dcff2","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: rename merge_options argument to opt in header\n\nIn commit 259ccb6cc324 (\"merge-recursive: rename merge_options argument\nfrom 'o' to 'opt'\", 2019-04-05), I renamed a bunch of function\narguments in merge-recursive.c, but forgot to make that same change to\nmerge-recursive.h.  Make the two match.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/c749ab1da812cdb1263f868c63fe1808a12dcff2"},{"sha":"7c0a6c8e477bd9009001590f49274e892e92fce8","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: move some definitions around to clean up the header\n\nNo substantive code changes (view this with diff --color-moved), but\na few small code cleanups:\n  * Move structs and an inline function only used by merge-recursive.c\n    into merge-recursive.c\n  * Re-order function declarations to be more logical\n  * Add or fix some explanatory comments\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/7c0a6c8e477bd9009001590f49274e892e92fce8"},{"sha":"8599ab4574ce3a8b2fc894c7cfdac8fd61450b7b","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: consolidate unnecessary fields in merge_options\n\nWe provided users with the ability to state whether they wanted rename\ndetection, and to put a limit on how much CPU would be spent.  Both of\nthese fields had multiple configuration parameters for setting them,\nwith one being a fallback and the other being an override.  However,\ninstead of implementing the logic for how to combine the multiple\nsource locations into the appropriate setting at config loading time,\nwe loaded and tracked both values and then made the code combine them\nevery time it wanted to check the overall value.  This had a few\nminor drawbacks:\n  * it seems more complicated than necessary\n  * it runs the risk of people using the independent settings in the\n    future and breaking the intent of how the options are used\n    together\n  * it makes merge_options more complicated than necessary for other\n    potential users of the API\n\nFix these problems by moving the logic for combining the pairs of\noptions into a single value; make it apply at time-of-config-loading\ninstead of each-time-of-use.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/8599ab4574ce3a8b2fc894c7cfdac8fd61450b7b"},{"sha":"a779fb829bf6160cb519500ac1e15d8ab8a247a4","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: comment and reorder the merge_options fields\n\nThe merge_options struct had lots of fields, making it a little\nimposing, but the options naturally fall into multiple different groups.\nGrouping similar options and adding a comment or two makes it easier to\nread, easier for new folks to figure out which options are related, and\nthus easier for them to find the options they need.\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/a779fb829bf6160cb519500ac1e15d8ab8a247a4"},{"sha":"e95e481f9e6e4dfe62380ccc8a47acf446403a94","author":{"name":"Elijah Newren","email":"955405675e5ddb1a110d200661c528aa223ef60f@gmail.com"},"message":"merge-recursive: avoid losing output and leaking memory holding that output\n\nIf opt->buffer_output is less than 2, then merge_trees(),\nmerge_recursive(), and merge_recursive_generic() are all supposed to\nflush the opt->obuf output buffer to stdout and release any memory it\nholds.  merge_trees() did not do this.  Move the logic that handles this\nfor merge_recursive_internal() to merge_finalize() so that all three\nmethods handle this requirement.\n\nNote that this bug didn't cause any problems currently, because there\nare only two callers of merge_trees() right now (a git grep for\n'merge_trees(' is misleading because builtin/merge-tree.c also defines a\n'merge_tree' function that is unrelated), and only one of those is\ncalled with buffer_output less than 2 (builtin/checkout.c), but it set\nopt->verbosity to 0, for which there is only currently one non-error\nmessage that would be shown: \"Already up to date!\".  However, that one\nmessage can only occur when the merge is utterly trivial (the merge base\ntree exactly matches the merge tree), and builtin/checkout.c already\nattempts a trivial merge via unpack_trees() before falling back to\nmerge_trees().\n\nAlso, if opt->buffer_output is 2, then the caller is responsible to\nhandle showing any output in opt->obuf and for free'ing it.  This\nrequirement might be easy to overlook, so add a comment to\nmerge-recursive.h pointing it out.  (There are currently two callers\nthat set buffer_output to 2, both in sequencer.c, and both of which\nhandle this correctly.)\n\nSigned-off-by: Elijah Newren <newren@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/e95e481f9e6e4dfe62380ccc8a47acf446403a94"}]}
other: {"actor":{"display_login":"peff"}}