Merge branch 'js/no-cherry-pick-head-after-punted'
authorJunio C Hamano <gitster@pobox.com>
Wed, 19 Oct 2011 17:49:05 +0000 (10:49 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 19 Oct 2011 17:49:05 +0000 (10:49 -0700)
* js/no-cherry-pick-head-after-punted:
cherry-pick: do not give irrelevant advice when cherry-pick punted
revert.c: defer writing CHERRY_PICK_HEAD till it is safe to do so

1  2 
builtin/revert.c
diff --combined builtin/revert.c
index 010508d571a5425aac2e0f5390ebac9698a5d1cb,4eb4193d34a3c5328fba50e70d38654c386c7906..87df70edc33fcc71177b863e6ced870330e505d0
@@@ -110,7 -110,7 +110,7 @@@ static void verify_opt_compatible(cons
  
  static void verify_opt_mutually_compatible(const char *me, ...)
  {
 -      const char *opt1, *opt2;
 +      const char *opt1, *opt2 = NULL;
        va_list ap;
  
        va_start(ap, me);
@@@ -133,6 -133,7 +133,6 @@@ static void parse_args(int argc, const 
  {
        const char * const * usage_str = revert_or_cherry_pick_usage(opts);
        const char *me = action_name(opts);
 -      int noop;
        int reset = 0;
        int contin = 0;
        struct option options[] = {
                OPT_BOOLEAN(0, "continue", &contin, "continue the current operation"),
                OPT_BOOLEAN('n', "no-commit", &opts->no_commit, "don't automatically commit"),
                OPT_BOOLEAN('e', "edit", &opts->edit, "edit the commit message"),
 -              { OPTION_BOOLEAN, 'r', NULL, &noop, NULL, "no-op (backward compatibility)",
 -                PARSE_OPT_NOARG | PARSE_OPT_HIDDEN, NULL, 0 },
 +              OPT_NOOP_NOARG('r', NULL),
                OPT_BOOLEAN('s', "signoff", &opts->signoff, "add Signed-off-by:"),
                OPT_INTEGER('m', "mainline", &opts->mainline, "parent number"),
                OPT_RERERE_AUTOUPDATE(&opts->allow_rerere_auto),
@@@ -302,7 -304,7 +302,7 @@@ static void write_cherry_pick_head(stru
        strbuf_release(&buf);
  }
  
- static void print_advice(void)
+ static void print_advice(int show_hint)
  {
        char *msg = getenv("GIT_CHERRY_PICK_HELP");
  
                return;
        }
  
-       advise("after resolving the conflicts, mark the corrected paths");
-       advise("with 'git add <paths>' or 'git rm <paths>'");
-       advise("and commit the result with 'git commit'");
+       if (show_hint) {
+               advise("after resolving the conflicts, mark the corrected paths");
+               advise("with 'git add <paths>' or 'git rm <paths>'");
+               advise("and commit the result with 'git commit'");
+       }
  }
  
  static void write_message(struct strbuf *msgbuf, const char *filename)
@@@ -564,8 -568,6 +566,6 @@@ static int do_pick_commit(struct commi
                        strbuf_addstr(&msgbuf, sha1_to_hex(commit->object.sha1));
                        strbuf_addstr(&msgbuf, ")\n");
                }
-               if (!opts->no_commit)
-                       write_cherry_pick_head(commit);
        }
  
        if (!opts->strategy || !strcmp(opts->strategy, "recursive") || opts->action == REVERT) {
                free_commit_list(remotes);
        }
  
+       /*
+        * If the merge was clean or if it failed due to conflict, we write
+        * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
+        * However, if the merge did not even start, then we don't want to
+        * write it at all.
+        */
+       if (opts->action == CHERRY_PICK && !opts->no_commit && (res == 0 || res == 1))
+               write_cherry_pick_head(commit);
        if (res) {
                error(opts->action == REVERT
                      ? _("could not revert %s... %s")
                      : _("could not apply %s... %s"),
                      find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV),
                      msg.subject);
-               print_advice();
+               print_advice(res == 1);
                rerere(opts->allow_rerere_auto);
        } else {
                if (!opts->no_commit)