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

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to