diff options
| -rwxr-xr-x | contrib/cpt-revdepends | 47 | 
1 files changed, 37 insertions, 10 deletions
| diff --git a/contrib/cpt-revdepends b/contrib/cpt-revdepends index 5857da1..36fe4fa 100755 --- a/contrib/cpt-revdepends +++ b/contrib/cpt-revdepends @@ -1,17 +1,44 @@  #!/bin/sh -e  # Display packages which depend on package -case "$1" in -    --help|-h) -        printf '%s\n' "usage: ${0##*/} [pkg]" -        exit 0 -        ;; -    '') set -- "${PWD##*/}" -esac +parser_definition() { +    setup REST help:usage -- "usage: ${0##*/} [options...] [pkg...]" +    flag tree -t --tree   -- "Also print indirect reverse dependencies" +    flag make -m --make   -- "Include make dependencies" +    global_options +} + +. cpt-lib; set +f + +[ "$1" ] || set -- "${PWD##*/}"  # 'cd' to the database directory as a simple way of  # stripping the path and performing a 'basename'. -cd "$CPT_ROOT/var/db/cpt/installed" +cd "$sys_db" + +get_revdep() { +    query="^$1\$" +    [ "$make" ] && query="$query\\|^$1 *make\$" +    grep "$query" -- */depends | while read -r pkg _; do +        printf '%s\n' "${pkg%%/*}" +    done +} -# Use a simple 'grep' to display packages depending on '$1'. -grep "^$1\$" -- */depends +if [ "$tree" ]; then +    create_cache nobuild +    :> "$tmp_dir/processed" +    get_revdep "$1" > "$tmp_dir/dep" +    while ! diff -q "$tmp_dir/dep" "$tmp_dir/processed" >/dev/null 2>&1; do +        cp "$tmp_dir/dep" "$tmp_dir/dep.new" +        while read -r line; do +            grep -q "^$line\$" "$tmp_dir/processed" && continue +            get_revdep "$line" >> "$tmp_dir/dep.new" +            printf '%s\n' "$line" >> "$tmp_dir/processed" +        done < "$tmp_dir/dep" +        sort -u -o "$tmp_dir/dep" "$tmp_dir/dep.new" +        sort -u -o "$tmp_dir/processed" "$tmp_dir/processed" +    done +    cat "$tmp_dir/dep" +else +    get_revdep "$1" +fi | 
