[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