From: Junio C Hamano Date: Mon, 13 Feb 2012 06:41:51 +0000 (-0800) Subject: Merge branch 'jn/merge-no-edit-fix' X-Git-Tag: v1.7.10-rc0~105 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/5cdc9fbb0894023da8e4dab552dfdda8b662feab?ds=inline;hp=-c Merge branch 'jn/merge-no-edit-fix' * jn/merge-no-edit-fix: merge: do not launch an editor on "--no-edit $tag" Conflicts: builtin/merge.c --- 5cdc9fbb0894023da8e4dab552dfdda8b662feab diff --combined builtin/merge.c index 7e6db3bb35,f385b8ac9e..ed0f959ac4 --- a/builtin/merge.c +++ b/builtin/merge.c @@@ -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]; @@@ -1324,13 -1287,14 +1324,14 @@@ 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)