r3039 - trunk/misc

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu Dec 20 08:02:13 EST 2007


Author: div0
Date: 2007-12-20 08:02:12 -0500 (Thu, 20 Dec 2007)
New Revision: 3039

Added:
   trunk/misc/zipdiff
Log:
add zipdiff script


Added: trunk/misc/zipdiff
===================================================================
--- trunk/misc/zipdiff	                        (rev 0)
+++ trunk/misc/zipdiff	2007-12-20 13:02:12 UTC (rev 3039)
@@ -0,0 +1,121 @@
+#!/bin/sh
+
+usage()
+{
+	cat <<EOF
+Usage:
+  $0 -o difference.zip -f from.zip -t to.zip
+  $0 -f from.zip -t to.zip
+EOF
+	exit 1
+}
+
+output=
+from=
+to=
+
+while [ $# -gt 0 ]; do
+	o=$1
+	shift
+	case "$o" in
+		-o)
+			output=$1
+			shift
+			;;
+		-f)
+			from=$1
+			shift
+			;;
+		-t)
+			to=$1
+			shift
+			;;
+		*)
+			usage
+			;;
+	esac
+done
+
+[ -n "$from" ] || usage
+[ -n "$to" ] || usage
+
+found()
+{
+	type=$1
+	source=$2
+	echo >&2 "$type: $source"
+	case "$type" in
+		new|changed|deleted)
+			echo "$source"
+			;;
+		deleted|*)
+			echo >&2 " * Sorry, can't handle deletion of $source."
+			;;
+	esac
+}
+
+tempdir=`mktemp -d -t zipdiff.XXXXXX`
+
+newline="
+"
+fromlist="$(zipinfo -1 "$from" | grep -v /\$)"
+tolist="$(zipinfo -1 "$to" | grep -v /\$)"
+
+diffit()
+{
+	echo "$fromlist" | while IFS= read -r line; do
+		case "$newline$tolist$newline" in
+			*$newline$line$newline*)
+				;;
+			*)
+				found deleted "$line"
+				;;
+		esac
+	done
+	echo "$tolist" | while IFS= read -r line; do
+		case "$newline$fromlist$newline" in
+			*$newline$line$newline*)
+				# check if equal
+				unzip -p "$from" "$line" > "$tempdir/v1"
+				unzip -p "$to" "$line" > "$tempdir/v2"
+				if ! diff --brief "$tempdir/v1" "$tempdir/v2" >/dev/null 2>&1; then
+					found changed "$line"
+				fi
+				rm "$tempdir/v1"
+				rm "$tempdir/v2"
+				;;
+			*)
+				found new "$line"
+				;;
+		esac
+	done
+}
+
+result=`diffit`
+
+case "$output" in
+	'')
+		;;
+	*)
+		rm -f "$output"
+		echo "$result" | while IFS= read -r line; do
+			echo >&2 "extracting $line..."
+			dline=./$line
+			mkdir -p "$tempdir/${dline%/*}"
+			unzip -p "$to" "$line" > "$tempdir/$line" # this may create an empty file - don't care, DP handles this as deletion
+		done
+		case "$output" in
+			/*)
+				;;
+			*)
+				output=`pwd`/$output
+				;;
+		esac
+		cd "$tempdir"
+		#zip -9r "$output" .
+		7za a -tzip -mx=9 "$output" .
+		cd ..
+		;;
+esac
+
+rm -rf "$tempdir"


Property changes on: trunk/misc/zipdiff
___________________________________________________________________
Name: svn:executable
   + *




More information about the nexuiz-commits mailing list