diff two xonotic release-like builds (untested)

This commit is contained in:
Rudolf Polzer 2012-03-09 16:01:47 +01:00
parent 13db60bfb6
commit 37311e3564
2 changed files with 71 additions and 17 deletions

52
misc/tools/xzipdiff Executable file
View File

@ -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"

View File

@ -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