cookutils rev 952
cook: do not replace package in $PKGS if release checksum has not changed -> mirror package will not change if nothing was changed after rebuilding.
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Sat Jul 29 14:50:36 2017 +0300 (2017-07-29) |
parents | 4e8c86306ce2 |
children | 160d8c595c75 |
files | cook |
line diff
1.1 --- a/cook Thu Jul 27 13:36:30 2017 +0300 1.2 +++ b/cook Sat Jul 29 14:50:36 2017 +0300 1.3 @@ -1044,6 +1044,33 @@ 1.4 } 1.5 1.6 1.7 +# Calculate release checksum: usually it does not change on "just recook". 1.8 +# Release checksum is md5sum of file containing md5sums of: 1.9 +# a) all files, b) receipt, and c) description.txt. 1.10 +# Md5sum of the package file will change every time because of embedded timestamps; 1.11 +# release checksum based only on files content, and will change only when files change. 1.12 +# (Pitfall: ownership and permissions...) 1.13 + 1.14 +release_checksum() { 1.15 + local pack=$1 1.16 + local rsum_file=$(mktemp) 1.17 + 1.18 + cp $pack/md5sum $rsum_file 1.19 + md5sum $pack/receipt | sed 's| [^ ]*/| |' >> $rsum_file 1.20 + [ -e "$pack/description.txt" ] && 1.21 + md5sum $pack/description.txt | sed 's| [^ ]*/| |' >> $rsum_file 1.22 + 1.23 + local rsum=$(md5sum $rsum_file | awk '{print $1}') 1.24 + rm $rsum_file 1.25 + local rsumold=$(awk -F$'\t' -vpkg="$PACKAGE" ' 1.26 + {if ($1 == pkg) { print $9; exit; }}' $PKGS/packages.info) 1.27 + 1.28 + [ "$rsum" == "$rsumold" ] && rsum='' 1.29 + 1.30 + echo $rsum 1.31 +} 1.32 + 1.33 + 1.34 # Verify package quality and consistency. 1.35 1.36 packit_quality() { 1.37 @@ -1060,29 +1087,28 @@ 1.38 fi 1.39 1.40 action 'QA: checking for empty package...' 1.41 - files=$(wc -l < $WOK/$pkg/taz/$PACKAGE-$VERSION$EXTRAVERSION/files.list) 1.42 - if [ "$files" -eq 0 -a "$CATEGORY" != 'meta' ]; then 1.43 + if [ ! -s "$pack/files.list" -a "$CATEGORY" != 'meta' ]; then 1.44 broken 1.45 rm -f $command 1.46 die 'ERROR: empty package' 1.47 fi 1.48 1.49 :; status 1.50 - # Find and remove old package(s) 1.51 - tempd="$(mktemp -d)"; cd "$tempd" 1.52 - for testpkg in $(ls $PKGS/$PACKAGE-*.tazpkg 2>/dev/null); do 1.53 - # Extract receipt from each matched package 1.54 - cpio -F "$testpkg" -i receipt >/dev/null 2>&1 1.55 - name=$(. ./receipt; echo $PACKAGE) 1.56 - rm receipt 1.57 - if [ "$name" == "$PACKAGE" ]; then 1.58 - action 'Removing old package "%s"' "$(basename "$testpkg")" 1.59 - rm -f "$testpkg" 1.60 + 1.61 + # Find and remove old package(s) only if "release checksum" has changed 1.62 + rsum=$(release_checksum $pack) 1.63 + if [ -n "$rsum" ]; then 1.64 + old_file=$(awk -F$'\t' -vname="$PACKAGE" '{ 1.65 + if ($1 == name) printf("%s-%s.tazpkg", $1, $2); 1.66 + }' $PKGS/packages.info) 1.67 + if [ -f "$PKGS/$old_file" ]; then 1.68 + action 'Removing old package "%s"' "$old_file" 1.69 + rm -f "$PKGS/$old_file" 1.70 status 1.71 fi 1.72 - done 1.73 - rm -r "$tempd" 1.74 - mv -f $pkgdir/taz/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg $PKGS 1.75 + mv -f $pkgdir/taz/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg $PKGS 1.76 + fi 1.77 + 1.78 sed -i "/^${pkg}$/d" $broken 1.79 #action 'Removing source tree...' 1.80 #rm -f $WOK/$pkg/source; status 1.81 @@ -1425,37 +1451,23 @@ 1.82 1.83 DEPENDS=$(echo $DEPENDS) # remove newlines, tabs and multiple spaces from variable 1.84 1.85 - # Calculate release checksum: usually it does not change on "just recook". 1.86 - # Release checksum is md5sum of file containing md5sums of: 1.87 - # a) all files, b) receipt, and c) description.txt. 1.88 - # Md5sum of the package file will change every time because of embedded timestamps; 1.89 - # release checksum based only on files content, and will change only when files change. 1.90 - # (Pitfall: ownership and permissions...) 1.91 - rsumf=$(mktemp) 1.92 - cp $pack/md5sum $rsumf 1.93 - md5sum $pack/receipt | sed 's| [^ ]*/| |' >> $rsumf 1.94 - [ -e "$pack/description.txt" ] && md5sum $pack/description.txt | sed 's| [^ ]*/| |' >> $rsumf 1.95 - rsum=$(md5sum $rsumf | awk '{print $1}') 1.96 - rm $rsumf 1.97 -# MD5="$(md5sum "$PKGS/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg" | awk '{print $1}')" 1.98 - rsumold=$(awk -F$'\t' -vpkg="$PACKAGE" '{if ($1 == pkg) { print $9; exit; }}' $pi) 1.99 + rsum=$(release_checksum $pack) 1.100 + if [ -n "$rsum" ]; then 1.101 + _ 'The release checksum has changed.\n' 1.102 1.103 - if [ "$rsum" == "$rsumold" ]; then 1.104 - _ 'The release checksum has not changed.\n' 1.105 - else 1.106 - _ 'The release checksum has changed.\n' 1.107 - fi 1.108 - 1.109 - sed -i "/^$PACKAGE\t/d" $pi # remove old entry 1.110 - cat >> $pi <<EOT 1.111 + sed -i "/^$PACKAGE\t/d" $pi # remove old entry 1.112 + cat >> $pi <<EOT 1.113 $PACKAGE $VERSION$EXTRAVERSION $CATEGORY $SHORT_DESC $WEB_SITE $TAGS $SIZES $DEPENDS $rsum $PROVIDE 1.114 EOT 1.115 1.116 - # files.list (uncompressed, unsorted, located in $cache) 1.117 - local fl="$cache/files.list" 1.118 - touch $fl 1.119 - sed -i "/^$PACKAGE: /d" $fl 1.120 - sed "s/^/$PACKAGE: \0/" $pack/files.list >> $fl 1.121 + # files.list (uncompressed, unsorted, located in $cache) 1.122 + local fl="$cache/files.list" 1.123 + touch $fl 1.124 + sed -i "/^$PACKAGE: /d" $fl 1.125 + sed "s/^/$PACKAGE: \0/" $pack/files.list >> $fl 1.126 + else 1.127 + _ 'The release checksum has not changed.\n' 1.128 + fi 1.129 } 1.130 1.131