#!/usr/bin/env bash # # --- T2-COPYRIGHT-NOTE-BEGIN --- # T2 SDE: scripts/Create-CkSumPatch # Copyright (C) 2004 - 2023 The T2 SDE Project # Copyright (C) 1998 - 2003 ROCK Linux 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 --- . scripts/functions.in override=0 files='' usage() { echo "Usage:" echo "scripts/Create-CkSumPatch [options] " echo "scripts/Create-CkSumPatch [options] " echo "scripts/Create-CkSumPatch [options] " echo " " echo "Options:" echo " -override Create new cksum if old one should be valid." echo " -help This." } while [ "$1" ]; do case "$1" in -override) override=1; shift ;; -repository) files="$files `echo package/$2/*/*.desc`"; shift; shift ;; -*|-help) usage; exit ;; *.desc|target/*) files="$files $1"; shift ;; *) files="$files `echo package/*/$1/$1.desc`"; shift ;; esac done # cksum_file path-to-desc-or-target-file cksum_file() { case "$1" in target/*) has_D='cat' sedscript='s,^[^ ]* *$file,$newcksum $file,' ;; *.desc) has_D='fgrep "[D]" | sed "s/[[]D[^ ]*//"' sedscript='s@\[D\] *[^ ]* *$file@[D] $newcksum $file@' ;; *) echo "!!! File type not recognized" >&2 return -1 esac if [ ! -f "$1" ]; then echo "!!! File not found: $1" >&2 return -1 fi cp $1 /tmp/$$ eval "egrep -v '^#' $1 | $has_D" | while read cksum file url args; do [ "$cksum" = 'X' ] && continue [ "$cksum" != '0' -a "$override" = '0' ] && continue gzfile=`source_file cksum $file $url $flags` if [ ! -f "$gzfile" ]; then echo "!!! File not present: $gzfile" >&2 continue fi local ck="sha224" local cksum2=${ck}sum if ! type -p $cksum2 > /dev/null; then cksum2=${cksum2#sha} cksum2=${cksum2%sum} cksum2="shasum -a $cksum2" fi local compressor="$(get_compressor "$gzfile")" if [ "$compressor" ]; then echo -n "$gzfile (${compressor%% *}): " >&2 newcksum="`$compressor < $gzfile | $cksum2 | cut -f1 -d' '`" else echo -n "$gzfile (raw): " >&2 newcksum="`$cksum2 $gzfile | cut -f1 -d' '`" fi newcksum="$newcksum" # also support explict {$ck} echo "$newcksum" >&2 if [ "$cksum" != 0 -a "$cksum" != "$newcksum" ]; then echo "!!! Checksum of $file changed (was $cksum)." >&2 fi eval "sed \"$sedscript\" -i /tmp/$$" done diff -u ./$1 /tmp/$$ rm -f /tmp/$$ } echo "Creating cksum.patch ..." >&2 for f in $files; do cksum_file $f done