X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=git-merge-one-file.sh;h=1e7727d2763e744b94f55c2056eccaab12367c9e;hb=868bc068bb45e3b9d135151f2126ce3dba849426;hp=fba4b0cb5fffbb1ad3f39c670c6364975c52186a;hpb=182a8dabd5f5f646608f3857f10f3ac18c3d1445;p=git.git diff --git a/git-merge-one-file.sh b/git-merge-one-file.sh index fba4b0cb5..1e7727d27 100755 --- a/git-merge-one-file.sh +++ b/git-merge-one-file.sh @@ -13,7 +13,7 @@ # $7 - file in branch2 mode (or empty) # # Handle some trivial cases.. The _really_ trivial cases have -# been handled already by git-read-tree, but that one doesn't +# been handled already by git read-tree, but that one doesn't # do any merges that might change the tree layout. case "${1:-.}${2:-.}${3:-.}" in @@ -23,21 +23,37 @@ case "${1:-.}${2:-.}${3:-.}" in "$1.." | "$1.$1" | "$1$1.") if [ "$2" ]; then echo "Removing $4" + else + # read-tree checked that index matches HEAD already, + # so we know we do not have this path tracked. + # there may be an unrelated working tree file here, + # which we should just leave unmolested. Make sure + # we do not have it in the index, though. + exec git update-index --remove -- "$4" fi if test -f "$4"; then rm -f -- "$4" && rmdir -p "$(expr "z$4" : 'z\(.*\)/')" 2>/dev/null || : fi && - exec git-update-index --remove -- "$4" + exec git update-index --remove -- "$4" ;; # # Added in one. # -".$2." | "..$3" ) +".$2.") + # the other side did not add and we added so there is nothing + # to be done, except making the path merged. + exec git update-index --add --cacheinfo "$6" "$2" "$4" + ;; +"..$3") echo "Adding $4" - git-update-index --add --cacheinfo "$6$7" "$2$3" "$4" && - exec git-checkout-index -u -f -- "$4" + test -f "$4" || { + echo "ERROR: untracked $4 is overwritten by the merge." + exit 1 + } + git update-index --add --cacheinfo "$7" "$3" "$4" && + exec git checkout-index -u -f -- "$4" ;; # @@ -50,8 +66,8 @@ case "${1:-.}${2:-.}${3:-.}" in exit 1 fi echo "Adding $4" - git-update-index --add --cacheinfo "$6" "$2" "$4" && - exec git-checkout-index -u -f -- "$4" + git update-index --add --cacheinfo "$6" "$2" "$4" && + exec git checkout-index -u -f -- "$4" ;; # @@ -70,11 +86,11 @@ case "${1:-.}${2:-.}${3:-.}" in case "$1" in '') echo "Added $4 in both, but differently." - # This extracts OUR file in $orig, and uses git-apply to + # This extracts OUR file in $orig, and uses git apply to # remove lines that are unique to ours. orig=`git-unpack-file $2` sz0=`wc -c <"$orig"` - diff -u -La/$orig -Lb/$orig $orig $src2 | git-apply --no-add + diff -u -La/$orig -Lb/$orig $orig $src2 | git apply --no-add sz1=`wc -c <"$orig"` # If we do not have enough common material, it is not @@ -90,12 +106,12 @@ case "${1:-.}${2:-.}${3:-.}" in # Be careful for funny filename such as "-L" in "$4", which # would confuse "merge" greatly. src1=`git-unpack-file $2` - merge "$src1" "$orig" "$src2" + git merge-file "$src1" "$orig" "$src2" ret=$? # Create the working tree file, using "our tree" version from the # index, and then store the result of the merge. - git-checkout-index -f --stage=2 -- "$4" && cat "$src1" >"$4" + git checkout-index -f --stage=2 -- "$4" && cat "$src1" >"$4" rm -f -- "$orig" "$src1" "$src2" if [ "$6" != "$7" ]; then @@ -110,7 +126,7 @@ case "${1:-.}${2:-.}${3:-.}" in echo "ERROR: Merge conflict in $4" exit 1 fi - exec git-update-index -- "$4" + exec git update-index -- "$4" ;; *)