help: reuse print_columns() for help -a
[gitweb.git] / builtin / merge.c
index bfb75476aab154e430d6247073e0bbcd83c992f6..d3e1e8dc9e478aaea7ef4da855fb7c2e10397644 100644 (file)
@@ -885,11 +885,21 @@ static void abort_commit(const char *err_msg)
        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);
@@ -1119,7 +1129,7 @@ static int default_edit_option(void)
        /* Use editor if stdin and stdout are the same and is a tty */
        return (!fstat(0, &st_stdin) &&
                !fstat(1, &st_stdout) &&
-               isatty(0) &&
+               isatty(0) && isatty(1) &&
                st_stdin.st_dev == st_stdout.st_dev &&
                st_stdin.st_ino == st_stdout.st_ino &&
                st_stdin.st_mode == st_stdout.st_mode);
@@ -1310,10 +1320,12 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                            sha1_to_hex(commit->object.sha1));
                setenv(buf.buf, argv[i], 1);
                strbuf_reset(&buf);
-               if (merge_remote_util(commit) &&
+               if (!fast_forward_only &&
+                   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;
                }
        }