diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-04-02 12:56:35 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-04-02 12:56:35 -0700 |
commit | b52ab19d91015ebd6bebc83a82b2c3d64b948b36 (patch) | |
tree | 56c03a113b6d6e5597f3e73ece62879c6268da45 /builtin | |
parent | b8939b2b3abaa99c18bf57251cd2828b89ac38c5 (diff) | |
parent | d387868a7d29621e85e8c5c061d1f50586db74e5 (diff) | |
download | git-b52ab19d91015ebd6bebc83a82b2c3d64b948b36.tar.gz git-b52ab19d91015ebd6bebc83a82b2c3d64b948b36.tar.xz |
Merge branch 'jc/maint-merge-autoedit' into maint
* jc/maint-merge-autoedit:
merge: backport GIT_MERGE_AUTOEDIT support
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/merge.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/builtin/merge.c b/builtin/merge.c index 8018a1446..5126443fd 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; } } |