forked from kiss-community/kiss
kiss: split sha256 into two functions
- Installation/removal needs the filtering, other parts of the package manager do not (so they can now use the bare function). - Changed method of output transformation to something simpler.
This commit is contained in:
parent
60fbd39d73
commit
cf9e663c76
50
kiss
50
kiss
@ -194,6 +194,17 @@ decompress() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sh256() {
|
sh256() {
|
||||||
|
# Higher level sh256 function which filters out non-existent
|
||||||
|
# files (and also directories).
|
||||||
|
for f do shift
|
||||||
|
[ -d "$f" ] || [ ! -e "$f" ] || set -- "$@" "$f"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Only call _sh256 if we have files to operate on.
|
||||||
|
for f do _sh256 "$@"; return 0; done
|
||||||
|
}
|
||||||
|
|
||||||
|
_sh256() {
|
||||||
# There's no standard utility to generate sha256 checksums.
|
# There's no standard utility to generate sha256 checksums.
|
||||||
# This is a simple wrapper around sha256sum, sha256, shasum,
|
# This is a simple wrapper around sha256sum, sha256, shasum,
|
||||||
# openssl, digest, ... which will use whatever is available.
|
# openssl, digest, ... which will use whatever is available.
|
||||||
@ -201,13 +212,7 @@ sh256() {
|
|||||||
# All utilities must match 'sha256sum' output.
|
# All utilities must match 'sha256sum' output.
|
||||||
#
|
#
|
||||||
# Example: '<checksum> <file>'
|
# Example: '<checksum> <file>'
|
||||||
|
unset hash
|
||||||
# Filter out directories and anything which does not exist.
|
|
||||||
for f do shift
|
|
||||||
[ -d "$f" ] || [ ! -e "$f" ] || set -- "$@" "$f"
|
|
||||||
done
|
|
||||||
|
|
||||||
! equ "$#" 0 || return 0
|
|
||||||
|
|
||||||
# Set the arguments based on found sha256 utility.
|
# Set the arguments based on found sha256 utility.
|
||||||
case ${cmd_sha##*/} in
|
case ${cmd_sha##*/} in
|
||||||
@ -217,26 +222,19 @@ sh256() {
|
|||||||
digest) set -- -a sha256 "$@" ;;
|
digest) set -- -a sha256 "$@" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# This is now one call to the checksums command rather than
|
IFS=$newline
|
||||||
# one per file. We also display errors now rather than not
|
|
||||||
# (due to old runtime detection method).
|
|
||||||
hash=$("$cmd_sha" "$@") || die "Failed to generate checksums"
|
|
||||||
|
|
||||||
# Intentional, globbing disabled.
|
# Generate checksums for all input files. This is a single
|
||||||
# shellcheck disable=2046,2086
|
# call to the utility rather than one per file.
|
||||||
set -- $hash
|
_hash=$("$cmd_sha" "$@") || die "Failed to generate checksums"
|
||||||
|
|
||||||
# As the output is '<hash> <file>' and the above list is
|
# Strip the filename from each element.
|
||||||
# split on whitespace; we need to pop every 2nd element.
|
# '<checksum> ?<file>' -> '<checksum>'
|
||||||
for sum do case ${_i:-0} in
|
for sum in $_hash; do
|
||||||
0) _i=1; set -- "$@" "$sum" ;;
|
hash=$hash${hash:+"$newline"}${sum%% *}
|
||||||
1) _i=0
|
done
|
||||||
esac; shift; done
|
|
||||||
|
|
||||||
printf '%s\n' "$@"
|
printf '%s\n' "$hash"
|
||||||
|
|
||||||
# Convert the list items to a newline separated string.
|
|
||||||
IFS=$newline hash=$*
|
|
||||||
unset IFS
|
unset IFS
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -808,7 +806,7 @@ pkg_etcsums() {
|
|||||||
set -- "$pkg_dir/$repo_name/$etc" "$@"
|
set -- "$pkg_dir/$repo_name/$etc" "$@"
|
||||||
esac done < manifest
|
esac done < manifest
|
||||||
|
|
||||||
sh256 "$@" > etcsums
|
_sh256 "$@" > etcsums
|
||||||
}
|
}
|
||||||
|
|
||||||
pkg_tar() {
|
pkg_tar() {
|
||||||
@ -1021,7 +1019,7 @@ pkg_checksums() {
|
|||||||
esac
|
esac
|
||||||
done < "$repo_dir/sources"
|
done < "$repo_dir/sources"
|
||||||
|
|
||||||
sh256 "$@"
|
_sh256 "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
pkg_verify() {
|
pkg_verify() {
|
||||||
|
Loading…
Reference in New Issue
Block a user