#!/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