[pacman-dev] [PATCH] paccache: adding the possibility for multiple cachedirs. (fixed)

silent boatman thesilentboatman at gmail.com
Mon Aug 25 11:28:14 EDT 2014


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 <d at falconindy.com>:
> On Aug 25, 2014 1:03 AM, "Maxim Andersson" <thesilentboatman at gmail.com>
> 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 <thesilentboatman at gmail.com>
>> ---
>>  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:- at 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
>>
>


More information about the pacman-dev mailing list