[pacman-dev] [patch] makepkg: update checksums (was: add checksums and resume)
Ray Rashif
schivmeister at gmail.com
Sun Oct 11 23:32:01 EDT 2009
This is in reference to http://bugs.archlinux.org/task/15051 and a
somewhat-old
http://mailman.archlinux.org/pipermail/pacman-dev/2008-March/005939.html :)
The initial idea was actually not substantial enough and it also went on to
continue the build, so here is another one updated with Allan's suggestion.
* Do not resume (maybe a separate switch for that..and for another person
another day)
* Consider all supported checksums from buildscript (regardless of user's
config)
* Do not support buildscripts with checksums for more than one architecture
The last one is something I had hoped I wouldn't end up with. It's
technically possible, but visually ugly. Firstly, to override $CARCH one
needs to do something before generate_checksums, and this doesn't appear to
be as trivial as I'd thought. Then, there is simply no way to redirect a
properly-formatted multi-arch checksum output. Echo'ing along with the
function produces a huge number of white spaces (or tabs), though nothing
harmful. Any deeper trick is simply not going to be worth it.
Obviously may not be the best way to do this, so adapt as you like if it's
worth implementing. Against current git.
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 2941a5d..d3d0d61 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -504,7 +504,6 @@ download_sources() {
generate_checksums() {
msg "$(gettext "Generating checksums for source files...")"
- plain ""
if [ ! $(type -p openssl) ]; then
error "$(gettext "Cannot find openssl.")"
@@ -523,6 +522,7 @@ generate_checksums() {
local ct=0
local numsrc=${#source[@]}
+ echo
echo -n "${integ}sums=("
local i=0;
@@ -557,6 +557,45 @@ generate_checksums() {
done
}
+update_checksums() {
+ local file="$startdir/$BUILDSCRIPT"
+ local integ
+
+ # necessary override for --geninteg
+ unset INTEGRITY_CHECK
+
+ for integ in md5 sha1 sha256 sha384 sha512; do
+ grep "${integ}sums=(" $file &> /dev/null && \
+ INTEGRITY_CHECK=(${INTEGRITY_CHECK[@]} $integ)
+ done
+
+ integ=${INTEGRITY_CHECK[0]}
+ if grep "&& ${integ}sums=(" "$file" | grep '$CARCH' &> /dev/null; then
+ error "$(gettext "Multi-arch checksum update not supported. Exiting...")"
+ exit 1
+ else
+ for integ in ${INTEGRITY_CHECK[@]}; do
+ sed -i "/${integ}sums=(/,/)$/d" "$file"
+ done
+
+ if grep "# vim: set" "$file" &> /dev/null; then
+ sed -i '/# vim: set/d' "$file"
+ sed -i -e :a -e '/^\n*$/{$d;N;ba' -e '}' "$file"
+ local vimset=1
+ fi
+
+ generate_checksums >> "$file"
+
+ if [ $vimset -eq 1 ]; then
+ echo >> "$file"
+ echo "# vim: set ts=2 sw=2 et:" >> "$file"
+ fi
+ fi
+
+ msg "$(gettext "Updated checksums in %s")" "$BUILDSCRIPT"
+ return 0
+}
+
check_checksums() {
[ ${#source[@]} -eq 0 ] && return 0
@@ -1431,6 +1470,7 @@ usage() {
echo "$(gettext " -e, --noextract Do not extract source files (use
existing src/ dir)")"
echo "$(gettext " -f, --force Overwrite existing package")"
echo "$(gettext " -g, --geninteg Generate integrity checks for source
files")"
+ printf "$(gettext " -G, --getinteg Update integrity checks in %s")\n"
"$BUILDSCRIPT"
echo "$(gettext " -h, --help This help")"
echo "$(gettext " -i, --install Install package after successful
build")"
echo "$(gettext " -L, --log Log package build process")"
@@ -1477,9 +1517,9 @@ fi
ARGLIST=$@
# Parse Command Line Options.
-OPT_SHORT="AcCdefFghiLmop:rRsV"
+OPT_SHORT="AcCdefFgGhiLmop:rRsV"
OPT_LONG="allsource,asroot,ignorearch,clean,cleancache,nodeps"
-OPT_LONG="$OPT_LONG,noextract,force,forcever:,geninteg,help,holdver"
+OPT_LONG="$OPT_LONG,noextract,force,forcever:,geninteg,getinteg,help,holdver"
OPT_LONG="$OPT_LONG,install,log,nocolor,nobuild,rmdeps,repackage,skipinteg"
OPT_LONG="$OPT_LONG,source,syncdeps,version,config:"
# Pacman Options
@@ -1512,6 +1552,7 @@ while true; do
--forcever) shift; FORCE_VER=$1;;
-F) INFAKEROOT=1 ;;
-g|--geninteg) GENINTEG=1 ;;
+ -G| --getinteg) GETINTEG=1 ;;
--holdver) HOLDVER=1 ;;
-i|--install) INSTALL=1 ;;
-L|--log) LOGGING=1 ;;
@@ -1680,6 +1721,15 @@ if [ "$GENINTEG" -eq 1 ]; then
exit 0 # $E_OK
fi
+if [ "$GETINTEG" -eq 1 ]; then
+ mkdir -p "$srcdir"
+ cd "$srcdir"
+ download_sources
+ update_checksums
+ cd "$startdir"
+ exit 0
+fi
+
if [ "$(type -t package)" = "function" ]; then
PKGFUNC=1
fi
More information about the pacman-dev
mailing list