mirror of
https://github.com/git/git.git
synced 2026-03-14 02:43:25 +01:00
Merge branch 'master' into next
* master: mergetool: Skip autoresolved paths
This commit is contained in:
@@ -264,17 +264,35 @@ merge_keep_temporaries="$(git config --bool mergetool.keepTemporaries || echo fa
|
||||
|
||||
last_status=0
|
||||
rollup_status=0
|
||||
rerere=false
|
||||
|
||||
files_to_merge() {
|
||||
if test "$rerere" = true
|
||||
then
|
||||
git rerere status
|
||||
else
|
||||
git ls-files -u | sed -e 's/^[^ ]* //' | sort -u
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
if test $# -eq 0 ; then
|
||||
files=$(git ls-files -u | sed -e 's/^[^ ]* //' | sort -u)
|
||||
cd_to_toplevel
|
||||
|
||||
if test -e "$GIT_DIR/MERGE_RR"
|
||||
then
|
||||
rerere=true
|
||||
fi
|
||||
|
||||
files=$(files_to_merge)
|
||||
if test -z "$files" ; then
|
||||
echo "No files need merging"
|
||||
exit 0
|
||||
fi
|
||||
echo Merging the files: "$files"
|
||||
git ls-files -u |
|
||||
sed -e 's/^[^ ]* //' |
|
||||
sort -u |
|
||||
printf "Merging:\n"
|
||||
printf "$files\n"
|
||||
|
||||
files_to_merge |
|
||||
while IFS= read i
|
||||
do
|
||||
if test $last_status -ne 0; then
|
||||
|
||||
@@ -14,6 +14,7 @@ Testing basic merge tool invocation'
|
||||
# running mergetool
|
||||
|
||||
test_expect_success 'setup' '
|
||||
git config rerere.enabled true &&
|
||||
echo master >file1 &&
|
||||
mkdir subdir &&
|
||||
echo master sub >subdir/file3 &&
|
||||
@@ -71,19 +72,40 @@ test_expect_success 'mergetool in subdir' '
|
||||
cd subdir && (
|
||||
test_must_fail git merge master >/dev/null 2>&1 &&
|
||||
( yes "" | git mergetool file3 >/dev/null 2>&1 ) &&
|
||||
test "$(cat file3)" = "master new sub" )
|
||||
test "$(cat file3)" = "master new sub") &&
|
||||
cd ..
|
||||
'
|
||||
|
||||
# We can't merge files from parent directories when running mergetool
|
||||
# from a subdir. Is this a bug?
|
||||
#
|
||||
#test_expect_failure 'mergetool in subdir' '
|
||||
# cd subdir && (
|
||||
# ( yes "" | git mergetool ../file1 >/dev/null 2>&1 ) &&
|
||||
# ( yes "" | git mergetool ../file2 >/dev/null 2>&1 ) &&
|
||||
# test "$(cat ../file1)" = "master updated" &&
|
||||
# test "$(cat ../file2)" = "master new" &&
|
||||
# git commit -m "branch1 resolved with mergetool - subdir" )
|
||||
#'
|
||||
test_expect_success 'mergetool on file in parent dir' '
|
||||
cd subdir && (
|
||||
( yes "" | git mergetool ../file1 >/dev/null 2>&1 ) &&
|
||||
( yes "" | git mergetool ../file2 >/dev/null 2>&1 ) &&
|
||||
test "$(cat ../file1)" = "master updated" &&
|
||||
test "$(cat ../file2)" = "master new" &&
|
||||
git commit -m "branch1 resolved with mergetool - subdir") &&
|
||||
cd ..
|
||||
'
|
||||
|
||||
test_expect_success 'mergetool skips autoresolved' '
|
||||
git checkout -b test4 branch1 &&
|
||||
test_must_fail git merge master &&
|
||||
test -n "$(git ls-files -u)" &&
|
||||
output="$(git mergetool --no-prompt)" &&
|
||||
test "$output" = "No files need merging" &&
|
||||
git reset --hard
|
||||
'
|
||||
|
||||
test_expect_success 'mergetool merges all from subdir' '
|
||||
cd subdir && (
|
||||
git config rerere.enabled false &&
|
||||
test_must_fail git merge master &&
|
||||
git mergetool --no-prompt &&
|
||||
test "$(cat ../file1)" = "master updated" &&
|
||||
test "$(cat ../file2)" = "master new" &&
|
||||
test "$(cat file3)" = "master new sub" &&
|
||||
git add ../file1 ../file2 file3 &&
|
||||
git commit -m "branch2 resolved by mergetool from subdir") &&
|
||||
cd ..
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
Reference in New Issue
Block a user