Merge branch 'master' into next

* master:
  mergetool: Skip autoresolved paths
This commit is contained in:
Junio C Hamano
2010-08-18 12:55:10 -07:00
2 changed files with 57 additions and 17 deletions

View File

@@ -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

View File

@@ -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