{"thread":{"id":"22090","subject":"What's cooking in git.git (Jan 2010, #01; Mon, 04)","startedAt":"2010-01-04T08:39:03Z","lastAt":"2010-01-09T21:02:09Z","messageCount":32,"participants":["Junio C Hamano","Matthieu Moy","Johannes Sixt","Jeff King","Tay Ray Chuan","Johan Herland","Ilari Liusvaara","Nanako Shiraishi","Johannes Schindelin","Avery Pennarun","Sverre Rabbelier","A Large Angry SCM"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"130756","messageId":"7vljgei7rs.fsf@alter.siamese.dyndns.org","threadId":"22090","inReplyTo":null,"subject":"What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-01-04T08:39:03Z","receivedAt":"2010-01-04T08:39:03Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Here are the topics that have been cooking.  Commits prefixed with '-' are\nonly in 'pu' while commits prefixed with '+' are in 'next'.  The ones\nmarked with '.' do not appear in any of the integration branches, but I am\nstill holding onto them.\n\nThe tip of 'next' has been rebuilt on top of the current 'master'.\n\n--------------------------------------------------\n[New Topics]\n\n* da/difftool (2009-12-22) 2 commits\n - git-difftool: Add '--gui' for selecting a GUI tool\n - t7800-difftool: Set a bogus tool for use by tests\n\n* jh/gitweb-cached (2010-01-03) 4 commits\n - gitweb: Makefile improvements\n - gitweb: Optionally add \"git\" links in project list page\n - gitweb: Add option to force version match\n - gitweb: Load checking\n\n* tc/test-locate-httpd (2010-01-02) 1 commit\n - t/lib-http.sh: Restructure finding of default httpd location\n\n* jc/fix-tree-walk (2009-09-14) 7 commits\n - read-tree --debug-unpack\n - unpack-trees.c: look ahead in the index\n - unpack-trees.c: prepare for looking ahead in the index\n - Aggressive three-way merge: fix D/F case\n - traverse_trees(): handle D/F conflict case sanely\n - more D/F conflict tests\n - tests: move convenience regexp to match object names to test-lib.sh\n\nResurrected from \"Ejected\" category.\n\n--------------------------------------------------\n[Cooking]\n\n* cc/reset-more (2010-01-04) 6 commits\n  (merged to 'next' on 2010-01-04 at 8802c2c)\n + Fix bit assignment for CE_CONFLICTED\n  (merged to 'next' on 2010-01-03 at f83d4c6)\n + \"reset --merge\": fix unmerged case\n + reset: use \"unpack_trees()\" directly instead of \"git read-tree\"\n + reset: add a few tests for \"git reset --merge\"\n + Documentation: reset: add some tables to describe the different options\n + reset: improve mixed reset error message when in a bare repo\n\n* bg/maint-remote-update-default (2009-12-31) 1 commit\n  (merged to 'next' on 2010-01-03 at 113009e)\n + Fix \"git remote update\" with remotes.defalt set\n\n* jc/branch-d (2009-12-29) 1 commit\n - branch -d: base the \"already-merged\" safety on the branch it merges with\n\n* jc/rerere (2009-12-04) 1 commit\n - Teach --[no-]rerere-autoupdate option to merge, revert and friends\n\n* jk/maint-1.6.5-reset-hard (2009-12-30) 1 commit\n  (merged to 'next' on 2010-01-02 at 190d63b)\n + reset: unbreak hard resets with GIT_WORK_TREE\n\n* jk/push-to-delete (2009-12-30) 1 commit\n  (merged to 'next' on 2010-01-03 at 9ee293b)\n + builtin-push: add --delete as syntactic sugar for :foo\n\n* jk/run-command-use-shell (2010-01-01) 8 commits\n - t4030, t4031: work around bogus MSYS bash path conversion\n - t0021: use $SHELL_PATH for the filter script\n - diff: run external diff helper with shell\n - textconv: use shell to run helper\n - editor: use run_command's shell feature\n - run-command: optimize out useless shell calls\n - run-command: convert simple callsites to use_shell\n - run-command: add \"use shell\" option\n\n* mm/config-path (2009-12-30) 1 commit\n  (merged to 'next' on 2010-01-03 at 9c0e81a)\n + builtin-config: add --path option doing ~ and ~user expansion.\n\n* pm/cvs-environ (2009-12-30) 1 commit\n  (merged to 'next' on 2010-01-03 at 4c22932)\n + CVS Server: Support reading base and roots from environment\n\n* rs/maint-archive-match-pathspec (2009-12-12) 1 commit\n  (merged to 'next' on 2010-01-03 at 92d7d15)\n + archive: complain about path specs that don't match anything\n\n* so/cvsserver-update (2009-12-07) 1 commit\n  (merged to 'next' on 2010-01-03 at 99959b6)\n + cvsserver: make the output of 'update' more compatible with cvs.\n\n* tc/clone-v-progress (2009-12-26) 4 commits\n - clone: use --progress to force progress reporting\n - clone: set transport->verbose when -v/--verbose is used\n - git-clone.txt: reword description of progress behaviour\n - check stderr with isatty() instead of stdout when deciding to show progress\n\n* tc/smart-http-restrict (2010-01-02) 4 commits\n - Smart-http tests: Test http-backend without curl or a webserver\n - Smart-http tests: Break test t5560-http-backend into pieces\n - Smart-http tests: Improve coverage in test t5560\n - Smart-http: check if repository is OK to export before serving it\n\n* tr/maint-1.6.5-bash-prompt-show-submodule-changes (2009-12-31) 1 commit\n  (merged to 'next' on 2010-01-03 at b785974)\n + bash completion: factor submodules into dirty state\n\n* jc/cache-unmerge (2009-12-25) 9 commits\n - rerere forget path: forget recorded resolution\n - rerere: refactor rerere logic to make it independent from I/O\n - rerere: remove silly 1024-byte line limit\n - resolve-undo: teach \"update-index --unresolve\" to use resolve-undo info\n - resolve-undo: \"checkout -m path\" uses resolve-undo information\n - resolve-undo: allow plumbing to clear the information\n - resolve-undo: basic tests\n - resolve-undo: record resolved conflicts in a new index extension section\n - builtin-merge.c: use standard active_cache macros\n\n* js/filter-branch-prime (2009-12-15) 1 commit\n  (merged to 'next' on 2010-01-03 at 7c90319)\n + filter-branch: remove an unnecessary use of 'git read-tree'\n\n* mg/tag-d-show (2009-12-10) 1 commit\n  (merged to 'next' on 2010-01-03 at 87657d2)\n + tag -d: print sha1 of deleted tag\n\n* sb/maint-octopus (2009-12-11) 3 commits\n  (merged to 'next' on 2010-01-03 at ffe77d6)\n + octopus: remove dead code\n + octopus: reenable fast-forward merges\n + octopus: make merge process simpler to follow\n\n* jh/commit-status (2009-12-07) 1 commit\n - [test?] Add commit.status, --status, and --no-status\n\n* jc/checkout-merge-base (2009-11-20) 2 commits\n  (merged to 'next' on 2010-01-02 at 6a8f6fc)\n + \"rebase --onto A...B\" replays history on the merge base between A and B\n + \"checkout A...B\" switches to the merge base between A and B\n\n* tr/http-push-ref-status (2009-12-24) 6 commits\n - transport-helper.c::push_refs(): emit \"no refs\" error message\n - transport-helper.c::push_refs(): ignore helper-reported status if ref is not to be pushed\n - transport.c::transport_push(): make ref status affect return value\n - refactor ref status logic for pushing\n - t5541-http-push.sh: add test for unmatched, non-fast-forwarded refs\n - t5541-http-push.sh: add tests for non-fast-forward pushes\n\n* bg/maint-add-all-doc (2009-12-07) 4 commits\n  (merged to 'next' on 2010-01-03 at b19a323)\n + squash! rm documentation--also mention add-u where we mention commit-a\n + git-rm doc: Describe how to sync index & work tree\n + git-add/rm doc: Consistently back-quote\n + Documentation: 'git add -A' can remove files\n\n* il/vcs-helper (2009-12-09) 8 commits\n - Remove special casing of http, https and ftp\n - Support remote archive from all smart transports\n - Support remote helpers implementing smart transports\n - Support taking over transports\n - Refactor git transport options parsing\n - Pass unknown protocols to external protocol handlers\n - Support mandatory capabilities\n - Add remote helper debug mode\n\n* mm/diag-path-in-treeish (2009-12-07) 1 commit\n - Detailed diagnosis when parsing an object name fails.\n\n* mh/rebase-fixup (2009-12-07) 2 commits\n - Add a command \"fixup\" to rebase --interactive\n - t3404: Use test_commit to set up test repository\n (this branch is used by ns/rebase-auto-squash.)\n\nInitial round of \"fixup\" action that is similar to \"squash\" action in\n\"rebase -i\" that excludes the commit log message from follow-up commits\nwhen composing the log message for the updated one.  Expected is a further\nimprovement to skip opening the editor if a pick is followed only by\n\"fixup\" and no \"squash\".\n\n* ns/rebase-auto-squash (2009-12-08) 2 commits\n - fixup! rebase -i --autosquash\n - rebase -i --autosquash: auto-squash commits\n (this branch uses mh/rebase-fixup.)\n\n* jh/notes (2009-12-07) 11 commits\n - Refactor notes concatenation into a flexible interface for combining notes\n - Notes API: Allow multiple concurrent notes trees with new struct notes_tree\n - Notes API: for_each_note(): Traverse the entire notes tree with a callback\n - Notes API: get_note(): Return the note annotating the given object\n - Notes API: add_note(): Add note objects to the internal notes tree structure\n - Notes API: init_notes(): Initialize the notes tree from the given notes ref\n - Notes API: get_commit_notes() -> format_note() + remove the commit restriction\n - Minor style fixes to notes.c\n  (merged to 'next' on 2010-01-02 at ae42130)\n + Add more testcases to test fast-import of notes\n + Rename t9301 to t9350, to make room for more fast-import tests\n + fast-import: Proper notes tree manipulation\n\n* fc/opt-quiet-gc-reset (2009-12-02) 1 commit\n - General --quiet improvements\n\n* mv/commit-date (2009-12-03) 2 commits\n  (merged to 'next' on 2010-01-03 at 1c45fdf)\n + Document date formats accepted by parse_date()\n + builtin-commit: add --date option\n\n* sr/gfi-options (2009-12-04) 7 commits\n - fast-import: add (non-)relative-marks feature\n - fast-import: allow for multiple --import-marks= arguments\n - fast-import: test the new option command\n - fast-import: add option command\n - fast-import: add feature command\n - fast-import: put marks reading in its own function\n - fast-import: put option parsing code in separate functions\n\n* ap/merge-backend-opts (2008-07-18) 6 commits\n - Document that merge strategies can now take their own options\n - Extend merge-subtree tests to test -Xsubtree=dir.\n - Make \"subtree\" part more orthogonal to the rest of merge-recursive.\n - Teach git-pull to pass -X<option> to git-merge\n - git merge -X<option>\n - git-merge-file --ours, --theirs\n\n\"git pull\" patch needs sq-then-eval fix to protect it from $IFS\nbut otherwise seemed good.\n\n* mo/bin-wrappers (2009-12-02) 3 commits\n  (merged to 'next' on 2010-01-03 at 8c5fa27)\n + INSTALL: document a simpler way to run uninstalled builds\n + run test suite without dashed git-commands in PATH\n + build dashless \"bin-wrappers\" directory similar to installed bindir\n\n* tr/http-updates (2009-12-28) 4 commits\n  (merged to 'next' on 2010-01-02 at cf25698)\n + Remove http.authAny\n + Allow curl to rewind the RPC read buffer\n + Add an option for using any HTTP authentication scheme, not only basic\n + http: maintain curl sessions\n\n* nd/sparse (2009-12-30) 23 commits\n  (merged to 'next' on 2010-01-02 at 5499bbe)\n + grep: do not do external grep on skip-worktree entries\n + commit: correctly respect skip-worktree bit\n + ie_match_stat(): do not ignore skip-worktree bit with CE_MATCH_IGNORE_VALID\n + tests: rename duplicate t1009\n + sparse checkout: inhibit empty worktree\n + Add tests for sparse checkout\n + read-tree: add --no-sparse-checkout to disable sparse checkout support\n + unpack-trees(): ignore worktree check outside checkout area\n + unpack_trees(): apply $GIT_DIR/info/sparse-checkout to the final index\n + unpack-trees(): \"enable\" sparse checkout and load $GIT_DIR/info/sparse-checkout\n + unpack-trees.c: generalize verify_* functions\n + unpack-trees(): add CE_WT_REMOVE to remove on worktree alone\n + Introduce \"sparse checkout\"\n + dir.c: export excluded_1() and add_excludes_from_file_1()\n + excluded_1(): support exclude files in index\n + unpack-trees(): carry skip-worktree bit over in merged_entry()\n + Read .gitignore from index if it is skip-worktree\n + Avoid writing to buffer in add_excludes_from_file_1()\n + Teach Git to respect skip-worktree bit (writing part)\n + Teach Git to respect skip-worktree bit (reading part)\n + Introduce \"skip-worktree\" bit in index, teach Git to get/set this bit\n + Add test-index-version\n + update-index: refactor mark_valid() in preparation for new options\n"},{"id":"130778","messageId":"vpqaawtyh99.fsf@bauges.imag.fr","threadId":"22090","inReplyTo":"7vljgei7rs.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Matthieu Moy","fromEmail":"matthieu.moy@grenoble-inp.fr","sentAt":"2010-01-04T16:19:46Z","receivedAt":"2010-01-04T16:19:46Z","isPatch":false,"sender":{"key":"matthieu.moy@grenoble-inp.fr","avatar":"https://gravatar.com/avatar/72c8a2705971a25dfaff23cece15130d405685845d911aedd5667ace277f3fc5?d=mp&s=160"},"body":"Hi,\n\nJunio C Hamano <gitster@pobox.com> writes:\n\n> * mm/diag-path-in-treeish (2009-12-07) 1 commit\n>  - Detailed diagnosis when parsing an object name fails.\n\nThis one has been there for quite some time and shouldn't be\ncontroversial. Do I need anything to push it into next?\n\nThanks,\n\n-- \nMatthieu Moy\nhttp://www-verimag.imag.fr/~moy/\n"},{"id":"130781","messageId":"4B421766.4040506@kdbg.org","threadId":"22090","inReplyTo":"7vljgei7rs.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2010-01-04T16:29:26Z","receivedAt":"2010-01-04T16:29:26Z","isPatch":false,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Junio C Hamano schrieb:\n> * jk/run-command-use-shell (2010-01-01) 8 commits\n>  - t4030, t4031: work around bogus MSYS bash path conversion\n>  - t0021: use $SHELL_PATH for the filter script\n>  - diff: run external diff helper with shell\n>  - textconv: use shell to run helper\n>  - editor: use run_command's shell feature\n>  - run-command: optimize out useless shell calls\n>  - run-command: convert simple callsites to use_shell\n>  - run-command: add \"use shell\" option\n\nTwo notes about this:\n\n1. My patch \"t0021:...\" contains an unrelated change to t4030 (it changes \na /bin/sh to $SHELL_PATH) that is not necessary. I included it in my first \nversion of the patch, but later noticed that we already have many similar \nuses of /bin/sh instead of $SHELL_PATH in test scriptlets and decided to \nremove the change, but I only changed the commit message and forgot to \nunstage t4030.\n\n2. If you intend to merge the early part of the topic to master early and \nhold \"diff:...\" and \"textconv:...\" in next a bit longer (as proposed by \nJeff), then you should move \"t0021:...\" after \"run-command: optimize out \nuseless shell calls\".\n\nThanks,\n-- Hannes\n"},{"id":"130790","messageId":"7v3a2lele4.fsf@alter.siamese.dyndns.org","threadId":"22090","inReplyTo":"vpqaawtyh99.fsf@bauges.imag.fr","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-01-04T19:10:43Z","receivedAt":"2010-01-04T19:10:43Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes:\n\n> Junio C Hamano <gitster@pobox.com> writes:\n>\n>> * mm/diag-path-in-treeish (2009-12-07) 1 commit\n>>  - Detailed diagnosis when parsing an object name fails.\n>\n> This one has been there for quite some time and shouldn't be\n> controversial. Do I need anything to push it into next?\n\nProdding like this ;-) \n\nI wanted to stagger and spread the merge into 'next' over a few rounds.\n\nThanks.\n"},{"id":"130802","messageId":"7vhbr1bagk.fsf@alter.siamese.dyndns.org","threadId":"22090","inReplyTo":"4B421766.4040506@kdbg.org","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-01-05T01:35:07Z","receivedAt":"2010-01-05T01:35:07Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Sixt <j6t@kdbg.org> writes:\n\n> Junio C Hamano schrieb:\n>> * jk/run-command-use-shell (2010-01-01) 8 commits\n>>  - t4030, t4031: work around bogus MSYS bash path conversion\n>>  - t0021: use $SHELL_PATH for the filter script\n>>  - diff: run external diff helper with shell\n>>  - textconv: use shell to run helper\n>>  - editor: use run_command's shell feature\n>>  - run-command: optimize out useless shell calls\n>>  - run-command: convert simple callsites to use_shell\n>>  - run-command: add \"use shell\" option\n>\n> Two notes about this:\n>\n> 1. My patch \"t0021:...\" contains an unrelated change to t4030 (it\n> changes a /bin/sh to $SHELL_PATH) that is not necessary. I included it\n> in my first version of the patch, but later noticed that we already\n> have many similar uses of /bin/sh instead of $SHELL_PATH in test\n> scriptlets and decided to remove the change, but I only changed the\n> commit message and forgot to unstage t4030.\n\nWhile you are technically correct that the change you made in t4030 is not\njustified by the commit log message in the sense that the \"hexdump\" script\nwill go through run_command() interface and is not subject to the special\nrules filter writers need to keep in mind, the patch text itself is a good\nchange, isn't it?  Do you want me to split the commit into two (one with\nthe current message with a patch only to t0021, and another to t4030 with\na justification like \"SHELL_PATH is what the user told us to use\")?\n\n> 2. If you intend to merge the early part of the topic to master early\n> and hold \"diff:...\" and \"textconv:...\" in next a bit longer (as\n> proposed by Jeff), then you should move \"t0021:...\" after\n> \"run-command: optimize out useless shell calls\".\n\nAs \"run-command: convert simple callsites to use_shell\" is the one that\nchanges the filter_buffer(), do you want to have t0021 patch before that\none, to prepare the test for the coming change?\n"},{"id":"130811","messageId":"20100105042046.GC12574@coredump.intra.peff.net","threadId":"22090","inReplyTo":"7vhbr1bagk.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2010-01-05T04:20:47Z","receivedAt":"2010-01-05T04:20:47Z","isPatch":false,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Mon, Jan 04, 2010 at 05:35:07PM -0800, Junio C Hamano wrote:\n\n> > 1. My patch \"t0021:...\" contains an unrelated change to t4030 (it\n> > changes a /bin/sh to $SHELL_PATH) that is not necessary. I included it\n> > in my first version of the patch, but later noticed that we already\n> > have many similar uses of /bin/sh instead of $SHELL_PATH in test\n> > scriptlets and decided to remove the change, but I only changed the\n> > commit message and forgot to unstage t4030.\n> \n> While you are technically correct that the change you made in t4030 is not\n> justified by the commit log message in the sense that the \"hexdump\" script\n> will go through run_command() interface and is not subject to the special\n> rules filter writers need to keep in mind, the patch text itself is a good\n> change, isn't it?  Do you want me to split the commit into two (one with\n> the current message with a patch only to t0021, and another to t4030 with\n> a justification like \"SHELL_PATH is what the user told us to use\")?\n\nIf we are going to do the t4030 change, there are a ton of other spots\nthat use /bin/sh directly (I counted 38 with\n\n  grep -n /bin/sh * | grep -v :1:\n\n). Should we be changing all of them?\n\nIt is slightly just code churn, because the scripts are so simple that\neven broken shells like Solaris /bin/sh run them just fine. The only\nreal advantage is that it slightly future-proofs them against somebody\nmaking them more complex.\n\n-Peff\n"},{"id":"130814","messageId":"7v4on186z9.fsf@alter.siamese.dyndns.org","threadId":"22090","inReplyTo":"20100105042046.GC12574@coredump.intra.peff.net","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-01-05T05:18:34Z","receivedAt":"2010-01-05T05:18:34Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jeff King <peff@peff.net> writes:\n\n> On Mon, Jan 04, 2010 at 05:35:07PM -0800, Junio C Hamano wrote:\n>\n>> > 1. My patch \"t0021:...\" contains an unrelated change to t4030 (it\n>> > changes a /bin/sh to $SHELL_PATH) that is not necessary. I included it\n>> > in my first version of the patch, but later noticed that we already\n>> > have many similar uses of /bin/sh instead of $SHELL_PATH in test\n>> > scriptlets and decided to remove the change, but I only changed the\n>> > commit message and forgot to unstage t4030.\n>> \n>> While you are technically correct that the change you made in t4030 is not\n>> justified by the commit log message in the sense that the \"hexdump\" script\n>> will go through run_command() interface and is not subject to the special\n>> rules filter writers need to keep in mind, the patch text itself is a good\n>> change, isn't it?  Do you want me to split the commit into two (one with\n>> the current message with a patch only to t0021, and another to t4030 with\n>> a justification like \"SHELL_PATH is what the user told us to use\")?\n>\n> If we are going to do the t4030 change, there are a ton of other spots\n> that use /bin/sh directly (I counted 38 with\n>\n>   grep -n /bin/sh * | grep -v :1:\n>\n> ). Should we be changing all of them?\n>\n> It is slightly just code churn, because the scripts are so simple that\n> even broken shells like Solaris /bin/sh run them just fine. The only\n> real advantage is that it slightly future-proofs them against somebody\n> making them more complex.\n\nOk, it is a single liner that invokes Perl, so hardcoded /bin/sh is a much\nlessor offence.\n"},{"id":"130818","messageId":"7vskal5c11.fsf@alter.siamese.dyndns.org","threadId":"22090","inReplyTo":"7vljgei7rs.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-01-05T05:57:46Z","receivedAt":"2010-01-05T05:57:46Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"I am tempted to merge the following to 'next' soonish; please complain and\nstop me before I do so in a few days if there are issues.\n\n * da/difftool (2009-12-22) 2 commits\n * jh/gitweb-cached (2010-01-03) 4 commits\n * tc/test-locate-httpd (2010-01-02) 1 commit\n * tc/smart-http-restrict (2010-01-02) 4 commits\n * jc/branch-d (2009-12-29) 1 commit\n   http://thread.gmane.org/gmane.comp.version-control.git/135837/focus=135863\n * mm/diag-path-in-treeish (2009-12-07) 1 commit\n * mh/rebase-fixup (2009-12-07) 2 commits\n * ns/rebase-auto-squash (2009-12-08) 2 commits\n * fc/opt-quiet-gc-reset (2009-12-02) 1 commit\n * tr/http-push-ref-status (2009-12-24) 6 commits\n   Daniel and Jeff commented on the earlier rounds; is everybody happy with\n   this v3?  If so let's move it to 'next'.  If not, please complain.\n * jh/notes (2009-12-07) 11 commits\n   I didn't see any negative comments after this round; is everybody happy\n   with this?  If so let's move it to 'next'.  If not, please complain.\n * sr/gfi-options (2009-12-04) 7 commits\n   I didn't see any negative comments after this round; is everybody happy\n   with this?  If so let's move it to 'next'.  If not, please complain.\n\n----------------------------------------------------------------\nI expect the following to be in 'master' by the end of next week.\n\n * bg/maint-remote-update-default (2009-12-31) 1 commit\n * jk/maint-1.6.5-reset-hard (2009-12-30) 1 commit\n * jk/push-to-delete (2009-12-30) 1 commit\n * mm/config-path (2009-12-30) 1 commit\n * pm/cvs-environ (2009-12-30) 1 commit\n * so/cvsserver-update (2009-12-07) 1 commit\n * tr/maint-1.6.5-bash-prompt-show-submodule-changes (2009-12-31) 1 commit\n * js/filter-branch-prime (2009-12-15) 1 commit\n * mg/tag-d-show (2009-12-10) 1 commit\n * sb/maint-octopus (2009-12-11) 3 commits\n * bg/maint-add-all-doc (2009-12-07) 4 commits\n * mv/commit-date (2009-12-03) 2 commits\n * mo/bin-wrappers (2009-12-02) 3 commits\n * tr/http-updates (2009-12-28) 4 commits\n * nd/sparse (2009-12-30) 23 commits\n\n----------------------------------------------------------------\n\nThese need a bit more work to go forward.  Help and follow-up are\nappreciated.\n\n * jc/fix-tree-walk (2009-09-14) 7 commits\n   Resurrected from \"Ejected\" category.  This is a fix to a tricky\n   codepath and testing and improving before it hits 'next' by brave souls\n   is greatly appreciated.  I am not very happy about the solution myself.\n\n * tc/clone-v-progress (2009-12-26) 4 commits\n   Perhaps needs an entry in the Release Notes, but otherwise looked Ok.\n\n * jh/commit-status (2009-12-07) 1 commit\n   Needs tests.\n\n * jc/checkout-merge-base (2009-11-20) 2 commits\n   Users of \"rebase -i\" might want to teach this to the command.\n   Volunteers?\n\n * il/vcs-helper (2009-12-09) 8 commits\n   According to http://thread.gmane.org/gmane.comp.version-control.git/134980\n   this is very close to completion (or did I overlook a reroll after that?)\n   but the final touch is not there yet.\n"},{"id":"130822","messageId":"20100105064013.GB19025@coredump.intra.peff.net","threadId":"22090","inReplyTo":"7vskal5c11.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2010-01-05T06:40:13Z","receivedAt":"2010-01-05T06:40:13Z","isPatch":false,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Mon, Jan 04, 2010 at 09:57:46PM -0800, Junio C Hamano wrote:\n\n>  * tr/http-push-ref-status (2009-12-24) 6 commits\n>    Daniel and Jeff commented on the earlier rounds; is everybody happy with\n>    this v3?  If so let's move it to 'next'.  If not, please complain.\n\nI just posted a few comments, but I suspect the response will just\ninvolve Tay explaining why I'm wrong or confused. :) So no serious\nobjections, but let's wait for this round of discussion.\n\n-Peff\n"},{"id":"130825","messageId":"be6fef0d1001042328i70aff96ctf39a02a52fc42bd5@mail.gmail.com","threadId":"22090","inReplyTo":"20100105064013.GB19025@coredump.intra.peff.net","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Tay Ray Chuan","fromEmail":"rctay89@gmail.com","sentAt":"2010-01-05T07:28:22Z","receivedAt":"2010-01-05T07:28:22Z","isPatch":false,"sender":{"key":"rctay89@gmail.com","avatar":"https://avatars.githubusercontent.com/u/61553?v=4"},"body":"Hi,\n\nOn Tue, Jan 5, 2010 at 2:40 PM, Jeff King <peff@peff.net> wrote:\n> On Mon, Jan 04, 2010 at 09:57:46PM -0800, Junio C Hamano wrote:\n>\n>>  * tr/http-push-ref-status (2009-12-24) 6 commits\n>>    Daniel and Jeff commented on the earlier rounds; is everybody happy with\n>>    this v3?  If so let's move it to 'next'.  If not, please complain.\n>\n> I just posted a few comments, but I suspect the response will just\n> involve Tay explaining why I'm wrong or confused. :) So no serious\n> objections, but let's wait for this round of discussion.\n\nthanks for taking the time to look at them; I'll be addressing your\nconcerns soon.\n\n-- \nCheers,\nRay Chuan\n"},{"id":"130829","messageId":"7viqbh2cgs.fsf_-_@alter.siamese.dyndns.org","threadId":"22090","inReplyTo":"7vskal5c11.fsf@alter.siamese.dyndns.org","subject":"[PATCH] Teach --[no-]rerere-autoupdate option to merge, revert and friends","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-01-05T08:16:35Z","receivedAt":"2010-01-05T08:16:35Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Introduce a command line option to override rerere.autoupdate configuration\nvariable to make it more useful.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n\n I've had this in my private tree for quite a while and just noticed that\n I haven't sent it out.  A convenince configuration option to allow a\n potentially dangerous mode of operation must always come with an explicit\n way to disable it when necessary.\n\n Documentation/git-merge.txt |    7 ++++++-\n builtin-commit.c            |    2 +-\n builtin-merge.c             |    4 +++-\n builtin-rerere.c            |   23 ++++++++++++++++-------\n builtin-revert.c            |    4 +++-\n git-am.sh                   |    6 +++++-\n git-rebase.sh               |    6 +++++-\n parse-options.c             |    7 +++++++\n parse-options.h             |    3 +++\n rerere.c                    |    8 +++++---\n rerere.h                    |   10 ++++++++--\n t/t4200-rerere.sh           |   15 +++++++++++++++\n 12 files changed, 77 insertions(+), 18 deletions(-)\n\ndiff --git a/Documentation/git-merge.txt b/Documentation/git-merge.txt\nindex e886c2e..6747031 100644\n--- a/Documentation/git-merge.txt\n+++ b/Documentation/git-merge.txt\n@@ -10,7 +10,7 @@ SYNOPSIS\n --------\n [verse]\n 'git merge' [-n] [--stat] [--no-commit] [--squash] [-s <strategy>]...\n-\t[-m <msg>] <remote>...\n+\t [--[no-]rerere-autoupdate] [-m <msg>] <remote>...\n 'git merge' <msg> HEAD <remote>...\n \n DESCRIPTION\n@@ -33,6 +33,11 @@ include::merge-options.txt[]\n \tused to give a good default for automated 'git merge'\n \tinvocations.\n \n+--rerere-autoupdate::\n+--no-rerere-autoupdate::\n+\tAllow the rerere mechanism to update the index with the\n+\tresult of auto-conflict resolution if possible.\n+\n <remote>...::\n \tOther branch heads to merge into our branch.  You need at\n \tleast one <remote>.  Specifying more than one <remote>\ndiff --git a/builtin-commit.c b/builtin-commit.c\nindex e93a647..72e0f0b 100644\n--- a/builtin-commit.c\n+++ b/builtin-commit.c\n@@ -1150,7 +1150,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)\n \t\t     \"new_index file. Check that disk is not full or quota is\\n\"\n \t\t     \"not exceeded, and then \\\"git reset HEAD\\\" to recover.\");\n \n-\trerere();\n+\trerere(0);\n \trun_hook(get_index_file(), \"post-commit\", NULL);\n \tif (!quiet)\n \t\tprint_summary(prefix, commit_sha1);\ndiff --git a/builtin-merge.c b/builtin-merge.c\nindex 56a1bb6..c3faa6b 100644\n--- a/builtin-merge.c\n+++ b/builtin-merge.c\n@@ -52,6 +52,7 @@ static struct strategy **use_strategies;\n static size_t use_strategies_nr, use_strategies_alloc;\n static const char *branch;\n static int verbosity;\n+static int allow_rerere_auto;\n \n static struct strategy all_strategy[] = {\n \t{ \"recursive\",  DEFAULT_TWOHEAD | NO_TRIVIAL },\n@@ -170,6 +171,7 @@ static struct option builtin_merge_options[] = {\n \t\t\"allow fast-forward (default)\"),\n \tOPT_BOOLEAN(0, \"ff-only\", &fast_forward_only,\n \t\t\"abort if fast-forward is not possible\"),\n+\tOPT_RERERE_AUTOUPDATE(&allow_rerere_auto),\n \tOPT_CALLBACK('s', \"strategy\", &use_strategies, \"strategy\",\n \t\t\"merge strategy to use\", option_parse_strategy),\n \tOPT_CALLBACK('m', \"message\", &merge_msg, \"message\",\n@@ -790,7 +792,7 @@ static int suggest_conflicts(void)\n \t\t}\n \t}\n \tfclose(fp);\n-\trerere();\n+\trerere(allow_rerere_auto);\n \tprintf(\"Automatic merge failed; \"\n \t\t\t\"fix conflicts and then commit the result.\\n\");\n \treturn 1;\ndiff --git a/builtin-rerere.c b/builtin-rerere.c\nindex 343d6cd..7ec602c 100644\n--- a/builtin-rerere.c\n+++ b/builtin-rerere.c\n@@ -101,15 +101,24 @@ static int diff_two(const char *file1, const char *label1,\n int cmd_rerere(int argc, const char **argv, const char *prefix)\n {\n \tstruct string_list merge_rr = { NULL, 0, 0, 1 };\n-\tint i, fd;\n-\n+\tint i, fd, flags = 0;\n+\n+\tif (2 < argc) {\n+\t\tif (!strcmp(argv[1], \"-h\"))\n+\t\t\tusage(git_rerere_usage);\n+\t\tif (!strcmp(argv[1], \"--rerere-autoupdate\"))\n+\t\t\tflags = RERERE_AUTOUPDATE;\n+\t\telse if (!strcmp(argv[1], \"--no-rerere-autoupdate\"))\n+\t\t\tflags = RERERE_NOAUTOUPDATE;\n+\t\tif (flags) {\n+\t\t\targc--;\n+\t\t\targv++;\n+\t\t}\n+\t}\n \tif (argc < 2)\n-\t\treturn rerere();\n-\n-\tif (!strcmp(argv[1], \"-h\"))\n-\t\tusage(git_rerere_usage);\n+\t\treturn rerere(flags);\n \n-\tfd = setup_rerere(&merge_rr);\n+\tfd = setup_rerere(&merge_rr, flags);\n \tif (fd < 0)\n \t\treturn 0;\n \ndiff --git a/builtin-revert.c b/builtin-revert.c\nindex 151aa6a..857ca2e 100644\n--- a/builtin-revert.c\n+++ b/builtin-revert.c\n@@ -38,6 +38,7 @@ static const char * const cherry_pick_usage[] = {\n static int edit, no_replay, no_commit, mainline, signoff;\n static enum { REVERT, CHERRY_PICK } action;\n static struct commit *commit;\n+static int allow_rerere_auto;\n \n static const char *me;\n \n@@ -57,6 +58,7 @@ static void parse_args(int argc, const char **argv)\n \t\tOPT_BOOLEAN('r', NULL, &noop, \"no-op (backward compatibility)\"),\n \t\tOPT_BOOLEAN('s', \"signoff\", &signoff, \"add Signed-off-by:\"),\n \t\tOPT_INTEGER('m', \"mainline\", &mainline, \"parent number\"),\n+\t\tOPT_RERERE_AUTOUPDATE(&allow_rerere_auto),\n \t\tOPT_END(),\n \t};\n \n@@ -395,7 +397,7 @@ static int revert_or_cherry_pick(int argc, const char **argv)\n \t\t\tdie (\"Error wrapping up %s\", defmsg);\n \t\tfprintf(stderr, \"Automatic %s failed.%s\\n\",\n \t\t\tme, help_msg(commit->object.sha1));\n-\t\trerere();\n+\t\trerere(allow_rerere_auto);\n \t\texit(1);\n \t}\n \tif (commit_lock_file(&msg_file) < 0)\ndiff --git a/git-am.sh b/git-am.sh\nindex 4838cdb..2f46fda 100755\n--- a/git-am.sh\n+++ b/git-am.sh\n@@ -30,6 +30,7 @@ skip            skip the current patch\n abort           restore the original branch and abort the patching operation.\n committer-date-is-author-date    lie about committer date\n ignore-date     use current timestamp for author date\n+rerere-autoupdate update the index with reused conflict resolution if possible\n rebasing*       (internal use for git-rebase)\"\n \n . git-sh-setup\n@@ -135,7 +136,7 @@ It does not apply to blobs recorded in its index.\"\n \t    export GIT_MERGE_VERBOSITY=0\n     fi\n     git-merge-recursive $orig_tree -- HEAD $his_tree || {\n-\t    git rerere\n+\t    git rerere $allow_rerere_autoupdate\n \t    echo Failed to merge in the changes.\n \t    exit 1\n     }\n@@ -293,6 +294,7 @@ resolvemsg= resume= scissors= no_inbody_headers=\n git_apply_opt=\n committer_date_is_author_date=\n ignore_date=\n+allow_rerere_autoupdate=\n \n while test $# != 0\n do\n@@ -340,6 +342,8 @@ do\n \t\tcommitter_date_is_author_date=t ;;\n \t--ignore-date)\n \t\tignore_date=t ;;\n+\t--rerere-autoupdate|--no-rerere-autoupdate)\n+\t\tallow_rerere_autoupdate=\"$1\" ;;\n \t-q|--quiet)\n \t\tGIT_QUIET=t ;;\n \t--)\ndiff --git a/git-rebase.sh b/git-rebase.sh\nindex b121f45..398ea73 100755\n--- a/git-rebase.sh\n+++ b/git-rebase.sh\n@@ -50,6 +50,7 @@ diffstat=$(git config --bool rebase.stat)\n git_am_opt=\n rebase_root=\n force_rebase=\n+allow_rerere_autoupdate=\n \n continue_merge () {\n \ttest -n \"$prev_head\" || die \"prev_head must be defined\"\n@@ -118,7 +119,7 @@ call_merge () {\n \t\treturn\n \t\t;;\n \t1)\n-\t\tgit rerere\n+\t\tgit rerere $allow_rerere_autoupdate\n \t\tdie \"$RESOLVEMSG\"\n \t\t;;\n \t2)\n@@ -349,6 +350,9 @@ do\n \t-f|--f|--fo|--for|--forc|force|--force-r|--force-re|--force-reb|--force-reba|--force-rebas|--force-rebase)\n \t\tforce_rebase=t\n \t\t;;\n+\t--rerere-autoupdate|--no-rerere-autoupdate)\n+\t\tallow_rerere_autoupdate=\"$1\"\n+\t\t;;\n \t-*)\n \t\tusage\n \t\t;;\ndiff --git a/parse-options.c b/parse-options.c\nindex f559411..10ec21f 100644\n--- a/parse-options.c\n+++ b/parse-options.c\n@@ -633,3 +633,10 @@ int parse_opt_with_commit(const struct option *opt, const char *arg, int unset)\n \tcommit_list_insert(commit, opt->value);\n \treturn 0;\n }\n+\n+int parse_opt_tertiary(const struct option *opt, const char *arg, int unset)\n+{\n+\tint *target = opt->value;\n+\t*target = unset ? 2 : 1;\n+\treturn 0;\n+}\ndiff --git a/parse-options.h b/parse-options.h\nindex f295a2c..91c1500 100644\n--- a/parse-options.h\n+++ b/parse-options.h\n@@ -123,6 +123,8 @@ struct option {\n \t\t\t\t      (h), PARSE_OPT_NOARG, NULL, (p) }\n #define OPT_INTEGER(s, l, v, h)     { OPTION_INTEGER, (s), (l), (v), \"n\", (h) }\n #define OPT_STRING(s, l, v, a, h)   { OPTION_STRING,  (s), (l), (v), (a), (h) }\n+#define OPT_UYN(s, l, v, h)         { OPTION_CALLBACK, (s), (l), (v), NULL, \\\n+\t\t\t\t      (h), PARSE_OPT_NOARG, &parse_opt_tertiary }\n #define OPT_DATE(s, l, v, h) \\\n \t{ OPTION_CALLBACK, (s), (l), (v), \"time\",(h), 0, \\\n \t  parse_opt_approxidate_cb }\n@@ -190,6 +192,7 @@ extern int parse_opt_abbrev_cb(const struct option *, const char *, int);\n extern int parse_opt_approxidate_cb(const struct option *, const char *, int);\n extern int parse_opt_verbosity_cb(const struct option *, const char *, int);\n extern int parse_opt_with_commit(const struct option *, const char *, int);\n+extern int parse_opt_tertiary(const struct option *, const char *, int);\n \n #define OPT__VERBOSE(var)  OPT_BOOLEAN('v', \"verbose\", (var), \"be verbose\")\n #define OPT__QUIET(var)    OPT_BOOLEAN('q', \"quiet\",   (var), \"be quiet\")\ndiff --git a/rerere.c b/rerere.c\nindex 29f95f6..e0ac5bc 100644\n--- a/rerere.c\n+++ b/rerere.c\n@@ -367,7 +367,7 @@ static int is_rerere_enabled(void)\n \treturn 1;\n }\n \n-int setup_rerere(struct string_list *merge_rr)\n+int setup_rerere(struct string_list *merge_rr, int flags)\n {\n \tint fd;\n \n@@ -375,6 +375,8 @@ int setup_rerere(struct string_list *merge_rr)\n \tif (!is_rerere_enabled())\n \t\treturn -1;\n \n+\tif (flags & (RERERE_AUTOUPDATE|RERERE_NOAUTOUPDATE))\n+\t\trerere_autoupdate = !!(flags & RERERE_AUTOUPDATE);\n \tmerge_rr_path = git_pathdup(\"MERGE_RR\");\n \tfd = hold_lock_file_for_update(&write_lock, merge_rr_path,\n \t\t\t\t       LOCK_DIE_ON_ERROR);\n@@ -382,12 +384,12 @@ int setup_rerere(struct string_list *merge_rr)\n \treturn fd;\n }\n \n-int rerere(void)\n+int rerere(int flags)\n {\n \tstruct string_list merge_rr = { NULL, 0, 0, 1 };\n \tint fd;\n \n-\tfd = setup_rerere(&merge_rr);\n+\tfd = setup_rerere(&merge_rr, flags);\n \tif (fd < 0)\n \t\treturn 0;\n \treturn do_plain_rerere(&merge_rr, fd);\ndiff --git a/rerere.h b/rerere.h\nindex 13313f3..10a94a4 100644\n--- a/rerere.h\n+++ b/rerere.h\n@@ -3,9 +3,15 @@\n \n #include \"string-list.h\"\n \n-extern int setup_rerere(struct string_list *);\n-extern int rerere(void);\n+#define RERERE_AUTOUPDATE   01\n+#define RERERE_NOAUTOUPDATE 02\n+\n+extern int setup_rerere(struct string_list *, int);\n+extern int rerere(int);\n extern const char *rerere_path(const char *hex, const char *file);\n extern int has_rerere_resolution(const char *hex);\n \n+#define OPT_RERERE_AUTOUPDATE(v) OPT_UYN(0, \"rerere-autoupdate\", (v), \\\n+\t\"update the index with reused conflict resolution if possible\")\n+\n #endif\ndiff --git a/t/t4200-rerere.sh b/t/t4200-rerere.sh\nindex a6bc028..bb402c3 100755\n--- a/t/t4200-rerere.sh\n+++ b/t/t4200-rerere.sh\n@@ -217,7 +217,22 @@ test_expect_success 'rerere.autoupdate' '\n \tgit checkout version2 &&\n \ttest_must_fail git merge fifth &&\n \ttest 0 = $(git ls-files -u | wc -l)\n+'\n \n+test_expect_success 'merge --rerere-autoupdate' '\n+\tgit config --unset rerere.autoupdate\n+\tgit reset --hard &&\n+\tgit checkout version2 &&\n+\ttest_must_fail git merge --rerere-autoupdate fifth &&\n+\ttest 0 = $(git ls-files -u | wc -l)\n+'\n+\n+test_expect_success 'merge --no-rerere-autoupdate' '\n+\tgit config rerere.autoupdate true\n+\tgit reset --hard &&\n+\tgit checkout version2 &&\n+\ttest_must_fail git merge --no-rerere-autoupdate fifth &&\n+\ttest 2 = $(git ls-files -u | wc -l)\n '\n \n test_done\n-- \n1.6.6.158.g8bda6.dirty\n"},{"id":"130836","messageId":"201001051231.43048.johan@herland.net","threadId":"22090","inReplyTo":"7vskal5c11.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Johan Herland","fromEmail":"johan@herland.net","sentAt":"2010-01-05T11:31:42Z","receivedAt":"2010-01-05T11:31:42Z","isPatch":false,"sender":{"key":"johan@herland.net","avatar":"https://avatars.githubusercontent.com/u/547031?v=4"},"body":"On Tuesday 05 January 2010, Junio C Hamano wrote:\n> I am tempted to merge the following to 'next' soonish; please\n> complain and stop me before I do so in a few days if there are\n> issues.\n>\n> * jh/notes (2009-12-07) 11 commits\n>    I didn't see any negative comments after this round; is everybody\n> happy with this?  If so let's move it to 'next'.  If not, please\n> complain.\n\nPlease hold until I send a new iteration of the series (which will be \nbased on what is currently in 'next'). The new iteration should be \nready in a few days.\n\n\nHave fun! :)\n\n...Johan\n\n-- \nJohan Herland, <johan@herland.net>\nwww.herland.net\n"},{"id":"130837","messageId":"20100105115620.GA27121@Knoppix","threadId":"22090","inReplyTo":"7vskal5c11.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Ilari Liusvaara","fromEmail":"ilari.liusvaara@elisanet.fi","sentAt":"2010-01-05T11:56:20Z","receivedAt":"2010-01-05T11:56:20Z","isPatch":false,"sender":{"key":"ilari.liusvaara@elisanet.fi","avatar":null},"body":"On Mon, Jan 04, 2010 at 09:57:46PM -0800, Junio C Hamano wrote:\n> \n>  * il/vcs-helper (2009-12-09) 8 commits\n>    According to http://thread.gmane.org/gmane.comp.version-control.git/134980\n>    this is very close to completion (or did I overlook a reroll after that?)\n>    but the final touch is not there yet.\n\nAFAICT, the only nits about that series in that thread were:\n\n- SoB ping-pong\n- Not using warning()\n\nAnd AFAICT both have been fixed in current pu. Or did I overlook some nit?\n\n\n-Ilari\n"},{"id":"130862","messageId":"4B43A5CA.7090104@kdbg.org","threadId":"22090","inReplyTo":"7vhbr1bagk.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2010-01-05T20:49:14Z","receivedAt":"2010-01-05T20:49:14Z","isPatch":false,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Junio C Hamano schrieb:\n> While you are technically correct that the change you made in t4030 is not\n> justified by the commit log message in the sense that the \"hexdump\" script\n> will go through run_command() interface and is not subject to the special\n> rules filter writers need to keep in mind, the patch text itself is a good\n> change, isn't it?\n\nThe patch text is good, but since it will not make a difference (and there \nare a ton of other places that use /bin/sh successfully), the change is \nnot warrented at this time, IMO.\n\n> As \"run-command: convert simple callsites to use_shell\" is the one that\n> changes the filter_buffer(), do you want to have t0021 patch before that\n> one, to prepare the test for the coming change?\n\nWell, the test will break on Windows only after \"run-command: optimize out \nuseless shell calls\", and I wrote the commit message accordingly. If you \nmove it before that one (and if you are picky) the commit message should \nbe changed as well.\n\n-- Hannes\n"},{"id":"130879","messageId":"7vpr5ooxgt.fsf@alter.siamese.dyndns.org","threadId":"22090","inReplyTo":"20100105115620.GA27121@Knoppix","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-01-06T01:04:18Z","receivedAt":"2010-01-06T01:04:18Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Ilari Liusvaara <ilari.liusvaara@elisanet.fi> writes:\n\n> - Not using warning()\n\nAh, I forgot about locally fixing that one up.  Sorry, and thanks.\n"},{"id":"130896","messageId":"7vzl4r7jyu.fsf@alter.siamese.dyndns.org","threadId":"22090","inReplyTo":"4B43A5CA.7090104@kdbg.org","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-01-06T07:47:53Z","receivedAt":"2010-01-06T07:47:53Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Sixt <j6t@kdbg.org> writes:\n\n> Junio C Hamano schrieb:\n>> While you are technically correct that the change you made in t4030 is not\n>> justified by the commit log message in the sense that the \"hexdump\" script\n>> will go through run_command() interface and is not subject to the special\n>> rules filter writers need to keep in mind, the patch text itself is a good\n>> change, isn't it?\n>\n> The patch text is good, but since it will not make a difference (and\n> there are a ton of other places that use /bin/sh successfully), the\n> change is not warrented at this time, IMO.\n\nYou are right (and Peff also corrected me).\n\n>> As \"run-command: convert simple callsites to use_shell\" is the one that\n>> changes the filter_buffer(), do you want to have t0021 patch before that\n>> one, to prepare the test for the coming change?\n>\n> Well, the test will break on Windows only after \"run-command: optimize\n> out useless shell calls\", and I wrote the commit message\n> accordingly. If you move it before that one (and if you are picky) the\n> commit message should be changed as well.\n\nYeah, I've reworded that one with a phrase \"futureproof\".\n\nRegarding your \"[PATCH 8/6] t4030, t4031\", I have two questions:\n\n    Recall that MSYS bash converts POSIX style absolute paths to Windows style\n    absolute paths. Unfortunately, it converts a program argument that begins\n    with a double-quote and otherwise looks like an absolute POSIX path, but\n    in doing so, it strips everything past the second double-quote[*]. This\n    case is triggered in the two test scripts. The work-around is to place the\n    Windows style path between the quotes to avoid the path conversion.\n\n(1) Does \"Windows style path\" here mean what $(pwd) returns as opposed to\n    what is in $PWD?\n\n(2) The patch reads like this:\n\n-\tgit config diff.foo.textconv \"\\\"$PWD\\\"\"/hexdump &&\n+\tgit config diff.foo.textconv \"\\\"$(pwd)\\\"\"/hexdump &&\n\n    Does \"strips everything past the second dq\" mean \"drops '/hexdump'\"?\n    If so, would this also work (I am not suggesting to change it, just\n    asking for information)?\n\n-\tgit config diff.foo.textconv \"\\\"$PWD\\\"\"/hexdump &&\n+\tgit config diff.foo.textconv \"\\\"$PWD/hexdump\\\"\" &&\n\n\nThanks.\n"},{"id":"130906","messageId":"4B445312.9090507@kdbg.org","threadId":"22090","inReplyTo":"7vzl4r7jyu.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2010-01-06T09:08:34Z","receivedAt":"2010-01-06T09:08:34Z","isPatch":false,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Junio C Hamano schrieb:\n> Regarding your \"[PATCH 8/6] t4030, t4031\", I have two questions:\n> \n>     Recall that MSYS bash converts POSIX style absolute paths to Windows style\n>     absolute paths. Unfortunately, it converts a program argument that begins\n>     with a double-quote and otherwise looks like an absolute POSIX path, but\n>     in doing so, it strips everything past the second double-quote[*]. This\n>     case is triggered in the two test scripts. The work-around is to place the\n>     Windows style path between the quotes to avoid the path conversion.\n> \n> (1) Does \"Windows style path\" here mean what $(pwd) returns as opposed to\n>     what is in $PWD?\n\nYes. $PWD is of the form /c/foo/bar; pwd is a function in test-lib.sh that \nensures it returns the form c:/foo/bar.\n\n> (2) The patch reads like this:\n> \n> -\tgit config diff.foo.textconv \"\\\"$PWD\\\"\"/hexdump &&\n> +\tgit config diff.foo.textconv \"\\\"$(pwd)\\\"\"/hexdump &&\n> \n>     Does \"strips everything past the second dq\" mean \"drops '/hexdump'\"?\n\nYes.\n\n>     If so, would this also work (I am not suggesting to change it, just\n>     asking for information)?\n> \n> -\tgit config diff.foo.textconv \"\\\"$PWD\\\"\"/hexdump &&\n> +\tgit config diff.foo.textconv \"\\\"$PWD/hexdump\\\"\" &&\n\nIt would work, too, but it would depend on very bogus behavior of the MSYS \nbash.\n\n-- Hannes\n"},{"id":"130911","messageId":"20100106191825.6117@nanako3.lavabit.com","threadId":"22090","inReplyTo":"7vskal5c11.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Nanako Shiraishi","fromEmail":"nanako3@lavabit.com","sentAt":"2010-01-06T10:18:25Z","receivedAt":"2010-01-06T10:18:25Z","isPatch":false,"sender":{"key":"nanako3@lavabit.com","avatar":"https://gravatar.com/avatar/3777b9e201c5883a62b1a6fdf7c53f2d712d1d80989146063ea861e33aad72a8?d=mp&s=160"},"body":"Quoting Junio C Hamano <gitster@pobox.com> writes:\n\n> These need a bit more work to go forward.  Help and follow-up are\n> appreciated.\n>\n>  * jc/checkout-merge-base (2009-11-20) 2 commits\n>    Users of \"rebase -i\" might want to teach this to the command.\n>    Volunteers?\n\nLet me try. I'll let others to contribute documentation updates.\n\n-- >8 --\nSubject: [PATCH] Fix rebase --onto A...B and teach the same to interactive rebase\n\nSigned-off-by: しらいし ななこ <nanako3@lavabit.com>\n---\n git-rebase--interactive.sh       |   21 +++++++++++-\n git-rebase.sh                    |    4 +-\n t/t3415-rebase-onto-threedots.sh |   68 ++++++++++++++++++++++++++++++++++++++\n 3 files changed, 90 insertions(+), 3 deletions(-)\n create mode 100755 t/t3415-rebase-onto-threedots.sh\n\ndiff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh\nindex 23ded48..d42cc4f 100755\n--- a/git-rebase--interactive.sh\n+++ b/git-rebase--interactive.sh\n@@ -482,6 +482,25 @@ get_saved_options () {\n \ttest -f \"$DOTEST\"/rebase-root && REBASE_ROOT=t\n }\n \n+LF='\n+'\n+parse_onto () {\n+\tif\texpr \"$1\" : '.*\\.\\.\\.' >/dev/null &&\n+\t\tleft=${1%...*} right=${1#*...} &&\n+\t\t: ${left:=HEAD} ${right:=HEAD} &&\n+\t\tonto=$(git merge-base \"$left\" \"$right\")\n+\tthen\n+\t\tcase \"$onto\" in\n+\t\t?*\"$LF\"?* | '')\n+\t\t\texit 1 ;;\n+\t\tesac\n+\t\techo \"$onto\"\n+\t\texit 0\n+\telse\n+\t\tgit rev-parse --verify \"$1^0\"\n+\tfi\n+}\n+\n while test $# != 0\n do\n \tcase \"$1\" in\n@@ -589,7 +608,7 @@ first and then run 'git rebase --continue' again.\"\n \t\t;;\n \t--onto)\n \t\tshift\n-\t\tONTO=$(git rev-parse --verify \"$1\") ||\n+\t\tONTO=$(parse_onto \"$1\") ||\n \t\t\tdie \"Does not point to a valid commit: $1\"\n \t\t;;\n \t--)\ndiff --git a/git-rebase.sh b/git-rebase.sh\nindex 6503113..43c62c0 100755\n--- a/git-rebase.sh\n+++ b/git-rebase.sh\n@@ -419,8 +419,8 @@ fi\n \n # Make sure the branch to rebase onto is valid.\n onto_name=${newbase-\"$upstream_name\"}\n-if\tleft=$(expr \"$onto_name\" : '\\(.*\\)\\.\\.\\.') &&\n-\tright=$(expr \"$onto_name\" : '\\.\\.\\.\\(.*\\)$') &&\n+if\texpr \"$onto_name\" : '.*\\.\\.\\.' >/dev/null &&\n+\tleft=${onto_name%...*} right=${onto_name#*...} &&\n \t: ${left:=HEAD} ${right:=HEAD} &&\n \tonto=$(git merge-base \"$left\" \"$right\")\n then\ndiff --git a/t/t3415-rebase-onto-threedots.sh b/t/t3415-rebase-onto-threedots.sh\nnew file mode 100755\nindex 0000000..c243243\n--- /dev/null\n+++ b/t/t3415-rebase-onto-threedots.sh\n@@ -0,0 +1,68 @@\n+#!/bin/sh\n+\n+test_description='git rebase --onto A...B'\n+\n+. ./test-lib.sh\n+. \"$TEST_DIRECTORY/lib-rebase.sh\"\n+\n+#           F---G                     G'\n+#          /          -->            /\n+# A---B---C---D---E         A---B---C---D---E\n+\n+test_expect_success setup '\n+\ttest_commit A &&\n+\ttest_commit B &&\n+\ttest_commit C &&\n+\tgit branch topic &&\n+\ttest_commit D &&\n+\ttest_commit E &&\n+\tgit checkout topic &&\n+\ttest_commit F &&\n+\ttest_commit G\n+'\n+\n+test_expect_success 'rebase --onto A...B' '\n+\tgit reset --hard &&\n+\tgit checkout topic &&\n+\tgit reset --hard G &&\n+\n+\tgit rebase --onto master...topic HEAD^ &&\n+\tgit rev-parse HEAD^ >actual &&\n+\tgit rev-parse C^0 >expect &&\n+\ttest_cmp expect actual\n+'\n+\n+test_expect_success 'rebase --onto A...' '\n+\tgit reset --hard &&\n+\tgit checkout topic &&\n+\tgit reset --hard G &&\n+\n+\tgit rebase --onto master... HEAD^ &&\n+\tgit rev-parse HEAD^ >actual &&\n+\tgit rev-parse C^0 >expect &&\n+\ttest_cmp expect actual\n+'\n+\n+test_expect_success 'rebase -i --onto A...B' '\n+\tgit reset --hard &&\n+\tgit checkout topic &&\n+\tgit reset --hard G &&\n+\tset_fake_editor &&\n+\tEXPECT_COUNT=1 git rebase -i --onto master...topic HEAD^ &&\n+\tgit rev-parse HEAD^ >actual &&\n+\tgit rev-parse C^0 >expect &&\n+\ttest_cmp expect actual\n+'\n+\n+test_expect_success 'rebase -i --onto A...' '\n+\tgit reset --hard &&\n+\tgit checkout topic &&\n+\tgit reset --hard G &&\n+\tset_fake_editor &&\n+\tEXPECT_COUNT=1 git rebase -i --onto master... HEAD^ &&\n+\tgit rev-parse HEAD^ >actual &&\n+\tgit rev-parse C^0 >expect &&\n+\ttest_cmp expect actual\n+'\n+\n+test_done\n-- \n1.6.6\n\n-- \nNanako Shiraishi\nhttp://ivory.ap.teacup.com/nanako3/\n"},{"id":"130913","messageId":"alpine.DEB.1.00.1001061219180.11013@intel-tinevez-2-302","threadId":"22090","inReplyTo":"20100106191825.6117@nanako3.lavabit.com","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2010-01-06T11:29:55Z","receivedAt":"2010-01-06T11:29:55Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Wed, 6 Jan 2010, Nanako Shiraishi wrote:\n\n> diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh\n> index 23ded48..d42cc4f 100755\n> --- a/git-rebase--interactive.sh\n> +++ b/git-rebase--interactive.sh\n> @@ -482,6 +482,25 @@ get_saved_options () {\n>  \ttest -f \"$DOTEST\"/rebase-root && REBASE_ROOT=t\n>  }\n>  \n> +LF='\n> +'\n> +parse_onto () {\n> +\tif\texpr \"$1\" : '.*\\.\\.\\.' >/dev/null &&\n> +\t\tleft=${1%...*} right=${1#*...} &&\n> +\t\t: ${left:=HEAD} ${right:=HEAD} &&\n> +\t\tonto=$(git merge-base \"$left\" \"$right\")\n> +\tthen\n> +\t\tcase \"$onto\" in\n> +\t\t?*\"$LF\"?* | '')\n> +\t\t\texit 1 ;;\n> +\t\tesac\n> +\t\techo \"$onto\"\n> +\t\texit 0\n> +\telse\n> +\t\tgit rev-parse --verify \"$1^0\"\n> +\tfi\n> +}\n\nIt might be easier to understand like this:\n\n\tcase \"$1\" in\n\t*...*)\n\t\tleft=${1%...*} &&\n\t\tright=${1#*...} &&\n\t\tonto=\"$(git merge-base \"${left:-HEAD}\" \"${right:-HEAD}\")\" &&\n\t\ttest ! -z \"$onto\" &&\n\t\techo \"$onto\"\n\t;;\n\t*)\n\t\tgit rev-parse --verify \"$1^0\"\n\t;;\n\tesac\n\nBesides, why do you change the \"$1\" to \"$1^0\"?\n\t\t\n> diff --git a/git-rebase.sh b/git-rebase.sh\n> index 6503113..43c62c0 100755\n> --- a/git-rebase.sh\n> +++ b/git-rebase.sh\n\nI would separate the patches.  rebase.sh and rebase--interactive.sh are \nfundamentally different.\n\nThanks,\nDscho\n"},{"id":"130926","messageId":"7vwrzvyxk9.fsf@alter.siamese.dyndns.org","threadId":"22090","inReplyTo":"4B445312.9090507@kdbg.org","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-01-06T17:04:22Z","receivedAt":"2010-01-06T17:04:22Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Sixt <j6t@kdbg.org> writes:\n\n> Junio C Hamano schrieb:\n>> (1) Does \"Windows style path\" here mean what $(pwd) returns as opposed to\n>>     what is in $PWD?\n>\n> Yes. $PWD is of the form /c/foo/bar; pwd is a function in test-lib.sh\n> that ensures it returns the form c:/foo/bar.\n>\n>> (2) The patch reads like this:\n>> ...\n>>     Does \"strips everything past the second dq\" mean \"drops '/hexdump'\"?\n> Yes.\n>\n>>     If so, would this also work (I am not suggesting to change it, just\n>> ...\n> It would work, too, but it would depend on very bogus behavior of the\n> MSYS bash.\n\nThanks.\n"},{"id":"130927","messageId":"7vocl7yxef.fsf@alter.siamese.dyndns.org","threadId":"22090","inReplyTo":"alpine.DEB.1.00.1001061219180.11013@intel-tinevez-2-302","subject":"Re: What's cooking in git.git (Jan 2010, #01; Mon, 04)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-01-06T17:07:52Z","receivedAt":"2010-01-06T17:07:52Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> It might be easier to understand like this:\n>\n> \tcase \"$1\" in\n> \t*...*)\n> \t\tleft=${1%...*} &&\n> \t\tright=${1#*...} &&\n> \t\tonto=\"$(git merge-base \"${left:-HEAD}\" \"${right:-HEAD}\")\" &&\n> \t\ttest ! -z \"$onto\" &&\n> \t\techo \"$onto\"\n> \t;;\n> \t*)\n> \t\tgit rev-parse --verify \"$1^0\"\n> \t;;\n> \tesac\n\nDouble-semicolons should be indented one level deeper.\n\nI think your version may be slightly better (avoids one \"expr\"), but it\nactually was much harder to read your cascade of && that implicitly exits\nwith non-zero status in the first case arm than the explicit exit status\ngiven by the original patch.\n\nAs far as I can tell, both versions inherit the same bug from me when the\nuser gave us A...B pair that has more than one merge bases.  I think you\nneed to give --all to merge-base and resurrect the \"did we get more than\none\" test from her patch.\n\n> Besides, why do you change the \"$1\" to \"$1^0\"?\n\nIsn't it a bugfix?\n\nEarlier code wouldn't have caught \"--onto $blob_id\" as an error, but this\nwill do so---I actually think it is a good change.\n\n>> diff --git a/git-rebase.sh b/git-rebase.sh\n>> index 6503113..43c62c0 100755\n>> --- a/git-rebase.sh\n>> +++ b/git-rebase.sh\n>\n> I would separate the patches.  rebase.sh and rebase--interactive.sh are \n> fundamentally different.\n\nI too think splitting into two patches would make sense in this case.  The\npatch to git-rebase.sh seems to be a bugfix in the left/right computation;\nI am kind of surprised that I haven't triggered it myself so far.\n\nThanks.\n"},{"id":"130989","messageId":"20100107200502.6117@nanako3.lavabit.com","threadId":"22090","inReplyTo":"7vocl7yxef.fsf@alter.siamese.dyndns.org","subject":"[PATCH (v2) 1/2] rebase: fix --onto A...B parsing and add tests","fromName":"Nanako Shiraishi","fromEmail":"nanako3@lavabit.com","sentAt":"2010-01-07T11:05:02Z","receivedAt":"2010-01-07T11:05:02Z","isPatch":true,"sender":{"key":"nanako3@lavabit.com","avatar":"https://gravatar.com/avatar/3777b9e201c5883a62b1a6fdf7c53f2d712d1d80989146063ea861e33aad72a8?d=mp&s=160"},"body":"The previous patch didn't parse \"rebase --onto A...B\" correctly when A\nisn't an empty string. It also tried to be careful to notice a case in\nwhich there are more than one merge bases, but forgot to give --all option\nto merge-base, making the test pointless.\n\nFix these problems and add a test script to verify. Improvements to the\nscript to parse A...B syntax was taken from review comments by Johannes\nSchindelin.\n\nSigned-off-by: しらいし ななこ <nanako3@lavabit.com>\n---\n git-rebase.sh                    |   33 ++++++++++-------\n t/t3415-rebase-onto-threedots.sh |   75 ++++++++++++++++++++++++++++++++++++++\n 2 files changed, 94 insertions(+), 14 deletions(-)\n create mode 100755 t/t3415-rebase-onto-threedots.sh\n\ndiff --git a/git-rebase.sh b/git-rebase.sh\nindex 6503113..9bd8974 100755\n--- a/git-rebase.sh\n+++ b/git-rebase.sh\n@@ -419,22 +419,27 @@ fi\n \n # Make sure the branch to rebase onto is valid.\n onto_name=${newbase-\"$upstream_name\"}\n-if\tleft=$(expr \"$onto_name\" : '\\(.*\\)\\.\\.\\.') &&\n-\tright=$(expr \"$onto_name\" : '\\.\\.\\.\\(.*\\)$') &&\n-\t: ${left:=HEAD} ${right:=HEAD} &&\n-\tonto=$(git merge-base \"$left\" \"$right\")\n-then\n-\tcase \"$onto\" in\n-\t?*\"$LF\"?*)\n-\t\tdie \"$onto_name: there are more than one merge bases\"\n-\t\t;;\n-\t'')\n+case \"$onto_name\" in\n+*...*)\n+\tif\tleft=${onto_name%...*} right=${onto_name#*...} &&\n+\t\tonto=$(git merge-base --all ${left:-HEAD} ${right:-HEAD})\n+\tthen\n+\t\tcase \"$onto\" in\n+\t\t?*\"$LF\"?*)\n+\t\t\tdie \"$onto_name: there are more than one merge bases\"\n+\t\t\t;;\n+\t\t'')\n+\t\t\tdie \"$onto_name: there is no merge base\"\n+\t\t\t;;\n+\t\tesac\n+\telse\n \t\tdie \"$onto_name: there is no merge base\"\n-\t\t;;\n-\tesac\n-else\n+\tfi\n+\t;;\n+*)\n \tonto=$(git rev-parse --verify \"${onto_name}^0\") || exit\n-fi\n+\t;;\n+esac\n \n # If a hook exists, give it a chance to interrupt\n run_pre_rebase_hook \"$upstream_arg\" \"$@\"\ndiff --git a/t/t3415-rebase-onto-threedots.sh b/t/t3415-rebase-onto-threedots.sh\nnew file mode 100755\nindex 0000000..da378c4\n--- /dev/null\n+++ b/t/t3415-rebase-onto-threedots.sh\n@@ -0,0 +1,75 @@\n+#!/bin/sh\n+\n+test_description='git rebase --onto A...B'\n+\n+. ./test-lib.sh\n+. \"$TEST_DIRECTORY/lib-rebase.sh\"\n+\n+# Rebase only the tip commit of \"topic\" on merge base between \"master\"\n+# and \"topic\".  Cannot do this for \"side\" with \"master\" because there\n+# is no single merge base.\n+#\n+#\n+#\t    F---G topic                             G'\n+#\t   /                                       /\n+# A---B---C---D---E master      -->       A---B---C---D---E\n+#      \\   \\ /\n+#\t\\   x\n+#\t \\ / \\ \n+#\t  H---I---J---K side\n+\n+test_expect_success setup '\n+\ttest_commit A &&\n+\ttest_commit B &&\n+\tgit branch side &&\n+\ttest_commit C &&\n+\tgit branch topic &&\n+\tgit checkout side &&\n+\ttest_commit H &&\n+\tgit checkout master &&\n+\ttest_tick &&\n+\tgit merge H &&\n+\tgit tag D &&\n+\ttest_commit E &&\n+\tgit checkout topic &&\n+\ttest_commit F &&\n+\ttest_commit G &&\n+\tgit checkout side &&\n+\ttest_tick &&\n+\tgit merge C &&\n+\tgit tag I &&\n+\ttest_commit J &&\n+\ttest_commit K\n+'\n+\n+test_expect_success 'rebase --onto master...topic' '\n+\tgit reset --hard &&\n+\tgit checkout topic &&\n+\tgit reset --hard G &&\n+\n+\tgit rebase --onto master...topic F &&\n+\tgit rev-parse HEAD^1 >actual &&\n+\tgit rev-parse C^0 >expect &&\n+\ttest_cmp expect actual\n+'\n+\n+test_expect_success 'rebase --onto master...' '\n+\tgit reset --hard &&\n+\tgit checkout topic &&\n+\tgit reset --hard G &&\n+\n+\tgit rebase --onto master... F &&\n+\tgit rev-parse HEAD^1 >actual &&\n+\tgit rev-parse C^0 >expect &&\n+\ttest_cmp expect actual\n+'\n+\n+test_expect_success 'rebase --onto master...side' '\n+\tgit reset --hard &&\n+\tgit checkout side &&\n+\tgit reset --hard K &&\n+\n+\ttest_must_fail git rebase --onto master...side J\n+'\n+\n+test_done\n-- \n1.6.6.53.g75f61\n\n\n\n\n-- \nNanako Shiraishi\nhttp://ivory.ap.teacup.com/nanako3/\n"},{"id":"130991","messageId":"20100107200509.6117@nanako3.lavabit.com","threadId":"22090","inReplyTo":"7vocl7yxef.fsf@alter.siamese.dyndns.org","subject":"[PATCH (v2) 2/2] rebase -i: teach --onto A...B syntax","fromName":"Nanako Shiraishi","fromEmail":"nanako3@lavabit.com","sentAt":"2010-01-07T11:05:09Z","receivedAt":"2010-01-07T11:05:09Z","isPatch":true,"sender":{"key":"nanako3@lavabit.com","avatar":"https://gravatar.com/avatar/3777b9e201c5883a62b1a6fdf7c53f2d712d1d80989146063ea861e33aad72a8?d=mp&s=160"},"body":"When rewriting commits on a topic branch, sometimes it is easier to\ncompare the version of commits before and after the rewrite if they are\nbased on the same commit that forked from the upstream. An earlier commit\nby Junio (fixed up by the previous commit) gives \"--onto A...B\" syntax to\nrebase command, and rebases on top of the merge base between A and B;\nteach the same to the interactive version, too.\n\nSigned-off-by: しらいし ななこ <nanako3@lavabit.com>\n---\n git-rebase--interactive.sh       |   21 ++++++++++++++++++++-\n t/t3415-rebase-onto-threedots.sh |   30 ++++++++++++++++++++++++++++++\n 2 files changed, 50 insertions(+), 1 deletions(-)\n\ndiff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh\nindex 23ded48..f7ae02c 100755\n--- a/git-rebase--interactive.sh\n+++ b/git-rebase--interactive.sh\n@@ -482,6 +482,25 @@ get_saved_options () {\n \ttest -f \"$DOTEST\"/rebase-root && REBASE_ROOT=t\n }\n \n+LF='\n+'\n+parse_onto () {\n+\tcase \"$1\" in\n+\t*...*)\n+\t\tif\tleft=${1%...*} right=${1#*...} &&\n+\t\t\tonto=$(git merge-base --all ${left:-HEAD} ${right:-HEAD})\n+\t\tthen\n+\t\t\tcase \"$onto\" in\n+\t\t\t?*\"$LF\"?* | '')\n+\t\t\t\texit 1 ;;\n+\t\t\tesac\n+\t\t\techo \"$onto\"\n+\t\t\texit 0\n+\t\tfi\n+\tesac\n+\tgit rev-parse --verify \"$1^0\"\n+}\n+\n while test $# != 0\n do\n \tcase \"$1\" in\n@@ -589,7 +608,7 @@ first and then run 'git rebase --continue' again.\"\n \t\t;;\n \t--onto)\n \t\tshift\n-\t\tONTO=$(git rev-parse --verify \"$1\") ||\n+\t\tONTO=$(parse_onto \"$1\") ||\n \t\t\tdie \"Does not point to a valid commit: $1\"\n \t\t;;\n \t--)\ndiff --git a/t/t3415-rebase-onto-threedots.sh b/t/t3415-rebase-onto-threedots.sh\nindex da378c4..5e7eb88 100755\n--- a/t/t3415-rebase-onto-threedots.sh\n+++ b/t/t3415-rebase-onto-threedots.sh\n@@ -72,4 +72,34 @@ test_expect_success 'rebase --onto master...side' '\n \ttest_must_fail git rebase --onto master...side J\n '\n \n+test_expect_success 'rebase -i --onto master...topic' '\n+\tgit reset --hard &&\n+\tgit checkout topic &&\n+\tgit reset --hard G &&\n+\tset_fake_editor &&\n+\tEXPECT_COUNT=1 git rebase -i --onto master...topic F &&\n+\tgit rev-parse HEAD^1 >actual &&\n+\tgit rev-parse C^0 >expect &&\n+\ttest_cmp expect actual\n+'\n+\n+test_expect_success 'rebase -i --onto master...' '\n+\tgit reset --hard &&\n+\tgit checkout topic &&\n+\tgit reset --hard G &&\n+\tset_fake_editor &&\n+\tEXPECT_COUNT=1 git rebase -i --onto master... F &&\n+\tgit rev-parse HEAD^1 >actual &&\n+\tgit rev-parse C^0 >expect &&\n+\ttest_cmp expect actual\n+'\n+\n+test_expect_success 'rebase -i --onto master...side' '\n+\tgit reset --hard &&\n+\tgit checkout side &&\n+\tgit reset --hard K &&\n+\n+\ttest_must_fail git rebase -i --onto master...side J\n+'\n+\n test_done\n-- \n1.6.6.53.g75f61\n\n\n\n\n-- \nNanako Shiraishi\nhttp://ivory.ap.teacup.com/nanako3/\n"},{"id":"131035","messageId":"7vtyux3bx1.fsf@alter.siamese.dyndns.org","threadId":"22090","inReplyTo":"20100107200509.6117@nanako3.lavabit.com","subject":"Re: [PATCH (v2) 2/2] rebase -i: teach --onto A...B syntax","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-01-07T20:19:54Z","receivedAt":"2010-01-07T20:19:54Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Nanako Shiraishi <nanako3@lavabit.com> writes:\n\n> When rewriting commits on a topic branch, sometimes it is easier to\n> compare the version of commits before and after the rewrite if they are\n> based on the same commit that forked from the upstream. An earlier commit\n> by Junio (fixed up by the previous commit) gives \"--onto A...B\" syntax to\n> rebase command, and rebases on top of the merge base between A and B;\n> teach the same to the interactive version, too.\n>\n> Signed-off-by: しらいし ななこ <nanako3@lavabit.com>\n> ---\n>  git-rebase--interactive.sh       |   21 ++++++++++++++++++++-\n>  t/t3415-rebase-onto-threedots.sh |   30 ++++++++++++++++++++++++++++++\n>  2 files changed, 50 insertions(+), 1 deletions(-)\n>\n> diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh\n> index 23ded48..f7ae02c 100755\n> --- a/git-rebase--interactive.sh\n> +++ b/git-rebase--interactive.sh\n> @@ -482,6 +482,25 @@ get_saved_options () {\n>  \ttest -f \"$DOTEST\"/rebase-root && REBASE_ROOT=t\n>  }\n>  \n> +LF='\n> +'\n> +parse_onto () {\n> +\tcase \"$1\" in\n> +\t*...*)\n> +\t\tif\tleft=${1%...*} right=${1#*...} &&\n> +\t\t\tonto=$(git merge-base --all ${left:-HEAD} ${right:-HEAD})\n> +\t\tthen\n> +\t\t\tcase \"$onto\" in\n> +\t\t\t?*\"$LF\"?* | '')\n> +\t\t\t\texit 1 ;;\n> +\t\t\tesac\n> +\t\t\techo \"$onto\"\n> +\t\t\texit 0\n> +\t\tfi\n> +\tesac\n> +\tgit rev-parse --verify \"$1^0\"\n> +}\n> +\n>  while test $# != 0\n>  do\n>  \tcase \"$1\" in\n\nI am a bit unhappy about the duplication.  The text of this function is\ndifferent from the one in \"rebase\" proper, but they implement essentially\nthe same logic.  I was tempted to suggest having a common helper function,\nbut as Dscho mentioned \"rebase -i\" implementation does not share much with\n\"rebase\" (even though it shares the external command line interface from\nthe end user's point of view), and I don't see a readily available place\n(other than in git-sh-setup) to do so.\n\nIdeas?\n"},{"id":"131038","messageId":"201001072210.55727.j6t@kdbg.org","threadId":"22090","inReplyTo":"7vtyux3bx1.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH (v2) 2/2] rebase -i: teach --onto A...B syntax","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2010-01-07T21:10:55Z","receivedAt":"2010-01-07T21:10:55Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"On Donnerstag, 7. Januar 2010, Junio C Hamano wrote:\n> I was tempted to suggest having a common helper function, \n> but as Dscho mentioned \"rebase -i\" implementation does not share much with\n> \"rebase\" (even though it shares the external command line interface from\n> the end user's point of view), and I don't see a readily available place\n> (other than in git-sh-setup) to do so.\n>\n> Ideas?\n\n1. Split git-rebase--merge.sh and git-rebase--am.sh backends off of \ngit-rebase.sh. Have git-rebase.sh dispatch to \ngit-rebase--{am,merge,interactive}.sh as appropriate.\n\n2. Unify command line parsing from git-rebase--*.sh in git-rebase.sh. The \ngit-rebase--*.sh can now simply refer to shell variables that were set by \ncommand line switches (the backends must be invoked using the . (dot) \ncommand).\n\n3. Place common functionality like the one above in git-rebase.sh.\n\n-- Hannes\n"},{"id":"131120","messageId":"32541b131001081216p27d7e29bu269755db895128@mail.gmail.com","threadId":"22090","inReplyTo":"7vtyux3bx1.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH (v2) 2/2] rebase -i: teach --onto A...B syntax","fromName":"Avery Pennarun","fromEmail":"apenwarr@gmail.com","sentAt":"2010-01-08T20:16:37Z","receivedAt":"2010-01-08T20:16:37Z","isPatch":true,"sender":{"key":"apenwarr@gmail.com","avatar":"https://avatars.githubusercontent.com/u/20592?v=4"},"body":"2010/1/7 Junio C Hamano <gitster@pobox.com>:\n> I am a bit unhappy about the duplication.  The text of this function is\n> different from the one in \"rebase\" proper, but they implement essentially\n> the same logic.  I was tempted to suggest having a common helper function,\n> but as Dscho mentioned \"rebase -i\" implementation does not share much with\n> \"rebase\" (even though it shares the external command line interface from\n> the end user's point of view), and I don't see a readily available place\n> (other than in git-sh-setup) to do so.\n\nIs there a reason that non-interactive rebase can't just be\nimplemented as \"git rebase -i\" but without actually launching an\neditor to edit the commit list?\n\nThis would resolve any other inconsistencies between the two as well,\nnotably that non-interactive rebase sometimes refuses to do the rebase\nI requested because \"Current branch master is up to date,\" while\ninteractive rebase is willing to do it.  (Personally I prefer the\nlatter behaviour, since I don't like tools that think they're smarter\nthan me :))\n\nAvery\n"},{"id":"131121","messageId":"fabb9a1e1001081222q7122872bu72cea4e393f272ac@mail.gmail.com","threadId":"22090","inReplyTo":"32541b131001081216p27d7e29bu269755db895128@mail.gmail.com","subject":"Re: [PATCH (v2) 2/2] rebase -i: teach --onto A...B syntax","fromName":"Sverre Rabbelier","fromEmail":"srabbelier@gmail.com","sentAt":"2010-01-08T20:22:29Z","receivedAt":"2010-01-08T20:22:29Z","isPatch":true,"sender":{"key":"srabbelier@gmail.com","avatar":"https://avatars.githubusercontent.com/u/3098?v=4"},"body":"Heya,\n\nOn Fri, Jan 8, 2010 at 15:16, Avery Pennarun <apenwarr@gmail.com> wrote:\n> This would resolve any other inconsistencies between the two as well,\n> notably that non-interactive rebase sometimes refuses to do the rebase\n> I requested because \"Current branch master is up to date,\" while\n> interactive rebase is willing to do it.  (Personally I prefer the\n> latter behaviour, since I don't like tools that think they're smarter\n> than me :))\n\nI taught rebase the -f|--force-rebase flag a little while back, you\ncould use that :).\n\n-- \nCheers,\n\nSverre Rabbelier\n"},{"id":"131124","messageId":"32541b131001081231x1b6ac8c1k30084e4abf8cc896@mail.gmail.com","threadId":"22090","inReplyTo":"fabb9a1e1001081222q7122872bu72cea4e393f272ac@mail.gmail.com","subject":"Re: [PATCH (v2) 2/2] rebase -i: teach --onto A...B syntax","fromName":"Avery Pennarun","fromEmail":"apenwarr@gmail.com","sentAt":"2010-01-08T20:31:41Z","receivedAt":"2010-01-08T20:31:41Z","isPatch":true,"sender":{"key":"apenwarr@gmail.com","avatar":"https://avatars.githubusercontent.com/u/20592?v=4"},"body":"On Fri, Jan 8, 2010 at 3:22 PM, Sverre Rabbelier <srabbelier@gmail.com> wrote:\n> On Fri, Jan 8, 2010 at 15:16, Avery Pennarun <apenwarr@gmail.com> wrote:\n>> This would resolve any other inconsistencies between the two as well,\n>> notably that non-interactive rebase sometimes refuses to do the rebase\n>> I requested because \"Current branch master is up to date,\" while\n>> interactive rebase is willing to do it.  (Personally I prefer the\n>> latter behaviour, since I don't like tools that think they're smarter\n>> than me :))\n>\n> I taught rebase the -f|--force-rebase flag a little while back, you\n> could use that :).\n\nThanks, I didn't know about that one.  But my general point is still:\nwe seem to have two implementations when the functionality of one is\nactually a superset of the other.  As far as I can see, anyway.  So\nthe obvious way to reduce the duplicated code is to simply eliminate\nthe less-featureful implementation.\n\nAvery\n"},{"id":"131127","messageId":"fabb9a1e1001081237n11fa61b5m63fa46fac2ad8d4a@mail.gmail.com","threadId":"22090","inReplyTo":"32541b131001081231x1b6ac8c1k30084e4abf8cc896@mail.gmail.com","subject":"Re: [PATCH (v2) 2/2] rebase -i: teach --onto A...B syntax","fromName":"Sverre Rabbelier","fromEmail":"srabbelier@gmail.com","sentAt":"2010-01-08T20:37:44Z","receivedAt":"2010-01-08T20:37:44Z","isPatch":true,"sender":{"key":"srabbelier@gmail.com","avatar":"https://avatars.githubusercontent.com/u/3098?v=4"},"body":"Heya,\n\nOn Fri, Jan 8, 2010 at 15:31, Avery Pennarun <apenwarr@gmail.com> wrote:\n> Thanks, I didn't know about that one.  But my general point is still:\n> we seem to have two implementations when the functionality of one is\n> actually a superset of the other.  As far as I can see, anyway.  So\n> the obvious way to reduce the duplicated code is to simply eliminate\n> the less-featureful implementation.\n\n*cough* git sequencer *cough*\n\n-- \nCheers,\n\nSverre Rabbelier\n"},{"id":"131146","messageId":"4B47BE13.7070509@gmail.com","threadId":"22090","inReplyTo":"fabb9a1e1001081237n11fa61b5m63fa46fac2ad8d4a@mail.gmail.com","subject":"Re: [PATCH (v2) 2/2] rebase -i: teach --onto A...B syntax","fromName":"A Large Angry SCM","fromEmail":"gitzilla@gmail.com","sentAt":"2010-01-08T23:21:55Z","receivedAt":"2010-01-08T23:21:55Z","isPatch":true,"sender":{"key":"gitzilla@gmail.com","avatar":"https://gravatar.com/avatar/354625c442439908ff3dd99757dee330e29e9df7847472384faf7a00add247fb?d=mp&s=160"},"body":"Sverre Rabbelier wrote:\n> Heya,\n> \n> On Fri, Jan 8, 2010 at 15:31, Avery Pennarun <apenwarr@gmail.com> wrote:\n>> Thanks, I didn't know about that one.  But my general point is still:\n>> we seem to have two implementations when the functionality of one is\n>> actually a superset of the other.  As far as I can see, anyway.  So\n>> the obvious way to reduce the duplicated code is to simply eliminate\n>> the less-featureful implementation.\n> \n> *cough* git sequencer *cough*\n> \n\n*cough* not in my ${PATH} *cough*\n"},{"id":"131159","messageId":"alpine.DEB.1.00.1001090235520.4985@pacific.mpi-cbg.de","threadId":"22090","inReplyTo":"4B47BE13.7070509@gmail.com","subject":"Re: [PATCH (v2) 2/2] rebase -i: teach --onto A...B syntax","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2010-01-09T01:36:19Z","receivedAt":"2010-01-09T01:36:19Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 8 Jan 2010, A Large Angry SCM wrote:\n\n> Sverre Rabbelier wrote:\n> > \n> > On Fri, Jan 8, 2010 at 15:31, Avery Pennarun <apenwarr@gmail.com> \n> > wrote:\n> > > Thanks, I didn't know about that one.  But my general point is \n> > > still: we seem to have two implementations when the functionality of \n> > > one is actually a superset of the other.  As far as I can see, \n> > > anyway.  So the obvious way to reduce the duplicated code is to \n> > > simply eliminate the less-featureful implementation.\n> > \n> > *cough* git sequencer *cough*\n> \n> *cough* not in my ${PATH} *cough*\n\n*cough* because that GSoC project failed in all but writing? *cough*\n"},{"id":"131190","messageId":"32541b131001091302t8d890d8ped85d6bd07f6cd66@mail.gmail.com","threadId":"22090","inReplyTo":"alpine.DEB.1.00.1001090235520.4985@pacific.mpi-cbg.de","subject":"Re: [PATCH (v2) 2/2] rebase -i: teach --onto A...B syntax","fromName":"Avery Pennarun","fromEmail":"apenwarr@gmail.com","sentAt":"2010-01-09T21:02:09Z","receivedAt":"2010-01-09T21:02:09Z","isPatch":true,"sender":{"key":"apenwarr@gmail.com","avatar":"https://avatars.githubusercontent.com/u/20592?v=4"},"body":"On Fri, Jan 8, 2010 at 8:36 PM, Johannes Schindelin\n<Johannes.Schindelin@gmx.de> wrote:\n> On Fri, 8 Jan 2010, A Large Angry SCM wrote:\n>> Sverre Rabbelier wrote:\n>> > *cough* git sequencer *cough*\n>>\n>> *cough* not in my ${PATH} *cough*\n>\n> *cough* because that GSoC project failed in all but writing? *cough*\n\nIs there a summary of the results somewhere?  I can find a lot of\ndiscussions of git-sequencer, but not what went right/wrong or if it\nturned out to be a good/bad idea.\n\nAvery\n"}]}