Thanks for the feedback. I will make the changes and resend a new patch. //Maxim
2014-08-25 14:52 GMT+02:00 Dave Reisner <[email protected]>: > On Aug 25, 2014 1:03 AM, "Maxim Andersson" <[email protected]> > wrote: >> >> Either by specifing several -c parameters or only >> one -c parameter with a comma separated value. >> One could for example be for the official arch packages >> and one for the aur. >> >> Signed-off-by: Maxim Andersson <[email protected]> >> --- >> contrib/paccache.sh.in | 89 > +++++++++++++++++++++++++++++--------------------- >> 1 file changed, 51 insertions(+), 38 deletions(-) >> >> diff --git a/contrib/paccache.sh.in b/contrib/paccache.sh.in >> index 039ac8a..2170d76 100644 >> --- a/contrib/paccache.sh.in >> +++ b/contrib/paccache.sh.in >> @@ -23,9 +23,9 @@ shopt -s extglob >> declare -r myname='paccache' >> declare -r myver='@PACKAGE_VERSION@' >> >> -declare -a candidates=() cmdopts=() whitelist=() blacklist=() >> +declare -a cachedirs=() candidates=() cmdopts=() whitelist=() > blacklist=() >> declare -i delete=0 dryrun=0 filecount=0 move=0 needsroot=0 totalsaved=0 > verbose=0 >> -declare cachedir=@localstatedir@/cache/pacman/pkg delim=$'\n' keep=3 > movedir= scanarch= >> +declare delim=$'\n' keep=3 movedir= scanarch= >> >> USE_COLOR='y' >> >> @@ -159,25 +159,25 @@ A flexible pacman cache cleaning utility. >> Usage: ${myname} <operation> [options] [targets...] >> >> Operations: >> - -d, --dryrun perform a dry run, only finding candidate > packages. >> - -m, --move <dir> move candidate packages to "dir". >> - -r, --remove remove candidate packages. >> + -d, --dryrun perform a dry run, only finding candidate > packages. >> + -m, --move <dir> move candidate packages to "dir". >> + -r, --remove remove candidate packages. >> >> Options: >> - -a, --arch <arch> scan for "arch" (default: all architectures). >> - -c, --cachedir <dir> scan "dir" for packages. >> - (default: @localstatedir@/cache/pacman/pkg). >> - -f, --force apply force to mv(1) and rm(1) operations. >> - -h, --help display this help message and exit. >> - -i, --ignore <pkgs> ignore "pkgs", comma-separated. Alternatively, > specify >> - "-" to read package names from stdin, newline- >> - delimited. >> - -k, --keep <num> keep "num" of each package in the cache > (default: 3). >> - --nocolor remove color from output. >> - -u, --uninstalled target uninstalled packages. >> - -v, --verbose increase verbosity. specify up to 3 times. >> - -z, --null use null delimiters for candidate names (only > with -v >> - and -vv). >> + -a, --arch <arch> scan for "arch" (default: all architectures). >> + -c, --cachedir <dirs> scan "dirs" for packages, comma-separated. >> + (default: @localstatedir@/cache/pacman/pkg). >> + -f, --force apply force to mv(1) and rm(1) operations. >> + -h, --help display this help message and exit. >> + -i, --ignore <pkgs> ignore "pkgs", comma-separated. Alternatively, >> + pecify "-" to read package names from stdin, > newline- >> + delimited. >> + -k, --keep <num> keep "num" of each package in the cache > (default: 3). >> + --nocolor remove color from output. >> + -u, --uninstalled target uninstalled packages. >> + -v, --verbose increase verbosity. specify up to 3 times. >> + -z, --null use null delimiters for candidate names (only > with -v >> + and -vv). >> >> EOF >> } >> @@ -203,7 +203,9 @@ while :; do >> scanarch=$2 >> shift ;; >> -c|--cachedir) >> - cachedir=$2 >> + IFS=',' read -r -a cdrs <<< "$2" >> + cachedirs+=("${cdrs[@]}") >> + unset cdrs > > Call your tmp var "dirs". > >> shift ;; >> -d|--dryrun) >> dryrun=1 ;; >> @@ -256,6 +258,9 @@ done >> >> m4_include(../scripts/library/term_colors.sh) >> >> +# setting default cachedir >> +cachedirs=${cachedirs:-@localstatedir@/cache/pacman/pkg} > > Lame assignment. You made cachedirs an array, so let's always treat it like > one. > >> + >> # remaining args are a whitelist >> whitelist=("$@") >> >> @@ -265,28 +270,36 @@ case $(( dryrun+delete+move )) in >> [^1]) die "only one operation may be used at a time" ;; >> esac >> >> -[[ -d $cachedir ]] || >> - die "cachedir '%s' does not exist or is not a directory" > "$cachedir" >> +for cachedir in "${cachedirs[@]}" >> +do > > This goes against style. Everywhere else we keep the "do" on the same line > as the for. > >> + [[ -d $cachedir ]] || >> + die "cachedir '%s' does not exist or is not a directory" > "$cachedir" >> >> -[[ $movedir && ! -d $movedir ]] && >> - die "destination directory '%s' does not exist or is not a > directory" "$movedir" >> + [[ $movedir && ! -d $movedir ]] && >> + die "destination directory '%s' does not exist or is not > a directory" "$movedir" >> + >> + if (( move || delete )); then >> + # make it an absolute path since we're about to chdir >> + [[ ${movedir:0:1} != '/' ]] && movedir=$PWD/$movedir >> + [[ ! -w $cachedir || ( $movedir && ! -w $movedir ) ]] && > needsroot=1 > > Much of this above here doesn't really make sense to keep in the loop. > There's only ever one movedir. > >> + fi >> + >> + # unlikely that this will fail, but better make sure >> + cd "$cachedir" >/dev/null || die "failed to chdir to '%s'" > "$cachedir" >> + >> + # note that these results are returned in an arbitrary order from > awk, but >> + # they'll be resorted (in summarize) iff we have a verbosity > level set. >> + IFS=$'\n' read -r -d '' -a tmpcandidates < \ >> + <(printf '%s\n' *.pkg.tar?(.+([^.])) | pacsort --files | >> + pkgfilter "$keep" "$scanarch" \ >> + "${#whitelist[*]}" "${whitelist[@]}" \ >> + "${#blacklist[*]}" "${blacklist[@]}") >> + >> + candidates+=(${tmpcandidates[@]}) > > Missing quotes. Call the tmp var "cand". > >> +done >> >> -if (( move || delete )); then >> - # make it an absolute path since we're about to chdir >> - [[ ${movedir:0:1} != '/' ]] && movedir=$PWD/$movedir >> - [[ ! -w $cachedir || ( $movedir && ! -w $movedir ) ]] && > needsroot=1 >> -fi >> >> -# unlikely that this will fail, but better make sure >> -cd "$cachedir" >/dev/null || die "failed to chdir to '%s'" "$cachedir" >> >> -# note that these results are returned in an arbitrary order from awk, > but >> -# they'll be resorted (in summarize) iff we have a verbosity level set. >> -IFS=$'\n' read -r -d '' -a candidates < \ >> - <(printf '%s\n' *.pkg.tar?(.+([^.])) | pacsort --files | >> - pkgfilter "$keep" "$scanarch" \ >> - "${#whitelist[*]}" "${whitelist[@]}" \ >> - "${#blacklist[*]}" "${blacklist[@]}") >> >> if (( ! ${#candidates[*]} )); then >> msg 'no candidate packages found for pruning' >> -- >> 2.0.3 >> >
