mirror of
https://gitlab.com/xonotic/xonotic
synced 2024-12-14 19:05:09 +00:00
62 lines
1.5 KiB
Bash
Executable File
62 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -e
|
|
|
|
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="
|
|
Xonotic/data/xonotic-*-data.pk3
|
|
Xonotic/data/xonotic-*-maps.pk3
|
|
Xonotic/data/xonotic-*-music.pk3
|
|
Xonotic/data/xonotic-*-nexcompat.pk3
|
|
Xonotic/data/xonotic-*-data-low.pk3
|
|
Xonotic/data/xonotic-*-maps-low.pk3
|
|
Xonotic/data/xonotic-*-music-low.pk3
|
|
Xonotic/data/font-nimbussansl-*.pk3
|
|
Xonotic/data/font-unifont-*.pk3
|
|
Xonotic/data/font-xolonium-*.pk3
|
|
"
|
|
|
|
makepatchname()
|
|
{
|
|
wildcard=$1
|
|
fromname=$2
|
|
toname=$3
|
|
prefix=${wildcard%%\**}
|
|
suffix=${wildcard#*\*}
|
|
fromversion=${fromname#$prefix}
|
|
fromversion=${fromversion%$suffix}
|
|
toversion=${toname#$prefix}
|
|
toversion=${toversion%$suffix}
|
|
echo "$prefix$fromversion"patch"$toversion$suffix"
|
|
}
|
|
|
|
zipdiff -f "$from" -t "$to" -o "$output" -x "$excludes"
|
|
# or maybe just include ALL not excluded files from $to in $output?
|
|
|
|
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"
|