mirror of
https://github.com/git/git
synced 2024-08-28 03:59:25 +00:00
Merge branch 'jk/merge-file-exit-code' into maint
"git merge-file" tried to signal how many conflicts it found, which obviously would not work well when there are too many of them. * jk/merge-file-exit-code: merge-file: clamp exit code to maximum 127
This commit is contained in:
commit
5c15ca0b3c
|
@ -41,7 +41,8 @@ lines from `<other-file>`, or lines from both respectively. The length of the
|
||||||
conflict markers can be given with the `--marker-size` option.
|
conflict markers can be given with the `--marker-size` option.
|
||||||
|
|
||||||
The exit value of this program is negative on error, and the number of
|
The exit value of this program is negative on error, and the number of
|
||||||
conflicts otherwise. If the merge was clean, the exit value is 0.
|
conflicts otherwise (truncated to 127 if there are more than that many
|
||||||
|
conflicts). If the merge was clean, the exit value is 0.
|
||||||
|
|
||||||
'git merge-file' is designed to be a minimal clone of RCS 'merge'; that is, it
|
'git merge-file' is designed to be a minimal clone of RCS 'merge'; that is, it
|
||||||
implements all of RCS 'merge''s functionality which is needed by
|
implements all of RCS 'merge''s functionality which is needed by
|
||||||
|
|
|
@ -104,5 +104,8 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
|
||||||
free(result.ptr);
|
free(result.ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ret > 127)
|
||||||
|
ret = 127;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -692,4 +692,37 @@ test_expect_success GPG 'merge --no-edit tag should skip editor' '
|
||||||
test_cmp actual expect
|
test_cmp actual expect
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'set up mod-256 conflict scenario' '
|
||||||
|
# 256 near-identical stanzas...
|
||||||
|
for i in $(test_seq 1 256); do
|
||||||
|
for j in 1 2 3 4 5; do
|
||||||
|
echo $i-$j
|
||||||
|
done
|
||||||
|
done >file &&
|
||||||
|
git add file &&
|
||||||
|
git commit -m base &&
|
||||||
|
|
||||||
|
# one side changes the first line of each to "master"
|
||||||
|
sed s/-1/-master/ <file >tmp &&
|
||||||
|
mv tmp file &&
|
||||||
|
git commit -am master &&
|
||||||
|
|
||||||
|
# and the other to "side"; merging the two will
|
||||||
|
# yield 256 separate conflicts
|
||||||
|
git checkout -b side HEAD^ &&
|
||||||
|
sed s/-1/-side/ <file >tmp &&
|
||||||
|
mv tmp file &&
|
||||||
|
git commit -am side
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'merge detects mod-256 conflicts (recursive)' '
|
||||||
|
git reset --hard &&
|
||||||
|
test_must_fail git merge -s recursive master
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'merge detects mod-256 conflicts (resolve)' '
|
||||||
|
git reset --hard &&
|
||||||
|
test_must_fail git merge -s resolve master
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in a new issue