aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremmett1 <emmett1.2miligrams@protonmail.com>2024-08-27 07:37:06 +0800
committeremmett1 <emmett1.2miligrams@protonmail.com>2024-08-27 07:37:06 +0800
commitb1d6940b07256497792df02b1a93ea09c2008226 (patch)
treeea9084d6df50aaa4131c9878f485b2437d937ec4
parent4bf6e463a6f22e1a58150bf2bb9000af0f5bab55 (diff)
downloadautils-b1d6940b07256497792df02b1a93ea09c2008226.tar.gz
autils-b1d6940b07256497792df02b1a93ea09c2008226.zip
added checksum
-rwxr-xr-xapkg70
1 files changed, 60 insertions, 10 deletions
diff --git a/apkg b/apkg
index 84aaa9c..67a052f 100755
--- a/apkg
+++ b/apkg
@@ -713,6 +713,7 @@ parseopts() {
-a) pkg_allinstalled $2; exit 0;;
-h) apkg_help; exit 0;;
-l) pkg_outdate; exit 0;;
+ -g) updatecsum=1;;
-k) updatefiles=1;;
-f) forcerebuild=1;;
-i) install=1;;
@@ -742,6 +743,7 @@ options:
-f force rebuild
-o <pkg(s)> download source
-p <pkg> print package path
+ -g <pkg> update package checksum
-s <pattern> search packages
-h print this help message
@@ -755,6 +757,46 @@ EOF
exit 0
}
+checksum_src() {
+ if [ ! -s "$checksum_file" ]; then
+ gencsum
+ else
+ printcsum > ${checksum_file}.tmp
+ diff -U 0 ${checksum_file} ${checksum_file}.tmp | \
+ sed '/---/d;/+++/d;/@@/d' | \
+ sed 's/^+/ new : /' | \
+ sed 's/^-/ missing: /' > ${checksum_file}.diff
+ [ -s "${checksum_file}.diff" ] && {
+ cat ${checksum_file}.diff
+ msg "Checksum failed."
+ failed=1
+ }
+ rm -f ${checksum_file}.tmp ${checksum_file}.diff
+ [ "$failed" ] && ret 1
+ fi
+}
+
+gencsum() {
+ rm -f .checksum
+ printcsum > .checksum
+ msg "Checksum file updated."
+}
+
+printcsum() {
+ for i in $source; do
+ i=${i%::noextract}
+ case $i in
+ *::*) sn=${i%::*};;
+ *) sn=${i##*/};;
+ esac
+ case ${i#*::} in
+ */*) f=${APKG_SOURCE_DIR}/$sn;;
+ *) f=${HERE}/$sn;;
+ esac
+ b3sum $f | sed "s,$APKG_SOURCE_DIR/,,;s,$HERE/,,"
+ done | sort -k 2
+}
+
main() {
parseopts $@
set -- $(updateopts $@)
@@ -777,16 +819,6 @@ main() {
exit 0
fi
- if [ "$install" ] && [ -s $SPM_PKGDB/${PWD##*/} ]; then
- msg "Package '${PWD##*/}' already installed."
- exit 0
- fi
-
- if [ "$upgrade" ] && [ ! -s $SPM_PKGDB/${PWD##*/} ]; then
- msg "Package '${PWD##*/}' not installed."
- exit 0
- fi
-
if [ ! -f ./abuild ]; then
msg "'abuild' not found."
exit 1
@@ -802,6 +834,21 @@ main() {
}
packagefile=$APKG_PACKAGE_DIR/$name#$version-$release.spm
+
+ if [ "$install" ] && [ -s $SPM_PKGDB/${PWD##*/} ]; then
+ msg "Package '${PWD##*/}' already installed."
+ exit 0
+ fi
+
+ if [ "$upgrade" ] && [ ! -s $SPM_PKGDB/${PWD##*/} ]; then
+ msg "Package '${PWD##*/}' not installed."
+ exit 0
+ fi
+
+ if [ "$updatecsum" ]; then
+ gencsum
+ exit 0
+ fi
if [ "$downloadonly" ]; then
fetch_src
@@ -826,6 +873,7 @@ main() {
fi
else
fetch_src
+ checksum_src
extract_src
build_src
fi
@@ -866,7 +914,9 @@ APKG_PACKAGE_DIR="$PWD"
APKG_SOURCE_DIR="$PWD"
APKG_WORK_DIR="$PWD"
APKG_LOG_DIR=${APKG_LOG_DIR:-/var/log}
+
log_file="$APKG_LOG_DIR"/"$(basename "$0")_$(date +"%Y%m%d_%T")".log
+checksum_file="$HERE/.checksum"
# source config
if [ -f $APKG_CONF ]; then