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