Files
scratchpkg/pkginfo
2019-07-10 17:38:22 +08:00

109 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
msg() {
echo "$CMD: $*"
}
get_info() {
echo -ne "$1 "
grep -e ^version -e ^release "$INDEX_DIR"/$1/.pkginfo | awk '{print $3}' | tr '\n' '-' | sed 's:\-$::'
echo
}
pkg_installed() {
for pkg in $(grep ^name "$INDEX_DIR"/*/.pkginfo | awk '{print $3}'); do
get_info $pkg
done
}
pkg_listfiles() {
[ "$1" ] || return
if [ ! -f "$INDEX_DIR"/$1/.files ]; then
msg "port '$1' not installed."
exit 1
fi
cat "$INDEX_DIR"/$1/.files
}
pkg_own() {
[ "$1" ] || return
local arg
arg=$(echo $1 | sed "s/^\///")
grep "$arg" $INDEX_DIR/*/.files | sed "s:$INDEX_DIR/::" | sed "s:/.files::" | tr : " " | column -t
}
pkg_port() {
find ${PORT_REPO[@]} -name spkgbuild -follow -printf "%h\n"
}
pkg_diff() {
for pkg in $(pkg_installed | awk '{print $1}'); do
installed_ver=$(grep -e ^version -e ^release /var/lib/scratchpkg/index/$pkg/.pkginfo | awk '{print $3}' | tr '\n' '-' | sed 's/-$//')
port_ver=$(pkg_query $pkg | awk '{print $2,$3}' | tr ' ' '-')
[ "$installed_ver" ] || continue
[ "$port_ver" ] || continue
if [ "$installed_ver" != "$port_ver" ]; then
echo "$pkg: $installed_ver -> $port_ver"
fi
done
}
pkg_query() {
[ "$1" ] || return
. $(pkg_port | grep "/$1$")/spkgbuild 2>/dev/null && \
echo "$name $version $release" || \
return
}
get_repo() {
if [ ! -f "$REPOFILE" ]; then
msg "repo file not exist. ($REPOFILE)"
exit 1
else
while read -r repodir repourl junk; do
case $repodir in
""|"#"*) continue ;;
esac
PORT_REPO+=($repodir)
done < "$REPOFILE"
fi
}
usage() {
cat << EOF
Usage:
$(basename $0) <option> [arg]
Options:
-i,--installed print all installed ports
-p,--ports print all existing ports
-d,--diff print outdate ports
-l,--listfiles <port> print files for ports
-o,--owner <file> print files owner
-q,--query <port> print ports details
EOF
}
main() {
get_repo
case $1 in
-i|--installed) pkg_installed ;;
-l|--listfiles) pkg_listfiles $2 ;;
-o|--owner) pkg_own $2 ;;
-p|--ports) pkg_port ;;
-d|--diff) pkg_diff ;;
-q|--query) pkg_query $2 ;;
*) usage ;;
esac
}
INDEX_DIR="/var/lib/scratchpkg/index"
REPOFILE="/etc/scratchpkg.repo"
CMD=$(basename $0)
main $@
exit 0