]> git.xonotic.org Git - xonotic/xonotic.git/commitdiff
diff two xonotic release-like builds (untested)
authorRudolf Polzer <divverent@xonotic.org>
Fri, 9 Mar 2012 15:01:47 +0000 (16:01 +0100)
committerRudolf Polzer <divverent@xonotic.org>
Fri, 9 Mar 2012 15:01:47 +0000 (16:01 +0100)
misc/tools/xzipdiff [new file with mode: 0755]
misc/tools/zipdiff

diff --git a/misc/tools/xzipdiff b/misc/tools/xzipdiff
new file mode 100755 (executable)
index 0000000..e9734c7
--- /dev/null
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+from=$1
+to=$2
+output=$3
+case "$from" in /*) ;; *) from=`pwd`/$from ;; esac
+case "$to" in /*) ;; *) to=`pwd`/$to ;; esac
+case "$output" in /*) ;; *) output=`pwd`/$output ;; esac
+
+excludes="
+       data/xonotic-*-data.pk3
+       data/xonotic-*-maps.pk3
+       data/xonotic-*-music.pk3
+       data/xonotic-*-nexcompat.pk3
+"
+
+makepatchname()
+{
+       wildcard=$1
+       fromname=$2
+       toname=$3
+       prefix=${wildcard##*\*}
+       suffix=${wildcard%\**}
+       fromversion=${fromname#$prefix}
+       fromversion=${fromversion%$suffix}
+       toversion=${fromname#$prefix}
+       toversion=${fromversion%$suffix}
+       echo "$prefix$fromversion"patch"$toversion$suffix"
+}
+
+zipdiff -f "$from" -t "$to" -o "$output" -x "$excludes"
+
+tempdir=`mktemp -d -t zipdiff.XXXXXX`
+cd "$tempdir"
+
+for x in $excludes; do
+       mkdir a b c
+       (cd a && unzip "$from" "$x")
+       fromname=`find a/ -type f`; fromname=${fromname#a/}
+       (cd b && unzip "$to" "$x")
+       toname=`find b/ -type f`; toname=${toname#b/}
+       patchname=`makepatchname "$x" "$fromname" "$toname"`
+       patchdir="c/$patchname"; patchdir=${patchdir%/*}
+       mkdir -p "$patchdir"
+       zipdiff -f a/"$fromname" -t b/"$toname" -o c/"$patchname"
+       if [ -f c/"$patchname" ]; then
+               (cd c && zip -0r "$output" "$patchname")
+       fi
+       rm -rf a b c
+done
+
+rm -rf "$tempdir"
index b51a467a3ffacd6eb4fe67e5826ed9a0c29efe19..aa90c771e6d8ee2b0151e61da4a01104238db708 100755 (executable)
@@ -148,23 +148,25 @@ 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 ..
+               if [ -n "$result" ]; then
+                       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 ..
+               fi
                ;;
 esac