Hi,
The egrep regex should not escape the '{' and '}', and also add a check
for ' \t' so that we do not pickup stuff like '+----', etc. Fix typo in
assignment. Check if file exists in new tree before adding/removing
(might add support for this lowlevel to increase speed?). Fix typo in
line removing temp files.
Signed-off-by: Martin Schlemmer <[EMAIL PROTECTED]>
gitapply.sh: 47b9346d2679b1bf34220fe4502f15c7d0737b0c
--- 47b9346d2679b1bf34220fe4502f15c7d0737b0c/gitapply.sh
+++ uncommitted/gitapply.sh
@@ -19,15 +19,22 @@
# just handle it all ourselves.
patch -p1 -N <$patchfifo &
-tee $patchfifo | egrep '^[+-]\{3\}' | {
+exits_in_cache() {
+ for x in $(ls-tree "$1"); do
+ [ "$x" = "$2" ] && return 0
+ done
+ return 1
+}
+
+tee $patchfifo | egrep '^[+-]{3}[ \t]' | {
victim=
origmode=
while read sign file attrs; do
- echo $sign $file $attrs ... >&2
+# echo $sign $file $attrs ... >&2
case $sign in
"---")
- victim=file
+ victim=$file
mode=$(echo $attrs | sed
's/.*mode:[0-7]*\([0-7]\{3\}\).*/\1/')
origmode=
[ "$mode" != "$attrs" ] && origmode=$mode
@@ -35,14 +42,19 @@
"+++")
if [ "$file" = "/dev/null" ]; then
torm=$(echo "$victim" | sed 's/[^\/]*\///') #-p1
- echo -ne "rm\0$torm\0"
+ tree=$(echo $attrs | sed
's/.*tree:\([0-9a-f]\{40\}\).*/\1/')
+ exits_in_cache "$tree" "$torm" && echo -ne
"rm\0$torm\0"
continue
elif [ "$victim" = "/dev/null" ]; then
- echo -ne "add\0$file\0"
+ toadd=$(echo "$file" | sed 's/[^\/]*\///') #-p1
+ tree=$(echo "$file" | sed -e
's/\([^\/]*\)\/.*/\1/')
+ exits_in_cache "$tree" "$toadd" || echo -ne
"add\0$toadd\0"
fi
mode=$(echo $attrs | sed
's/.*mode:[0-7]*\([0-7]\{3\}\).*/\1/')
if [ "$mode" ] && [ "$mode" != "$attrs" ] && [
"$origmode" != "$mode" ]; then
- echo -ne "cm\0$mode\0$file\0"
+ tochmod=$(echo "$file" | sed 's/[^\/]*\///')
#-p1
+ # need a space else numbers gets converted
+ echo -ne "cm\0 $mode\0$tochmod\0"
fi
;;
*)
@@ -74,4 +86,4 @@
done
' padding
-rm $pathfifo $todo $gonefile
+rm $patchfifo $todo $gonefile
--
Martin Schlemmer
gitapply.sh: 47b9346d2679b1bf34220fe4502f15c7d0737b0c
--- 47b9346d2679b1bf34220fe4502f15c7d0737b0c/gitapply.sh
+++ uncommitted/gitapply.sh
@@ -19,15 +19,22 @@
# just handle it all ourselves.
patch -p1 -N <$patchfifo &
-tee $patchfifo | egrep '^[+-]\{3\}' | {
+exits_in_cache() {
+ for x in $(ls-tree "$1"); do
+ [ "$x" = "$2" ] && return 0
+ done
+ return 1
+}
+
+tee $patchfifo | egrep '^[+-]{3}[ \t]' | {
victim=
origmode=
while read sign file attrs; do
- echo $sign $file $attrs ... >&2
+# echo $sign $file $attrs ... >&2
case $sign in
"---")
- victim=file
+ victim=$file
mode=$(echo $attrs | sed 's/.*mode:[0-7]*\([0-7]\{3\}\).*/\1/')
origmode=
[ "$mode" != "$attrs" ] && origmode=$mode
@@ -35,14 +42,19 @@
"+++")
if [ "$file" = "/dev/null" ]; then
torm=$(echo "$victim" | sed 's/[^\/]*\///') #-p1
- echo -ne "rm\0$torm\0"
+ tree=$(echo $attrs | sed 's/.*tree:\([0-9a-f]\{40\}\).*/\1/')
+ exits_in_cache "$tree" "$torm" && echo -ne "rm\0$torm\0"
continue
elif [ "$victim" = "/dev/null" ]; then
- echo -ne "add\0$file\0"
+ toadd=$(echo "$file" | sed 's/[^\/]*\///') #-p1
+ tree=$(echo "$file" | sed -e 's/\([^\/]*\)\/.*/\1/')
+ exits_in_cache "$tree" "$toadd" || echo -ne "add\0$toadd\0"
fi
mode=$(echo $attrs | sed 's/.*mode:[0-7]*\([0-7]\{3\}\).*/\1/')
if [ "$mode" ] && [ "$mode" != "$attrs" ] && [ "$origmode" != "$mode" ]; then
- echo -ne "cm\0$mode\0$file\0"
+ tochmod=$(echo "$file" | sed 's/[^\/]*\///') #-p1
+ # need a space else numbers gets converted
+ echo -ne "cm\0 $mode\0$tochmod\0"
fi
;;
*)
@@ -74,4 +86,4 @@
done
' padding
-rm $pathfifo $todo $gonefile
+rm $patchfifo $todo $gonefile
signature.asc
Description: This is a digitally signed message part

