t2sde/scripts/Create-PkgUpdPatch
2023-07-14 21:12:48 +00:00

96 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# --- T2-COPYRIGHT-NOTE-BEGIN ---
# T2 SDE: scripts/Create-PkgUpdPatch
# Copyright (C) 2004 - 2023 The T2 SDE Project
#
# This Copyright note is generated by scripts/Create-CopyPatch,
# more information can be found in the files COPYING and README.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2.
# --- T2-COPYRIGHT-NOTE-END ---
pkg="$1"; shift
ver="$1"; shift
if [ -z "$ver" ]; then
ver=${pkg/*-/}
pkg=${pkg%-$ver}
fi
if [ -z "$pkg" -o -z "$ver" ]; then
echo "Usage: $0 pkg ver"
echo " or: $0 pkg-ver"
exit
fi
pkg=`echo $pkg | tr A-Z a-z`
echo "[ $pkg ]" >&2
pkgdir=`echo package/*/$pkg`
if [ ! -d "$pkgdir" ]; then
echo "Can't find package for '$x'!" >&2
else
oldver="`egrep "^\[(V|VER|VERSION)\] " $pkgdir/$pkg.desc |
sed 's, ,\t,g; s,\t\t*,\t,g' | cut -f2`"
tmpfile=`mktemp` tmpfile2=`mktemp`
echo "Update patch for $pkg ($pkgdir): $oldver -> $ver"
# [V]
expression="-e 's@^\[\(V\|VER\|VERSION\)\].*@[\1] $ver@'"
# file at [D]
expression="$expression -e '/^\[\(D\|DOWN\|DOWNLOAD\)\]/ s@${oldver//./\\.}@$ver@g;'"
# detect download location structure
sed -n -e 's,^\[\(D\|DOWN\|DOWNLOAD\)\].*[ \t]\([^ \t]*\)[ \t]*$,\2,p' $pkgdir/$pkg.desc > $tmpfile
oldver2=${oldver%.*}
ver2=${ver%.*}
[ "$oldver2" == "$oldver" -o "$ver2" == "$ver" ] && oldver2= ver2=
if grep -q "/$oldver/$" $tmpfile; then
# $ver -> /$ver/
oldver="${oldver//./\\.}"
expression="$expression -e '/^\[\(D\|DOWN\|DOWNLOAD\)\]/ s@/$oldver/[^ \t]*\$@/$ver/@g;'"
elif [ "$oldver" != "${oldver//-/}" ] && grep -q "/${oldver//-/}/\$" $tmpfile; then
# $ver-$extra -> /$ver/
oldver="${oldver%%-*}" oldver="${oldver//./\\.}"
ver="${ver%%-*}"
expression="$expression -e '/^\[\(D\|DOWN\|DOWNLOAD\)\]/ s@/$oldver/[^ \t]*\$@/$ver/@g;'"
else
# $ver.$extra -> /$ver/
oldver="${oldver%%-*}"
ver="${ver%%-*}"
oldauxver=
auxver=
pattern="[^\.]*"
while [ "${oldver#$oldauxver}" ]; do
eval $(echo "$oldver $ver" | sed -e "s,\($pattern\).* \($pattern\).*,oldauxver='\1' auxver='\2',")
if grep -q "/$oldauxver/\$" $tmpfile; then
oldver="${oldauxver%%-*}" oldauxver="${oldauxver//./\\.}"
ver="${auxver%%-*}"
expression="$expression -e '/^\[\(D\|DOWN\|DOWNLOAD\)\]/ s@/$oldver/[^ \t]*\$@/$ver/@g;'"
break
fi
pattern="$pattern\.\?[^\.]*"
done
fi
# leading short, major version directory, too
if [ "$oldver2" ]; then
oldver2="${oldver2//./\\.}"
expression="$expression -e '/^\[\(D\|DOWN\|DOWNLOAD\)\]/ s@/$oldver2/@/$ver2/@g;'"
fi
# checksum at [D]
expression="$expression -e 's,^\[\(D\|DOWN\|DOWNLOAD\)\] [^ ]\+,[\1] 0,'"
eval "sed $expression $pkgdir/$pkg.desc" > $tmpfile
diff -u ./$pkgdir/$pkg.desc $tmpfile | tee $tmpfile2
[ -s $tmpfile2 ] || echo "Patch for '$x' is empty!" >&2
rm -f $tmpfile $tmpfile2
fi
echo