cookutils rev 1129
cook: patchit(): allow external patches and patches checksum
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Fri Jan 04 17:23:46 2019 +0200 (2019-01-04) |
parents | 8cf66e7d3c64 |
children | b6def327b90a |
files | cook |
line diff
1.1 --- a/cook Wed Jan 02 18:55:20 2019 +0200 1.2 +++ b/cook Fri Jan 04 17:23:46 2019 +0200 1.3 @@ -528,21 +528,59 @@ 1.4 1.5 patchit() { 1.6 [ -f "$stuff/patches/series" ] || return 1.7 + # Empty lines and comments (started with "#") are ignored 1.8 + # Up to three fields (no spaces inside allowed) separated by "|": 1.9 + # 1. patch options like "-p0" (optional); 1.10 + # 2. patch file name or URL (mandatory); 1.11 + # 3. patch checksum in form "sha1=..." or other *sum (optional). 1.12 1.13 - local done="$pkgdir/.patch.done" 1.14 + local done="$pkgdir/.patch.done" var1 var2 var3 1.15 + local patchname patchopts patchfile patchsum patchsum_type patchsum_sum 1.16 IFS=$'\n' 1.17 while read i; do 1.18 patchname=$(echo ${i%%#*} | cut -d' ' -f1) # allow comments (anything after the # or space) 1.19 - case $patchname in # allow patch options in form <options_no_spaces>|<file_name> 1.20 - *\|*) patchopts="${patchname%|*}"; patchname="${patchname#*|}";; 1.21 - *) patchopts='-Np1';; 1.22 + [ -n "$patchname" ] || continue # skip empty lines 1.23 + 1.24 + var1=$(echo "$patchname||" | cut -d'|' -f1) # options or name 1.25 + var2=$(echo "$patchname||" | cut -d'|' -f2) # name or checksum or empty 1.26 + var3=$(echo "$patchname||" | cut -d'|' -f3) # checksum or empty 1.27 + 1.28 + if [ -n "$var3" ]; then 1.29 + patchopts="$var1"; patchname="$var2"; patchsum="$var3" 1.30 + elif [ -n "$var2" ]; then 1.31 + case $var2 in 1.32 + *=*) patchopts='-Np1'; patchname="$var1"; patchsum="$var2";; 1.33 + *) patchopts="$var1"; patchname="$var2"; patchsum='';; 1.34 + esac 1.35 + else 1.36 + patchopts='-Np1'; patchname="$var1"; patchsum='' 1.37 + fi 1.38 + 1.39 + case $patchname in 1.40 + ftp://*|http://*|https://*) 1.41 + patchfile="$SRC/$(basename $patchname)" 1.42 + [ -e "$patchfile" ] || wget -q -T 60 -O $patchfile $patchname || 1.43 + die 'ERROR: %s' "can't get $patchname" 1.44 + ;; 1.45 + *) 1.46 + patchfile="$stuff/patches/$patchname" 1.47 + ;; 1.48 esac 1.49 - [ -n "$patchname" ] || continue # allow empty lines 1.50 + 1.51 + if [ -n "$patchsum" ]; then 1.52 + patchsum_type=${patchsum%=*} 1.53 + patchsum_sum=${patchsum#*=} 1.54 + echo "$patchsum_sum $patchfile" | ${patchsum_type}sum -cs || 1.55 + die 'ERROR: %s' "wrong ${patchsum_type}sum for $patchfile" 1.56 + fi 1.57 + 1.58 touch $done 1.59 grep -q "^${patchname}$" $done && continue # already applied (useful with `cook --continue`) 1.60 + 1.61 newline 1.62 _ 'Applying patch %s' "$patchname" 1.63 - patch $patchopts -i $stuff/patches/$patchname | sed 's|^| |' 1.64 + patch $patchopts -i $patchfile | sed 's|^| |' 1.65 + 1.66 echo $patchname >> $done 1.67 done < $stuff/patches/series 1.68 newline 1.69 @@ -1384,7 +1422,8 @@ 1.70 # cook <package> --getsrc 1.71 # cook <package> -gs 1.72 [ -n "$getsrc" -o "$2" == '-gs' ] && { 1.73 - title 'Getting source for "%s"' "$1" 1.74 + pkg="$1" 1.75 + title 'Getting source for "%s"' "$pkg" 1.76 receipt="$WOK/$pkg/receipt" 1.77 check_pkg_in_wok 1.78 unset_receipt