parent
5c13890e87
commit
919afe94fc
2 changed files with 77 additions and 0 deletions
71
common/xbps-src/shutils/purge_distfiles.sh
Executable file
71
common/xbps-src/shutils/purge_distfiles.sh
Executable file
|
@ -0,0 +1,71 @@
|
||||||
|
# Scan srcpkgs/*/template for hashes and distfiles to determine
|
||||||
|
# obsolete sources/by_sha256 files and their corresponding
|
||||||
|
# sources/<pkgname>-<version> files that can be purged
|
||||||
|
|
||||||
|
|
||||||
|
purge_distfiles() {
|
||||||
|
if [ -z "$XBPS_SRCDISTDIR" ]; then
|
||||||
|
msg_error "The variable \$XBPS_SRCDISTDIR is not set."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
#
|
||||||
|
# Scann all templates for their current distfiles and checksums (hashes)
|
||||||
|
#
|
||||||
|
declare -A my_hashes
|
||||||
|
templates=(srcpkgs/*/template)
|
||||||
|
max=${#templates[@]}
|
||||||
|
cur=0
|
||||||
|
if [ -z "$max" ]; then
|
||||||
|
msg_error "No srcpkgs/*/template files found. Wrong working directory?"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
for template in ${templates[@]}; do
|
||||||
|
pkg="$(echo "$template" | cut -d / -f 2)"
|
||||||
|
if [ ! -L "srcpkgs/$pkg" ]; then
|
||||||
|
unset checksum
|
||||||
|
source $template 2>/dev/null
|
||||||
|
read -a _my_hashes <<< ${checksum}
|
||||||
|
i=0
|
||||||
|
while [ -n "${_my_hashes[$i]}" ]; do
|
||||||
|
hash="${_my_hashes[$i]}"
|
||||||
|
[ -z "${my_hashes[$hash]}" ] && my_hashes[$hash]=$template
|
||||||
|
i=$((i + 1))
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
cur=$((cur + 1))
|
||||||
|
printf "\rScanning templates : %3d%% (%d/%d)" $((100*$cur/$max)) $cur $max
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
echo "Number of hashes : ${#my_hashes[@]}"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Collect inodes of all distfiles in $XBPS_SRCDISTDIR
|
||||||
|
#
|
||||||
|
declare -A inodes
|
||||||
|
distfiles=($XBPS_SRCDISTDIR/*/*)
|
||||||
|
max=${#distfiles[@]}
|
||||||
|
cur=0
|
||||||
|
for distfile in ${distfiles[@]}; do
|
||||||
|
inode=$(stat "$distfile" --printf "%i")
|
||||||
|
if [ -z "${inodes[$inode]}" ]; then
|
||||||
|
inodes[$inode]="$distfile"
|
||||||
|
else
|
||||||
|
inodes[$inode]+="|$distfile"
|
||||||
|
fi
|
||||||
|
cur=$((cur + 1))
|
||||||
|
printf "\rCollecting inodes : %3d%% (%d/%d)" $((100*$cur/$max)) $cur $max
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
|
||||||
|
hashes=($XBPS_SRCDISTDIR/by_sha256/*)
|
||||||
|
readonly HASHLEN=64
|
||||||
|
for file in ${hashes[@]}; do
|
||||||
|
hash_distfile=$(basename "$file")
|
||||||
|
hash=${hash_distfile:0:$HASHLEN}
|
||||||
|
[ -n "${my_hashes[$hash]}" ] && continue
|
||||||
|
inode=$(stat "$file" --printf "%i")
|
||||||
|
echo "Obsolete $hash (inode: $inode)"
|
||||||
|
( IFS="|"; for f in ${inodes[$inode]}; do rm -v "$f"; done )
|
||||||
|
done
|
||||||
|
echo "Done."
|
||||||
|
}
|
6
xbps-src
6
xbps-src
|
@ -58,6 +58,9 @@ remove <pkgname>
|
||||||
remove-autodeps
|
remove-autodeps
|
||||||
Removes all package dependencies that were installed automatically.
|
Removes all package dependencies that were installed automatically.
|
||||||
|
|
||||||
|
purge-distfiles
|
||||||
|
Removes all obsolete distfiles in <hostdir>/sources.
|
||||||
|
|
||||||
show <pkgname>
|
show <pkgname>
|
||||||
Show information for the specified package.
|
Show information for the specified package.
|
||||||
|
|
||||||
|
@ -648,6 +651,9 @@ case "$XBPS_TARGET" in
|
||||||
list)
|
list)
|
||||||
$XBPS_QUERY_CMD -l
|
$XBPS_QUERY_CMD -l
|
||||||
;;
|
;;
|
||||||
|
purge-distfiles)
|
||||||
|
purge_distfiles
|
||||||
|
;;
|
||||||
show)
|
show)
|
||||||
read_pkg
|
read_pkg
|
||||||
show_pkg
|
show_pkg
|
||||||
|
|
Loading…
Reference in a new issue