X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=git-merge-one-file.sh;h=9ee3f804520eadb322de3d0ea70a2bf9f092b089;hb=003b93cfb3f588284b89dc4e4c89e1046913ff59;hp=254d210bdca128089da453988175e2324b837a85;hpb=5bd148bfe8a4f2df8487e029cd4ee6809bc4c963;p=git.git diff --git a/git-merge-one-file.sh b/git-merge-one-file.sh index 254d210bd..9ee3f8045 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 @@ -27,14 +27,15 @@ case "${1:-.}${2:-.}${3:-.}" in # 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. - exit 0 + # 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" ;; # @@ -42,7 +43,8 @@ case "${1:-.}${2:-.}${3:-.}" in # ".$2.") # the other side did not add and we added so there is nothing - # to be done. + # to be done, except making the path merged. + exec git update-index --add --cacheinfo "$6" "$2" "$4" ;; "..$3") echo "Adding $4" @@ -50,8 +52,8 @@ case "${1:-.}${2:-.}${3:-.}" in echo "ERROR: untracked $4 is overwritten by the merge." exit 1 } - git-update-index --add --cacheinfo "$6$7" "$2$3" "$4" && - exec git-checkout-index -u -f -- "$4" + git update-index --add --cacheinfo "$7" "$3" "$4" && + exec git checkout-index -u -f -- "$4" ;; # @@ -64,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" ;; # @@ -78,17 +80,21 @@ case "${1:-.}${2:-.}${3:-.}" in echo "ERROR: $4: Not merging symbolic link changes." exit 1 ;; + *,160000,*) + echo "ERROR: $4: Not merging conflicting submodule changes." + exit 1 + ;; esac src2=`git-unpack-file $3` 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 @@ -104,12 +110,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` - git-merge-file "$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 @@ -124,7 +130,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" ;; *)