Merge branch 'jn/merge-no-edit-fix'
authorJunio C Hamano <gitster@pobox.com>
Mon, 13 Feb 2012 06:41:51 +0000 (22:41 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 Feb 2012 06:41:51 +0000 (22:41 -0800)
* jn/merge-no-edit-fix:
merge: do not launch an editor on "--no-edit $tag"

Conflicts:
builtin/merge.c

1  2 
builtin/merge.c
diff --combined builtin/merge.c
index 7e6db3bb35517b78f288202a635fcaa9a2353235,f385b8ac9e759f74b4711bdb93687202c1bc1600..ed0f959ac49c02aaffa77bc748a9efc69f1fd339
@@@ -885,30 -885,20 +885,30 @@@ static void abort_commit(const char *er
        exit(1);
  }
  
 +static const char merge_editor_comment[] =
 +N_("Please enter a commit message to explain why this merge is necessary,\n"
 +   "especially if it merges an updated upstream into a topic branch.\n"
 +   "\n"
 +   "Lines starting with '#' will be ignored, and an empty message aborts\n"
 +   "the commit.\n");
 +
  static void prepare_to_commit(void)
  {
        struct strbuf msg = STRBUF_INIT;
 +      const char *comment = _(merge_editor_comment);
        strbuf_addbuf(&msg, &merge_msg);
        strbuf_addch(&msg, '\n');
 +      if (0 < option_edit)
 +              strbuf_add_lines(&msg, "# ", comment, strlen(comment));
        write_merge_msg(&msg);
        run_hook(get_index_file(), "prepare-commit-msg",
                 git_path("MERGE_MSG"), "merge", NULL, NULL);
 -      if (option_edit) {
 +      if (0 < option_edit) {
                if (launch_editor(git_path("MERGE_MSG"), NULL, NULL))
                        abort_commit(NULL);
        }
        read_merge_msg(&msg);
 -      stripspace(&msg, option_edit);
 +      stripspace(&msg, 0 < option_edit);
        if (!msg.len)
                abort_commit(_("Empty commit message."));
        strbuf_release(&merge_msg);
@@@ -1109,33 -1099,6 +1109,33 @@@ static void write_merge_state(void
        close(fd);
  }
  
 +static int default_edit_option(void)
 +{
 +      static const char name[] = "GIT_MERGE_AUTOEDIT";
 +      const char *e = getenv(name);
 +      struct stat st_stdin, st_stdout;
 +
 +      if (have_message)
 +              /* an explicit -m msg without --[no-]edit */
 +              return 0;
 +
 +      if (e) {
 +              int v = git_config_maybe_bool(name, e);
 +              if (v < 0)
 +                      die("Bad value '%s' in environment '%s'", e, name);
 +              return v;
 +      }
 +
 +      /* Use editor if stdin and stdout are the same and is a tty */
 +      return (!fstat(0, &st_stdin) &&
 +              !fstat(1, &st_stdout) &&
 +              isatty(0) &&
 +              st_stdin.st_dev == st_stdout.st_dev &&
 +              st_stdin.st_ino == st_stdout.st_ino &&
 +              st_stdin.st_mode == st_stdout.st_mode);
 +}
 +
 +
  int cmd_merge(int argc, const char **argv, const char *prefix)
  {
        unsigned char result_tree[20];
                    merge_remote_util(commit) &&
                    merge_remote_util(commit)->obj &&
                    merge_remote_util(commit)->obj->type == OBJ_TAG) {
-                       option_edit = 1;
+                       if (option_edit < 0)
+                               option_edit = 1;
                        allow_fast_forward = 0;
                }
        }
  
        if (option_edit < 0)
 -              option_edit = 0;
 +              option_edit = default_edit_option();
  
        if (!use_strategies) {
                if (!remoteheads->next)