mergetool: Skip autoresolved paths
When mergetool is run without path limiters it loops over each entry in 'git ls-files -u'. This includes autoresolved paths. Teach mergetool to only merge files listed in 'rerere status' when rerere is enabled. There are some subtle but harmless changes in behavior. We now call cd_to_toplevel when no paths are given. We do this because 'rerere status' paths are always relative to the root. This is beneficial for the non-rerere use as well in that mergetool now runs against all unmerged files regardless of the current directory. This also slightly tweaks the output when run without paths to be more readable. The old output: Merging the files: foo bar baz The new output: Merging: foo bar baz Signed-off-by: David Aguilar <davvid@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
3235b7053c
commit
bb0a484e98
@ -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
|
||||
|
Reference in New Issue
Block a user