From d387868a7d29621e85e8c5c061d1f50586db74e5 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Tue, 20 Mar 2012 15:39:10 -0700 Subject: [PATCH 1/2] merge: backport GIT_MERGE_AUTOEDIT support 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 --- Documentation/merge-options.txt | 14 ++++++++++++-- builtin/merge.c | 29 ++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt index 2bd92c4741..5afc99f650 100644 --- a/Documentation/merge-options.txt +++ b/Documentation/merge-options.txt @@ -8,9 +8,19 @@ failed and do not autocommit, to give the user a chance to 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 8018a14468..5126443fdf 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -1109,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) && 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]; @@ -1298,7 +1325,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) 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; } } From cb2ed324fc917db0b79d7b1f3756575ffa5f70d5 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Mon, 2 Apr 2012 13:07:58 -0700 Subject: [PATCH 2/2] Git 1.7.9.6 Signed-off-by: Junio C Hamano --- Documentation/RelNotes/1.7.9.6.txt | 12 ++++++++++++ Documentation/git.txt | 6 ++++-- GIT-VERSION-GEN | 2 +- RelNotes | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 Documentation/RelNotes/1.7.9.6.txt diff --git a/Documentation/RelNotes/1.7.9.6.txt b/Documentation/RelNotes/1.7.9.6.txt new file mode 100644 index 0000000000..74bf8825e2 --- /dev/null +++ b/Documentation/RelNotes/1.7.9.6.txt @@ -0,0 +1,12 @@ +Git v1.7.9.6 Release Notes +========================== + +Fixes since v1.7.9.5 +-------------------- + + * "git merge $tag" to merge an annotated tag always opens the editor + during an interactive edit session. v1.7.10 series introduced an + environment variable GIT_MERGE_AUTOEDIT to help older scripts decline + this behaviour, but the maintenance track should also support it. + +Also contains minor fixes and documentation updates. diff --git a/Documentation/git.txt b/Documentation/git.txt index 7ccb55d148..ae34e8a7f6 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -44,9 +44,10 @@ unreleased) version of git, that is available from 'master' branch of the `git.git` repository. Documentation for older releases are available here: -* link:v1.7.9.5/git.html[documentation for release 1.7.9.5] +* link:v1.7.9.6/git.html[documentation for release 1.7.9.6] * release notes for + link:RelNotes/1.7.9.6.txt[1.7.9.6], link:RelNotes/1.7.9.5.txt[1.7.9.5], link:RelNotes/1.7.9.4.txt[1.7.9.4], link:RelNotes/1.7.9.3.txt[1.7.9.3], @@ -54,9 +55,10 @@ Documentation for older releases are available here: link:RelNotes/1.7.9.1.txt[1.7.9.1], link:RelNotes/1.7.9.txt[1.7.9]. -* link:v1.7.8.4/git.html[documentation for release 1.7.8.4] +* link:v1.7.8.5/git.html[documentation for release 1.7.8.5] * release notes for + link:RelNotes/1.7.8.5.txt[1.7.8.5], link:RelNotes/1.7.8.4.txt[1.7.8.4], link:RelNotes/1.7.8.3.txt[1.7.8.3], link:RelNotes/1.7.8.2.txt[1.7.8.2], diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 0a5135c05d..ba8c50302f 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v1.7.9.5 +DEF_VER=v1.7.9.6 LF=' ' diff --git a/RelNotes b/RelNotes index d71b26d119..3f4ce9f4f1 120000 --- a/RelNotes +++ b/RelNotes @@ -1 +1 @@ -Documentation/RelNotes/1.7.9.5.txt \ No newline at end of file +Documentation/RelNotes/1.7.9.6.txt \ No newline at end of file