Merge branch 'jc/maint-merge-autoedit' into maint
* jc/maint-merge-autoedit: merge: backport GIT_MERGE_AUTOEDIT support
This commit is contained in:
commit
b52ab19d91
@ -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.
|
inspect and further tweak the merge result before committing.
|
||||||
|
|
||||||
--edit::
|
--edit::
|
||||||
-e::
|
--no-edit::
|
||||||
Invoke editor before committing successful merge to further
|
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::
|
--ff::
|
||||||
When the merge resolves as a fast-forward, only update the branch
|
When the merge resolves as a fast-forward, only update the branch
|
||||||
|
@ -1109,6 +1109,33 @@ static void write_merge_state(void)
|
|||||||
close(fd);
|
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)
|
int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||||
{
|
{
|
||||||
unsigned char result_tree[20];
|
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 &&
|
||||||
merge_remote_util(commit)->obj->type == OBJ_TAG) {
|
merge_remote_util(commit)->obj->type == OBJ_TAG) {
|
||||||
if (option_edit < 0)
|
if (option_edit < 0)
|
||||||
option_edit = 1;
|
option_edit = default_edit_option();
|
||||||
allow_fast_forward = 0;
|
allow_fast_forward = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user