From: Rudolf Polzer Date: Fri, 9 Mar 2012 15:01:47 +0000 (+0100) Subject: diff two xonotic release-like builds (untested) X-Git-Tag: xonotic-v0.7.0~78 X-Git-Url: https://git.xonotic.org/?a=commitdiff_plain;h=37311e35645dd6c065b7cb3b167b5e5bb99052c3;p=xonotic%2Fxonotic.git diff two xonotic release-like builds (untested) --- diff --git a/misc/tools/xzipdiff b/misc/tools/xzipdiff new file mode 100755 index 00000000..e9734c75 --- /dev/null +++ b/misc/tools/xzipdiff @@ -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" diff --git a/misc/tools/zipdiff b/misc/tools/zipdiff index b51a467a..aa90c771 100755 --- a/misc/tools/zipdiff +++ b/misc/tools/zipdiff @@ -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