summaryrefslogtreecommitdiff
path: root/builtin/merge.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2012-03-20 15:39:10 -0700
committerJunio C Hamano <gitster@pobox.com>2012-03-20 15:39:10 -0700
commitd387868a7d29621e85e8c5c061d1f50586db74e5 (patch)
tree0e94cb6cc9bd3615adf051107dd6ac071fa5b9c7 /builtin/merge.c
parenta46034819ecce6872bff099f3d75589f4d38c00c (diff)
downloadgit-d387868a7d29621e85e8c5c061d1f50586db74e5.tar.gz
merge: backport GIT_MERGE_AUTOEDIT supportjc/maint-merge-autoedit
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>
Diffstat (limited to 'builtin/merge.c')
-rw-r--r--builtin/merge.c29
1 files changed, 28 insertions, 1 deletions
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;
}
}