{"shas":[["f2cfc9c81ea2fe72ea0ac57d63e71e10e8b0af94","a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","Merge branch 'en/object-list-with-pathspec' into 'nd/struct-pathspec'\n\nThis is to improve the process_tree() function defined in list-objects.c\n\n* en/object-list-with-pathspec:\n  Add testcases showing how pathspecs are handled with rev-list --objects\n  Make rev-list --objects work together with pathspecs","Junio C Hamano"],["ffd31f661d5c5dddc091750ca86cfaa5d9d04b38","024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","Reimplement read_tree_recursive() using tree_entry_interesting()\n\nread_tree_recursive() uses a very similar function, match_tree_entry, to\ntree_entry_interesting() to do its path matching. This patch kills\nmatch_tree_entry() in favor of tree_entry_interesting().\n\nmatch_tree_entry(), like older version of tree_entry_interesting(), does\nnot support wildcard matching. New read_tree_recursive() retains this\nbehavior by forcing all pathspecs literal.\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","Nguyễn Thái Ngọc Duy"],["f0096c06bcdeb7aa6ae8a749ddc9d6d4a2c381d1","024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","Convert read_tree{,_recursive} to support struct pathspec\n\nThis patch changes behavior of the two functions. Previously it does\nprefix matching only. Now it can also do wildcard matching.\n\nAll callers are updated. Some gain wildcard matching (archive,\ncheckout), others reset pathspec_item.has_wildcard to retain old\nbehavior (ls-files, ls-tree as they are plumbing).\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","Nguyễn Thái Ngọc Duy"],["97d0b74a49f0c81c3f9673c1a17721ac0624c3df","024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","Improve tree_entry_interesting() handling code\n\nt_e_i() can return -1 or 2 to early shortcut a search. Current code\nmay use up to two variables to handle it. One for saving return value\nfrom t_e_i temporarily, one for saving return code 2.\n\nThe second variable is not needed. If we make sure the first variable\ndoes not change until the next t_e_i() call, then we can do something\nlike this:\n\nint ret = 0;\n\nwhile (...) {\n\tif (ret != 2) {\n\t\tret = t_e_i();\n\t\tif (ret < 0) /* no longer interesting */\n\t\t\tbreak;\n\t\tif (ret == 0) /* skip this round */\n\t\t\tcontinue;\n\t}\n\t/* ret > 0, interesting */\n}\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","Nguyễn Thái Ngọc Duy"],["939c1e623843f69db82f9ab4b74ee5e9914c1a2a","696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","t3030: fix accidental success in symlink rename\n\nIn this test, we have merge two branches. On one branch, we\nrenamed \"a\" to \"e\". On the other, we renamed \"a\" to \"e\" and\nthen added a symlink pointing at \"a\" pointing to \"e\".\n\nThe results for the test indicate that the merge should\nsucceed, but also that \"a\" should no longer exist. Since\nboth sides renamed \"a\" to the same destination, we will end\nup comparing those destinations for content.\n\nBut what about what's left? One side (the rename only),\nreplaced \"a\" with nothing. The other side replaced it with a\nsymlink. The common base must also be nothing, because any\n\"a\" before this was meaningless (it was totally unrelated\ncontent that ended up getting renamed).\n\nThe only sensible resolution is to keep the symlink. The\nrename-only side didn't touch the content versus the common\nbase, and the other side added content. The 3-way merge\ndictates that we take the side with a change.\n\nAnd this gives the overall merge an intuitive result.  One\nside made one change (a rename), and the other side made two\nchanges: an identical rename, and an addition (that just\nhappened to be at the same spot). The end result should\ncontain both changes.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","Jeff King"],["103e404e9d0b3b8056b2ce4a89ba0516e2758fc6","696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","merge: handle renames with replacement content\n\nWe generally think of a rename as removing one path entirely\nand placing similar content at a new path. In other words,\nafter a rename, the original path is now empty. But that is\nnot necessarily the case with rewrite detection (which is\nnot currently possible to do for merge-recursive).\n\nThe current merge code blindly removes paths that are used\nas rename sources; however, we should check to see if there\nis useful content at that path.  There are basically two\ninteresting cases:\n\n  1. One side renames a path, but also puts new content\n     (or a symlink) at the same path. We want to detect the\n     rename, and have changes from the other side applied to\n     the rename destination. The new content at the original\n     path should be left untouched.\n\n     The current code just calls remove_file, but that\n     ignores the concept that the renaming side may put\n     something else useful there. We should detect this case\n     and either remove (if no new content), or put the new\n     content in place at the original path.\n\n  2. Both sides renamed and installed new content at the\n     original path. If they didn't rename to the same\n     destination, it is a conflict, and we already mark it\n     as such. But if it's the same destination, then it's\n     not a conflict; the renamed content will be merged at\n     the new destination.\n\n     For the new content at the original path, we have to do\n     a 3-way merge. The base must be the null sha1, because\n     this \"slot\" for content didn't exist before (it was\n     taken up by the content which got renamed away). So if\n     only one side installed new content, that content\n     automatically wins. If both sides did, and it is the\n     same content, then that content is OK. But if the\n     content is different, then we have a conflict and\n     should do the usual conflict-markers thing.\n\nThis patch implements the semantics described above, which\nlays the groundwork for turning on rewrite detection.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","Jeff King"],["63433a4706a2b7efd054eda5d042bf026529a7bb","696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","merge: turn on rewrite detection\n\nWe currently don't do break-detection at all in\nmerge-recursive. But there are some cases where it would\nprovide a more useful merge result.\n\nFor example, consider this case (which is the basis for the\nnew tests in t6039):\n\n  1. You rename a header file foo.h to bar.h. You install a\n     new foo.h that includes bar.h (for compatibility).\n\n  2. Another branch makes changes to foo.h.\n\nWhen you merge, you want the changes the other branch made\nto foo.h to migrate to the rename destination, bar.h, just\nas you would if you hadn't installed that compatibility\nheader.\n\nSimilarly, you want the compatibility header left untouched.\nThe other side's changes all ended up in bar.h, so there is\nno reason to conflict with the new content in foo.h.\n\nThis patch turns on break detection for merge-recursive. In\naddition to new tests in t6039, it makes a similar test in\nt3030 pass.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","Jeff King"],["97b1b4f3a682377aa8f03348618e79bd1df1772e","696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","merge: merge unborn index before setting ref\n\nWhen we merge into an unborn branch, there are basically two\nsteps:\n\n  1. Write the sha1 of the new commit into the ref pointed\n     to by HEAD.\n\n  2. Update the index with the new content, and check it out\n     to the working tree.\n\nWe currently do them in this order. However, (2) is the step\nthat is much more likely to fail, since it can be blocked by\nthings like untracked working tree files. When it does, the\nmerge fails and we are left with an empty index but an\nupdated HEAD.\n\nThis patch switches the order, so that a failure in updating\nthe index leaves us unchanged. Of course, a failure in\nupdating the ref now leaves us with an updated index and\nmis-matched HEAD. That is arguably not much better, but it\nis probably less likely to actually happen.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","Jeff King"],["4b3ffe5184bd550dddacdd0b32b18ad0e73c7908","696e3fbcf235d40b6ea1ebd61c87cbea79d444e7@peff.net","pull: do not clobber untracked files on initial pull\n\nFor a pull into an unborn branch, we do not use \"git merge\"\nat all. Instead, we call read-tree directly. However, we\nused the --reset parameter instead of \"-m\", which turns off\nthe safety features.\n\nSigned-off-by: Jeff King <peff@peff.net>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","Jeff King"],["f0e0f5c3ef1aa11d80e66e90e856fce951919638","a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","Merge branch 'mz/rebase' (early part) into jch\n\n* 'mz/rebase' (early part): (32 commits)\n  rebase: use @{upstream} if no upstream specified\n  rebase -i: remove unnecessary state rebase-root\n  rebase -i: don't read unused variable preserve_merges\n  git-rebase--am: remove unnecessary --3way option\n  rebase -m: don't print exit code 2 when merge fails\n  rebase -m: remember allow_rerere_autoupdate option\n  rebase: remember strategy and strategy options\n  rebase: remember verbose option\n  rebase: extract code for writing basic state\n  rebase: factor out sub command handling\n  rebase: make -v a tiny bit more verbose\n  rebase -i: align variable names\n  rebase: show consistent conflict resolution hint\n  rebase: extract am code to new source file\n  rebase: extract merge code to new source file\n  rebase: remove $branch as synonym for $orig_head\n  rebase -i: support --stat\n  rebase: factor out call to pre-rebase hook\n  rebase: factor out clean work tree check\n  rebase: factor out reference parsing\n  ...","Junio C Hamano"],["e00e8a5f7fc23e8c64cb75588207510e469affdc","a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","Merge branch 'mz/rebase' (early part) into jch\n\n* 'mz/rebase' (early part):\n  Makefile: do not install sourced rebase scripts","Junio C Hamano"],["0feeba4c42b5d04f610ada82b7779c73864f4a0d","a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","Merge branch 'en/merge-recursive' into jch\n\n* en/merge-recursive:\n  merge-recursive: tweak magic band-aid\n  merge-recursive: When we detect we can skip an update, actually skip it\n  t6022: New test checking for unnecessary updates of files in D/F conflicts\n  t6022: New test checking for unnecessary updates of renamed+modified files","Junio C Hamano"],["8c549b64c18191d32936aadbe59bbda993561f24","a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","Merge branch 'jl/submodule-fetch-on-demand' into jch\n\n* jl/submodule-fetch-on-demand:\n  fetch/pull: Describe --recurse-submodule restrictions in the BUGS section\n  submodule update: Don't fetch when the submodule commit is already present\n  fetch/pull: Don't recurse into a submodule when commits are already present\n  Submodules: Add 'on-demand' value for the 'fetchRecurseSubmodule' option\n  config: teach the fetch.recurseSubmodules option the 'on-demand' value\n  fetch/pull: Add the 'on-demand' value to the --recurse-submodules option\n  fetch/pull: recurse into submodules when necessary\n\nConflicts:\n\tsubmodule.c","Junio C Hamano"],["613187b9559e4cb8374f229b2f194ac8c1438d1d","a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","Merge branch 'ab/i18n-st' into jch\n\n* ab/i18n-st: (69 commits)\n  i18n: git-shortlog basic messages\n  i18n: git-revert split up \"could not revert/apply\" message\n  i18n: git-revert literal \"me\" messages\n  i18n: git-revert \"Your local changes\" message\n  i18n: git-revert basic messages\n  i18n: git-notes GIT_NOTES_REWRITE_MODE error message\n  i18n: git-notes basic commands\n  i18n: git-gc \"Auto packing the repository\" message\n  i18n: git-gc basic messages\n  i18n: git-describe basic messages\n  i18n: git-clean clean.requireForce messages\n  i18n: git-clean basic messages\n  i18n: git-bundle basic messages\n  i18n: git-archive basic messages\n  i18n: git-status \"renamed: \" message\n  i18n: git-status \"Initial commit\" message\n  i18n: git-status \"Changes to be committed\" message\n  i18n: git-status shortstatus messages\n  i18n: git-status \"nothing to commit\" messages\n  i18n: git-status basic messages\n  ...\n\nConflicts:\n\tbuiltin/branch.c\n\tbuiltin/checkout.c\n\tbuiltin/clone.c\n\tbuiltin/commit.c\n\tbuiltin/fetch.c\n\tbuiltin/grep.c\n\tbuiltin/merge.c\n\tbuiltin/push.c\n\tbuiltin/revert.c\n\tt/t3507-cherry-pick-conflict.sh\n\tt/t7607-merge-overwrite.sh","Junio C Hamano"],["b957c1cf3700509bbf991800108b343d44f4fcb9","a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","Merge branch 'sb/sparse-more' into jch\n\n* sb/sparse-more:\n  Makefile: Cover more files with make check","Junio C Hamano"],["88a75574036a152e850466355374a67e9e6a02ed","a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","Merge branch 'jc/add-u-migration' (early part) into pu\n\n* 'jc/add-u-migration' (early part):\n  add: make \"add -u/-A\" update full tree without pathspec\n\nConflicts:\n\tbuiltin/add.c","Junio C Hamano"],["f6b401df8bcc5174fcdc579749e7ae78b34c8818","a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","Merge branch 'mz/maint-rename-unmerged' into pu\n\n* mz/maint-rename-unmerged:\n  diffcore-rename: don't consider unmerged path as source","Junio C Hamano"],["9dcc27282cd9ce0d0efb94563c8e2374dd014518","a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","Merge branch 'nd/struct-pathspec' into pu\n\n* nd/struct-pathspec:\n  Improve tree_entry_interesting() handling code\n  Convert read_tree{,_recursive} to support struct pathspec\n  Reimplement read_tree_recursive() using tree_entry_interesting()","Junio C Hamano"],["bc65439feb00a93cebda185f5bfec6e70e90bc6b","a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","Merge branch 'jc/merge-sans-branch' into pu\n\n* jc/merge-sans-branch:\n  merge: merge with the default upstream branch without argument\n  merge: match the help text with the documentation\n\nConflicts:\n\tbuiltin/merge.c","Junio C Hamano"],["8e13aab12c0ca9d654d42adc582f238784d5b559","a6723cc3f76163bf7adb636a73ac3b0ceb3e6b9b@pobox.com","Merge branch 'jc/diff-irreversible-delete' into pu\n\n* jc/diff-irreversible-delete:\n  git diff -D: omit the preimage of deletes","Junio C Hamano"]],"repo":"sunny256/git","actor":"sunny256","ref":"refs/heads/pu","size":35,"head":"f22acd7ce955146a9222ad7b468f8836bc68795c","actor_gravatar":"8a221001f74d0e8f4dadee3c7d1996e4","push_id":27715034}