{"thread":{"id":"27670","subject":"[RFC PATCH] revert: Introduce skip-all to cleanup sequencer data","startedAt":"2011-06-21T06:07:38Z","lastAt":"2011-06-21T06:48:49Z","messageCount":2,"participants":["Ramkumar Ramachandra","Christian Couder"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"170352","messageId":"1308636458-19668-1-git-send-email-artagnon@gmail.com","threadId":"27670","inReplyTo":null,"subject":"[RFC PATCH] revert: Introduce skip-all to cleanup sequencer data","fromName":"Ramkumar Ramachandra","fromEmail":"artagnon@gmail.com","sentAt":"2011-06-21T06:07:38Z","receivedAt":"2011-06-21T06:07:38Z","isPatch":true,"sender":{"key":"r@artagnon.com","avatar":"https://avatars.githubusercontent.com/u/37226?v=4"},"body":"When the sequencer data is persisted after a failed cherry-pick, don't\nallow subsequent calls to cherry-pick to clobber this state: instead,\nerror out with the complaint that an existing cherry-pick is in\nprogress.  To fix existing tests and the \"rebase -i\" script, introduce\na new \"--skip-all\" command-line option to call after every failed\ncherry-pick; it essentially clears out the sequencer data, thereby\nallowing subsequent calls.\n\nHelped-by: Jonathan Nieder <jrnieder@gmail.com>\nSigned-off-by: Ramkumar Ramachandra <artagnon@gmail.com>\n---\n Now there's a huge problem with this -- it breaks the muscle memory\n that has been formed over many years of Git usage.  One plausible\n solution suggested by Jonathan is to make \"reset --hard\" move the\n .git/sequencer directory to .git/sequncer-cancelled and print a small\n hint about this.  I see no other way out, so I'm personally okay with\n it; the question now is- will that suffice, or will we need to do\n more than that?\n\n Thanks to Dimity and Jonathan for suggesting the \"--skip-all\" name.\n Although I'm personally not too happy with it, I'll let it stick\n until someone comes up with a better alternative.  I was thinking\n more along the lines of soemthing like \"--forget-state\".\n\n builtin/revert.c                   |   43 ++++++++++++++++++++++++++++++++---\n git-rebase--interactive.sh         |   25 ++++++++++++++++----\n t/t3032-merge-recursive-options.sh |    2 +\n t/t3501-revert-cherry-pick.sh      |    1 +\n t/t3502-cherry-pick-merge.sh       |    9 ++++++-\n t/t3504-cherry-pick-rerere.sh      |    2 +\n t/t3505-cherry-pick-empty.sh       |   14 +++++------\n t/t3506-cherry-pick-ff.sh          |    3 ++\n t/t3507-cherry-pick-conflict.sh    |   24 ++++++++++++++++----\n t/t3510-cherry-pick-sequence.sh    |   15 ++++++++++++\n t/t7502-commit.sh                  |    1 +\n 11 files changed, 115 insertions(+), 24 deletions(-)\n\ndiff --git a/builtin/revert.c b/builtin/revert.c\nindex 6edc3de..6568638 100644\n--- a/builtin/revert.c\n+++ b/builtin/revert.c\n@@ -48,6 +48,9 @@ enum replay_action { REVERT, CHERRY_PICK };\n struct replay_opts {\n \tenum replay_action action;\n \n+\t/* --skip-all */\n+\tint skipall_oper;\n+\n \t/* Boolean options */\n \tint edit;\n \tint record_origin;\n@@ -109,6 +112,7 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts)\n \tconst char * const * usage_str = revert_or_cherry_pick_usage(opts);\n \tint noop;\n \tstruct option options[] = {\n+\t\tOPT_BOOLEAN(0, \"skip-all\", &opts->skipall_oper, \"skip remaining instructions\"),\n \t\tOPT_BOOLEAN('n', \"no-commit\", &opts->no_commit, \"don't automatically commit\"),\n \t\tOPT_BOOLEAN('e', \"edit\", &opts->edit, \"edit the commit message\"),\n \t\t{ OPTION_BOOLEAN, 'r', NULL, &noop, NULL, \"no-op (backward compatibility)\",\n@@ -137,7 +141,21 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts)\n \topts->commit_argc = parse_options(argc, argv, NULL, options, usage_str,\n \t\t\t\t\tPARSE_OPT_KEEP_ARGV0 |\n \t\t\t\t\tPARSE_OPT_KEEP_UNKNOWN);\n-\tif (opts->commit_argc < 2)\n+\n+\t/* Check for incompatible command line arguments */\n+\tif (opts->skipall_oper) {\n+\t\tverify_opt_compatible(me, \"--skip-all\",\n+\t\t\t\t\"--no-commit\", opts->no_commit,\n+\t\t\t\t\"--signoff\", opts->signoff,\n+\t\t\t\t\"--mainline\", opts->mainline,\n+\t\t\t\t\"--strategy\", opts->strategy ? 1 : 0,\n+\t\t\t\t\"--strategy-option\", opts->xopts ? 1 : 0,\n+\t\t\t\t\"-x\", opts->record_origin,\n+\t\t\t\t\"--ff\", opts->allow_ff,\n+\t\t\t\tNULL);\n+\t}\n+\n+\telse if (opts->commit_argc < 2)\n \t\tusage_with_options(usage_str, options);\n \n \tif (opts->allow_ff)\n@@ -706,11 +724,28 @@ static int process_continuation(struct replay_opts *opts)\n \tread_and_refresh_cache(me, opts);\n \n \thead = find_unique_abbrev(sha1, 0);\n-\tpopulate_todo_revs(&todo_list, opts);\n-\tpersist_head(head);\n-\tpersist_todo(todo_list, opts);\n \n+\tif (opts->skipall_oper) {\n+\t\tif (!file_exists(TODO_FILE))\n+\t\t\tgoto error;\n+\t\treturn cleanup_sequencer_data();\n+\t} else {\n+\t\t/* Start a new cherry-pick/ revert sequence; but\n+\t\t   first, make sure that an existing one isn't in\n+\t\t   progress */\n+\t\tif (file_exists(TODO_FILE)) {\n+\t\t\terror(_(\"A %s is already in progress\"), me);\n+\t\t\tadvise(_(\"Use %s --skip-all to forget about it\"), me);\n+\t\t\treturn -1;\n+\t\t}\n+\n+\t\tpopulate_todo_revs(&todo_list, opts);\n+\t\tpersist_head(head);\n+\t\tpersist_todo(todo_list, opts);\n+\t}\n \treturn pick_commits(todo_list, opts);\n+error:\n+\treturn error(_(\"No %s in progress\"), me);\n }\n \n int cmd_revert(int argc, const char **argv, const char *prefix)\ndiff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh\nindex 65690af..e0c9bd8 100644\n--- a/git-rebase--interactive.sh\n+++ b/git-rebase--interactive.sh\n@@ -136,6 +136,10 @@ make_patch () {\n \t\tget_author_ident_from_commit \"$1\" > \"$author_script\"\n }\n \n+clear_cherry_pick_state () {\n+\tgit cherry-pick --skip-all\n+}\n+\n die_with_patch () {\n \techo \"$1\" > \"$state_dir\"/stopped-sha\n \tmake_patch \"$1\"\n@@ -279,8 +283,10 @@ pick_one_preserving_merges () {\n \t\t\techo \"$sha1 $(git rev-parse HEAD^0)\" >> \"$rewritten_list\"\n \t\t\t;;\n \t\t*)\n-\t\t\toutput git cherry-pick \"$@\" ||\n+\t\t\toutput git cherry-pick \"$@\" || {\n+\t\t\t\tclear_cherry_pick_state\n \t\t\t\tdie_with_patch $sha1 \"Could not pick $sha1\"\n+\t\t\t}\n \t\t\t;;\n \t\tesac\n \t\t;;\n@@ -385,16 +391,20 @@ do_next () {\n \t\tcomment_for_reflog pick\n \n \t\tmark_action_done\n-\t\tpick_one $sha1 ||\n+\t\tpick_one $sha1 || {\n+\t\t\tclear_cherry_pick_state\n \t\t\tdie_with_patch $sha1 \"Could not apply $sha1... $rest\"\n+\t\t}\n \t\trecord_in_rewritten $sha1\n \t\t;;\n \treword|r)\n \t\tcomment_for_reflog reword\n \n \t\tmark_action_done\n-\t\tpick_one $sha1 ||\n+\t\tpick_one $sha1 || {\n+\t\t\tclear_cherry_pick_state\n \t\t\tdie_with_patch $sha1 \"Could not apply $sha1... $rest\"\n+\t\t}\n \t\tgit commit --amend --no-post-rewrite\n \t\trecord_in_rewritten $sha1\n \t\t;;\n@@ -402,8 +412,10 @@ do_next () {\n \t\tcomment_for_reflog edit\n \n \t\tmark_action_done\n-\t\tpick_one $sha1 ||\n+\t\tpick_one $sha1 || {\n+\t\t\tclear_cherry_pick_state\n \t\t\tdie_with_patch $sha1 \"Could not apply $sha1... $rest\"\n+\t\t}\n \t\techo \"$sha1\" > \"$state_dir\"/stopped-sha\n \t\tmake_patch $sha1\n \t\tgit rev-parse --verify HEAD > \"$amend\"\n@@ -438,7 +450,10 @@ do_next () {\n \t\techo \"$author_script_content\" > \"$author_script\"\n \t\teval \"$author_script_content\"\n \t\toutput git reset --soft HEAD^\n-\t\tpick_one -n $sha1 || die_failed_squash $sha1 \"$rest\"\n+\t\tpick_one -n $sha1 || {\n+\t\t\tclear_cherry_pick_state\n+\t\t\tdie_failed_squash $sha1 \"$rest\"\n+\t\t}\n \t\tcase \"$(peek_next_command)\" in\n \t\tsquash|s|fixup|f)\n \t\t\t# This is an intermediate commit; its message will only be\ndiff --git a/t/t3032-merge-recursive-options.sh b/t/t3032-merge-recursive-options.sh\nindex 2b17311..50e8ca9 100755\n--- a/t/t3032-merge-recursive-options.sh\n+++ b/t/t3032-merge-recursive-options.sh\n@@ -113,8 +113,10 @@ test_expect_success '--ignore-space-change makes merge succeed' '\n test_expect_success 'naive cherry-pick fails' '\n \tgit read-tree --reset -u HEAD &&\n \ttest_must_fail git cherry-pick --no-commit remote &&\n+\tgit cherry-pick --skip-all &&\n \tgit read-tree --reset -u HEAD &&\n \ttest_must_fail git cherry-pick remote &&\n+\tgit cherry-pick --skip-all &&\n \ttest_must_fail git update-index --refresh &&\n \tgrep \"<<<<<<\" text.txt\n '\ndiff --git a/t/t3501-revert-cherry-pick.sh b/t/t3501-revert-cherry-pick.sh\nindex 595d2ff..8970af4 100755\n--- a/t/t3501-revert-cherry-pick.sh\n+++ b/t/t3501-revert-cherry-pick.sh\n@@ -96,6 +96,7 @@ test_expect_success 'revert forbidden on dirty working tree' '\n \techo content >extra_file &&\n \tgit add extra_file &&\n \ttest_must_fail git revert HEAD 2>errors &&\n+\tgit revert --skip-all &&\n \ttest_i18ngrep \"Your local changes would be overwritten by \" errors\n \n '\ndiff --git a/t/t3502-cherry-pick-merge.sh b/t/t3502-cherry-pick-merge.sh\nindex 0ab52da..cc132f8 100755\n--- a/t/t3502-cherry-pick-merge.sh\n+++ b/t/t3502-cherry-pick-merge.sh\n@@ -36,6 +36,7 @@ test_expect_success 'cherry-pick a non-merge with -m should fail' '\n \tgit reset --hard &&\n \tgit checkout a^0 &&\n \ttest_must_fail git cherry-pick -m 1 b &&\n+\tgit cherry-pick --skip-all &&\n \tgit diff --exit-code a --\n \n '\n@@ -45,6 +46,7 @@ test_expect_success 'cherry pick a merge without -m should fail' '\n \tgit reset --hard &&\n \tgit checkout a^0 &&\n \ttest_must_fail git cherry-pick c &&\n+\tgit cherry-pick --skip-all &&\n \tgit diff --exit-code a --\n \n '\n@@ -71,8 +73,8 @@ test_expect_success 'cherry pick a merge relative to nonexistent parent should f\n \n \tgit reset --hard &&\n \tgit checkout b^0 &&\n-\ttest_must_fail git cherry-pick -m 3 c\n-\n+\ttest_must_fail git cherry-pick -m 3 c &&\n+\tgit cherry-pick --skip-all\n '\n \n test_expect_success 'revert a non-merge with -m should fail' '\n@@ -80,6 +82,7 @@ test_expect_success 'revert a non-merge with -m should fail' '\n \tgit reset --hard &&\n \tgit checkout c^0 &&\n \ttest_must_fail git revert -m 1 b &&\n+\tgit cherry-pick --skip-all &&\n \tgit diff --exit-code c\n \n '\n@@ -89,6 +92,7 @@ test_expect_success 'revert a merge without -m should fail' '\n \tgit reset --hard &&\n \tgit checkout c^0 &&\n \ttest_must_fail git revert c &&\n+\tgit cherry-pick --skip-all &&\n \tgit diff --exit-code c\n \n '\n@@ -116,6 +120,7 @@ test_expect_success 'revert a merge relative to nonexistent parent should fail'\n \tgit reset --hard &&\n \tgit checkout c^0 &&\n \ttest_must_fail git revert -m 3 c &&\n+\tgit cherry-pick --skip-all &&\n \tgit diff --exit-code c\n \n '\ndiff --git a/t/t3504-cherry-pick-rerere.sh b/t/t3504-cherry-pick-rerere.sh\nindex e6a6481..e7be835 100755\n--- a/t/t3504-cherry-pick-rerere.sh\n+++ b/t/t3504-cherry-pick-rerere.sh\n@@ -29,6 +29,7 @@ test_expect_success 'fixup' '\n \n test_expect_success 'cherry-pick conflict' '\n \ttest_must_fail git cherry-pick master &&\n+\tgit cherry-pick --skip-all &&\n \ttest_cmp expect foo\n '\n \n@@ -39,6 +40,7 @@ test_expect_success 'reconfigure' '\n \n test_expect_success 'cherry-pick conflict without rerere' '\n \ttest_must_fail git cherry-pick master &&\n+\tgit cherry-pick --skip-all &&\n \ttest_must_fail test_cmp expect foo\n '\n \ndiff --git a/t/t3505-cherry-pick-empty.sh b/t/t3505-cherry-pick-empty.sh\nindex c10b28c..c8d828f 100755\n--- a/t/t3505-cherry-pick-empty.sh\n+++ b/t/t3505-cherry-pick-empty.sh\n@@ -23,10 +23,9 @@ test_expect_success setup '\n '\n \n test_expect_success 'cherry-pick an empty commit' '\n-\tgit checkout master && {\n-\t\tgit cherry-pick empty-branch^\n-\t\ttest \"$?\" = 1\n-\t}\n+\tgit checkout master &&\n+\ttest_expect_code 1 git cherry-pick empty-branch^\n+\tgit cherry-pick --skip-all\n '\n \n test_expect_success 'index lockfile was removed' '\n@@ -36,10 +35,9 @@ test_expect_success 'index lockfile was removed' '\n '\n \n test_expect_success 'cherry-pick a commit with an empty message' '\n-\tgit checkout master && {\n-\t\tgit cherry-pick empty-branch\n-\t\ttest \"$?\" = 1\n-\t}\n+\tgit checkout master &&\n+\ttest_expect_code 1 git cherry-pick empty-branch &&\n+\tgit cherry-pick --skip-all\n '\n \n test_expect_success 'index lockfile was removed' '\ndiff --git a/t/t3506-cherry-pick-ff.sh b/t/t3506-cherry-pick-ff.sh\nindex 51ca391..de7368e 100755\n--- a/t/t3506-cherry-pick-ff.sh\n+++ b/t/t3506-cherry-pick-ff.sh\n@@ -67,12 +67,14 @@ test_expect_success 'merge setup' '\n test_expect_success 'cherry-pick a non-merge with --ff and -m should fail' '\n \tgit reset --hard A -- &&\n \ttest_must_fail git cherry-pick --ff -m 1 B &&\n+\tgit cherry-pick --skip-all &&\n \tgit diff --exit-code A --\n '\n \n test_expect_success 'cherry pick a merge with --ff but without -m should fail' '\n \tgit reset --hard A -- &&\n \ttest_must_fail git cherry-pick --ff C &&\n+\tgit cherry-pick --skip-all &&\n \tgit diff --exit-code A --\n '\n \n@@ -93,6 +95,7 @@ test_expect_success 'cherry pick with --ff a merge (2)' '\n test_expect_success 'cherry pick a merge relative to nonexistent parent with --ff should fail' '\n \tgit reset --hard B -- &&\n \ttest_must_fail git cherry-pick --ff -m 3 C\n+\tgit cherry-pick --skip-all\n '\n \n test_expect_success 'cherry pick a root commit with --ff' '\ndiff --git a/t/t3507-cherry-pick-conflict.sh b/t/t3507-cherry-pick-conflict.sh\nindex 212ec54..07cd805 100755\n--- a/t/t3507-cherry-pick-conflict.sh\n+++ b/t/t3507-cherry-pick-conflict.sh\n@@ -39,6 +39,7 @@ test_expect_success 'failed cherry-pick does not advance HEAD' '\n \n \thead=$(git rev-parse HEAD) &&\n \ttest_must_fail git cherry-pick picked &&\n+\tgit cherry-pick --skip-all &&\n \tnewhead=$(git rev-parse HEAD) &&\n \n \ttest \"$head\" = \"$newhead\"\n@@ -55,6 +56,7 @@ test_expect_success 'advice from failed cherry-pick' \"\n \thint: and commit the result with 'git commit'\n \tEOF\n \ttest_must_fail git cherry-pick picked 2>actual &&\n+\tgit cherry-pick --skip-all &&\n \n \ttest_i18ncmp expected actual\n \"\n@@ -62,7 +64,8 @@ test_expect_success 'advice from failed cherry-pick' \"\n test_expect_success 'failed cherry-pick sets CHERRY_PICK_HEAD' '\n \tpristine_detach initial &&\n \ttest_must_fail git cherry-pick picked &&\n-\ttest_cmp_rev picked CHERRY_PICK_HEAD\n+\ttest_cmp_rev picked CHERRY_PICK_HEAD &&\n+\tgit cherry-pick --skip-all\n '\n \n test_expect_success 'successful cherry-pick does not set CHERRY_PICK_HEAD' '\n@@ -84,13 +87,15 @@ test_expect_success 'GIT_CHERRY_PICK_HELP suppresses CHERRY_PICK_HEAD' '\n \t\texport GIT_CHERRY_PICK_HELP &&\n \t\ttest_must_fail git cherry-pick picked\n \t) &&\n-\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD\n+\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD &&\n+\tgit cherry-pick --skip-all\n '\n \n test_expect_success 'git reset clears CHERRY_PICK_HEAD' '\n \tpristine_detach initial &&\n \n \ttest_must_fail git cherry-pick picked &&\n+\tgit cherry-pick --skip-all &&\n \tgit reset &&\n \n \ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD\n@@ -102,7 +107,8 @@ test_expect_success 'failed commit does not clear CHERRY_PICK_HEAD' '\n \ttest_must_fail git cherry-pick picked &&\n \ttest_must_fail git commit &&\n \n-\ttest_cmp_rev picked CHERRY_PICK_HEAD\n+\ttest_cmp_rev picked CHERRY_PICK_HEAD &&\n+\tgit cherry-pick --skip-all\n '\n \n test_expect_success 'cancelled commit does not clear CHERRY_PICK_HEAD' '\n@@ -119,7 +125,8 @@ test_expect_success 'cancelled commit does not clear CHERRY_PICK_HEAD' '\n \t\ttest_must_fail git commit\n \t) &&\n \n-\ttest_cmp_rev picked CHERRY_PICK_HEAD\n+\ttest_cmp_rev picked CHERRY_PICK_HEAD &&\n+\tgit cherry-pick --skip-all\n '\n \n test_expect_success 'successful commit clears CHERRY_PICK_HEAD' '\n@@ -130,13 +137,15 @@ test_expect_success 'successful commit clears CHERRY_PICK_HEAD' '\n \tgit add foo &&\n \tgit commit &&\n \n-\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD\n+\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD &&\n+\tgit cherry-pick --skip-all\n '\n \n test_expect_success 'failed cherry-pick produces dirty index' '\n \tpristine_detach initial &&\n \n \ttest_must_fail git cherry-pick picked &&\n+\tgit cherry-pick --skip-all &&\n \n \ttest_must_fail git update-index --refresh -q &&\n \ttest_must_fail git diff-index --exit-code HEAD\n@@ -160,6 +169,7 @@ test_expect_success 'failed cherry-pick registers participants in index' '\n \tgit read-tree -u --reset HEAD &&\n \n \ttest_must_fail git cherry-pick picked &&\n+\tgit cherry-pick --skip-all &&\n \tgit ls-files --stage --unmerged > actual &&\n \n \ttest_cmp expected actual\n@@ -176,6 +186,7 @@ test_expect_success 'failed cherry-pick describes conflict in work tree' '\n \tEOF\n \n \ttest_must_fail git cherry-pick picked &&\n+\tgit cherry-pick --skip-all &&\n \n \tsed \"s/[a-f0-9]*\\.\\.\\./objid/\" foo > actual &&\n \ttest_cmp expected actual\n@@ -195,6 +206,7 @@ test_expect_success 'diff3 -m style' '\n \tEOF\n \n \ttest_must_fail git cherry-pick picked &&\n+\tgit cherry-pick --skip-all &&\n \n \tsed \"s/[a-f0-9]*\\.\\.\\./objid/\" foo > actual &&\n \ttest_cmp expected actual\n@@ -227,6 +239,7 @@ test_expect_success 'revert also handles conflicts sanely' '\n \n \thead=$(git rev-parse HEAD) &&\n \ttest_must_fail git revert picked &&\n+\tgit revert --skip-all &&\n \tnewhead=$(git rev-parse HEAD) &&\n \tgit ls-files --stage --unmerged > actual-stages &&\n \n@@ -252,6 +265,7 @@ test_expect_success 'revert conflict, diff3 -m style' '\n \tEOF\n \n \ttest_must_fail git revert picked &&\n+\tgit revert --skip-all &&\n \n \tsed \"s/[a-f0-9]*\\.\\.\\./objid/\" foo > actual &&\n \ttest_cmp expected actual\ndiff --git a/t/t3510-cherry-pick-sequence.sh b/t/t3510-cherry-pick-sequence.sh\nindex b3e9c1b..1e79939 100644\n--- a/t/t3510-cherry-pick-sequence.sh\n+++ b/t/t3510-cherry-pick-sequence.sh\n@@ -35,4 +35,19 @@ test_expect_success 'cherry-pick cleans up sequencer directory upon success' '\n \ttest_must_fail test -d .git/sequencer\n '\n \n+test_expect_success '--skip-all complains when no cherry-pick is in progress' '\n+\tpristine_detach initial &&\n+\ttest_must_fail git cherry-pick --skip-all >actual 2>&1 &&\n+\techo \"error: No cherry-pick in progress\" >expect &&\n+\ttest_i18ncmp expect actual\n+'\n+\n+test_expect_success '--skip-all cleans up sequencer directory' '\n+\tpristine_detach initial &&\n+\thead=$(git rev-parse HEAD) &&\n+\ttest_must_fail git cherry-pick base..picked &&\n+\tgit cherry-pick --skip-all &&\n+\ttest_must_fail test -d .git/sequencer\n+'\n+\n test_done\ndiff --git a/t/t7502-commit.sh b/t/t7502-commit.sh\nindex 3f3adc3..50d474d 100755\n--- a/t/t7502-commit.sh\n+++ b/t/t7502-commit.sh\n@@ -291,6 +291,7 @@ test_expect_success 'do not fire editor in the presence of conflicts' '\n \tgit commit -m second &&\n \t# Must fail due to conflict\n \ttest_must_fail git cherry-pick -n master &&\n+\tgit cherry-pick --skip-all &&\n \techo \"editor not started\" >.git/result &&\n \t(\n \t\tGIT_EDITOR=\"$(pwd)/.git/FAKE_EDITOR\" &&\n-- \n1.7.5.GIT\n"},{"id":"170356","messageId":"201106210848.50884.chriscool@tuxfamily.org","threadId":"27670","inReplyTo":"1308636458-19668-1-git-send-email-artagnon@gmail.com","subject":"Re: [RFC PATCH] revert: Introduce skip-all to cleanup sequencer data","fromName":"Christian Couder","fromEmail":"chriscool@tuxfamily.org","sentAt":"2011-06-21T06:48:49Z","receivedAt":"2011-06-21T06:48:49Z","isPatch":true,"sender":{"key":"christian.couder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/208954?v=4"},"body":"On Tuesday 21 June 2011 08:07:38 Ramkumar Ramachandra wrote:\n> When the sequencer data is persisted after a failed cherry-pick, don't\n> allow subsequent calls to cherry-pick to clobber this state: instead,\n> error out with the complaint that an existing cherry-pick is in\n> progress.  To fix existing tests and the \"rebase -i\" script, introduce\n> a new \"--skip-all\" command-line option to call after every failed\n> cherry-pick; it essentially clears out the sequencer data, thereby\n> allowing subsequent calls.\n\nNitpick: I'd rather call it \"--stop\" or \"--quit\" (or maybe \"--reset\") to \nconvey the meaning that we get out of cherry-pick mode.\n\nThanks,\nChristian.\n"}]}