summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: a460348)
raw | patch | inline | side by side (parent: a460348)
author | Junio C Hamano <gitster@pobox.com> | |
Tue, 20 Mar 2012 22:39:10 +0000 (15:39 -0700) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Tue, 20 Mar 2012 22:39:10 +0000 (15:39 -0700) |
Even though 1.7.9.x series does not open the editor by default
when merging in general, it does do so in one occassion: when
merging an annotated tag. And worse yet, there is no good way
for older scripts to decline this.
Backport the support for GIT_MERGE_AUTOEDIT environment variable
from 1.7.10 track to help those stuck on 1.7.9.x maintenance
track.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
when merging in general, it does do so in one occassion: when
merging an annotated tag. And worse yet, there is no good way
for older scripts to decline this.
Backport the support for GIT_MERGE_AUTOEDIT environment variable
from 1.7.10 track to help those stuck on 1.7.9.x maintenance
track.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/merge-options.txt | patch | blob | history | |
builtin/merge.c | patch | blob | history |
index 2bd92c474178559cf03f63ffc19098a76a9cf4e2..5afc99f650b17a6ff660d81ba0687f2f46079f7a 100644 (file)
inspect and further tweak the merge result before committing.
--edit::
--e::
+--no-edit::
Invoke editor before committing successful merge to further
- edit the default merge message.
+ edit the default merge message. The `--no-edit` option can be
+ used to accept the auto-generated message (this is generally
+ discouraged) when merging an annotated tag, in which case
+ `git merge` automatically spawns the editor so that the result
+ of the GPG verification of the tag can be seen.
++
+Older scripts may depend on the historical behaviour of not allowing the
+user to edit the merge log message. They will see an editor opened when
+they run `git merge` to merge an annotated tag. To make it easier to adjust
+such scripts to the updated behaviour, the environment variable
+`GIT_MERGE_AUTOEDIT` can be set to `no` at the beginning of them.
--ff::
When the merge resolves as a fast-forward, only update the branch
diff --git a/builtin/merge.c b/builtin/merge.c
index 8018a144688541b6ea178e96fe83206209a2902c..5126443fdfe1dc5113943dd3099ab8d87d84887e 100644 (file)
--- a/builtin/merge.c
+++ b/builtin/merge.c
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) && 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);
+}
+
+
int cmd_merge(int argc, const char **argv, const char *prefix)
{
unsigned char result_tree[20];
merge_remote_util(commit)->obj &&
merge_remote_util(commit)->obj->type == OBJ_TAG) {
if (option_edit < 0)
- option_edit = 1;
+ option_edit = default_edit_option();
allow_fast_forward = 0;
}
}