7fa76eeb75
When git-apply-patch-script creates a new file without executable mode set, a typo caused it not to report that activity to the user. Also it was mistakenly running git-update-cache twice for newly created or deleted paths. This patch fixes these problems. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
59 lines
1.3 KiB
Bash
59 lines
1.3 KiB
Bash
#!/bin/sh
|
|
# Copyright (C) 2005 Junio C Hamano
|
|
#
|
|
# Applying diff between two trees to the work tree can be
|
|
# done with the following single command:
|
|
#
|
|
# GIT_EXTERNAL_DIFF=git-apply-patch-script git-diff-tree -p $tree1 $tree2
|
|
#
|
|
|
|
case "$#" in
|
|
2) exit 1 ;; # do not feed unmerged diff to me!
|
|
esac
|
|
name="$1" tmp1="$2" hex1="$3" mode1="$4" tmp2="$5" hex2="$6" mode2="$7"
|
|
case "$mode1" in *7??) mode1=+x ;; *6??) mode1=-x ;; esac
|
|
case "$mode2" in *7??) mode2=+x ;; *6??) mode2=-x ;; esac
|
|
|
|
if test -f "$name.orig" || test -f "$name.rej"
|
|
then
|
|
echo >&2 "Unresolved patch conflicts in the previous run found."
|
|
exit 1
|
|
fi
|
|
# This will say "patching ..." so we do not say anything outselves.
|
|
|
|
diff -u -L "a/$name" -L "b/$name" "$tmp1" "$tmp2" | patch -p1
|
|
test -f "$name.rej" || {
|
|
case "$mode1,$mode2" in
|
|
.,?x)
|
|
# newly created
|
|
case "$mode2" in
|
|
+x)
|
|
echo >&2 "created $name with mode +x."
|
|
chmod "$mode2" "$name"
|
|
;;
|
|
-x)
|
|
echo >&2 "created $name."
|
|
;;
|
|
esac
|
|
git-update-cache --add -- "$name"
|
|
;;
|
|
?x,.)
|
|
# deleted
|
|
echo >&2 "deleted $name."
|
|
rm -f "$name"
|
|
git-update-cache --remove -- "$name"
|
|
;;
|
|
*)
|
|
# changed
|
|
case "$mode1,$mode2" in
|
|
"$mode2,$mode1") ;;
|
|
*)
|
|
echo >&2 "changing mode from $mode1 to $mode2."
|
|
chmod "$mode2" "$name"
|
|
;;
|
|
esac
|
|
git-update-cache -- "$name"
|
|
esac
|
|
}
|
|
exit 0
|