88 lines
1.8 KiB
Bash
Executable File
88 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# checkportstree
|
|
#
|
|
# v2.0 jue 2008-10-27
|
|
#
|
|
# Simple script to find duplicate, missing, orphaned and outdated
|
|
# packages.
|
|
# We collect the package-names in a temporary file, find dups from
|
|
# here with 'uniq -d' and dups/orphaned packages by comparing our
|
|
# list with packages.all. Outdated packages are found by sourcing
|
|
# the Pkfile and comparing $version-$release with the one found
|
|
# in the package-name.
|
|
|
|
|
|
print_result() {
|
|
printf "* %s: " $1
|
|
printf "%s " $2
|
|
printf "\n"
|
|
}
|
|
|
|
setup() {
|
|
if [ ! -f $ALL_PKGS ]; then
|
|
echo "File $ALL_PKGS missing, run 'make packages.all' to create"
|
|
exit 1
|
|
fi
|
|
PKGS_D=$(mktemp)
|
|
PKGS_U=$(mktemp)
|
|
echo "Check for duplicate, missing, orphaned and outdated packages..."
|
|
}
|
|
|
|
clean() {
|
|
rm $PKGS_D $PKGS_U
|
|
}
|
|
|
|
find_packages() {
|
|
find $PORTS_DIR -name '*.pkg.tar.gz' | sed 's|^.*/||;s|#.*$||' | sort > $PKGS_D
|
|
cat $PKGS_D | uniq > $PKGS_U
|
|
}
|
|
|
|
duplicates() {
|
|
print_result "Duplicates" "$(cat $PKGS_D | uniq -d)"
|
|
}
|
|
|
|
missing() {
|
|
print_result "Missing" "$(comm -3 $ALL_PKGS $PKGS_U | sort | cut -f1)"
|
|
}
|
|
|
|
orphaned() {
|
|
print_result "Orphaned" "$(comm -3 $ALL_PKGS $PKGS_U | sort | cut -s -f2)"
|
|
}
|
|
|
|
outdated_pkg() {
|
|
if [ -f Pkgfile ]; then
|
|
source Pkgfile
|
|
if [[ $(echo $name*.pkg.*) =~ ^$name#(.+-.+)\.pkg\..+$ ]]; then
|
|
if [ "$version-$release" != "${BASH_REMATCH[1]}" ]; then
|
|
printf "%s" $name
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
outdated() {
|
|
local prt otd
|
|
for prt in $(cat $ALL_PKGS); do
|
|
pushd $(find $PORTS_DIR -maxdepth 2 -name $prt -type d) > /dev/null
|
|
otd="$otd $(outdated_pkg)"
|
|
popd > /dev/null
|
|
done
|
|
print_result "Outdated" "$otd"
|
|
}
|
|
|
|
|
|
ALL_PKGS=../packages.all
|
|
PORTS_DIR=.
|
|
|
|
setup
|
|
find_packages
|
|
duplicates
|
|
missing
|
|
orphaned
|
|
outdated
|
|
clean
|
|
|
|
# End of file
|
|
|