summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: e0226ad)
raw | patch | inline | side by side (parent: e0226ad)
author | Linus Torvalds <torvalds@ppc970.osdl.org> | |
Thu, 9 Jun 2005 00:56:09 +0000 (17:56 -0700) | ||
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | |
Thu, 9 Jun 2005 00:56:09 +0000 (17:56 -0700) |
This uses git-checkout-file to make sure that the full pathname is
created, instead of the script having to verify it by hand. Also,
simplify the 3-way merge case by just writing to the right file and
setting the initial index contents early.
created, instead of the script having to verify it by hand. Also,
simplify the 3-way merge case by just writing to the right file and
setting the initial index contents early.
git-merge-one-file-script | patch | blob | history |
index 004c2bd44684c56a26e68879facdf50875b4dcf6..88ad3edd64acf92dd11d690c110d42bef23a6187 100755 (executable)
# been handled already by git-read-tree, but that one doesn't
# do any merges that might change the tree layout.
-verify_path() {
- file="$1"
- dir=`dirname "$file"` &&
- mkdir -p "$dir" &&
- rm -f -- "$file" &&
- : >"$file"
-}
-
case "${1:-.}${2:-.}${3:-.}" in
#
-# Deleted in both.
-#
-"$1..")
- echo "WARNING: $4 is removed in both branches."
- echo "WARNING: This is a potential rename conflict."
- rm -f -- "$4" &&
- exec git-update-cache --remove -- "$4"
- ;;
-
-#
-# Deleted in one and unchanged in the other.
+# Deleted in both or deleted in one and unchanged in the other
#
-"$1.$1" | "$1$1.")
+"$1.." | "$1.$1" | "$1$1.")
echo "Removing $4"
rm -f -- "$4" &&
exec git-update-cache --remove -- "$4"
# Added in one.
#
".$2." | "..$3" )
- case "$6$7" in *7??) mode=+x;; *) mode=-x;; esac
- echo "Adding $4 with perm $mode."
- verify_path "$4" &&
- git-cat-file blob "$2$3" >"$4" &&
- chmod $mode -- "$4" &&
- exec git-update-cache --add -- "$4"
+ echo "Adding $4"
+ git-update-cache --add --cacheinfo "$6$7" "$2$3" "$4" &&
+ exec git-checkout-cache -u -f -- "$4"
;;
#
echo "ERROR: but permissions conflict $6->$7."
exit 1
fi
- case "$6" in *7??) mode=+x;; *) mode=-x;; esac
- echo "Adding $4 with perm $mode"
- verify_path "$4" &&
- git-cat-file blob "$2" >"$4" &&
- chmod $mode -- "$4" &&
- exec git-update-cache --add -- "$4"
+ echo "Adding $4"
+ git-update-cache --add --cacheinfo "$6" "$2" "$4" &&
+ exec git-checkout-cache -u -f -- "$4"
;;
#
"$1$2$3")
echo "Auto-merging $4."
orig=`git-unpack-file $1`
- src1=`git-unpack-file $2`
src2=`git-unpack-file $3`
- verify_path "$4" &&
- merge -p "$src1" "$orig" "$src2" > "$4"
+ # We reset the index to the first branch, making
+ # git-diff-file useful
+ git-update-cache --add --cacheinfo "$6" "$2" "$4"
+ git-checkout-cache -u -f -- "$4" &&
+ merge "$4" "$orig" "$src2"
ret=$?
- rm -f -- "$orig" "$src1" "$src2"
+ rm -f -- "$orig" "$src2"
if [ "$6" != "$7" ]; then
echo "ERROR: Permissions conflict: $5->$6,$7."
ret=1
fi
- case "$6" in *7??) mode=+x;; *) mode=-x;; esac
- chmod "$mode" "$4"
if [ $ret -ne 0 ]; then
- # Reset the index to the first branch, making
- # git-diff-file useful
- git-update-cache --add --cacheinfo "$6" "$2" "$4"
echo "ERROR: Merge conflict in $4."
exit 1
fi
- exec git-update-cache --add -- "$4"
+ exec git-update-cache -- "$4"
;;
*)