[aur-dev] [PATCH] Add a upload directory tranform script

Dan McGee dpmcgee at gmail.com
Tue Aug 9 18:30:41 EDT 2011


On Fri, Jul 29, 2011 at 7:22 PM, Lukas Fleischer
<archlinux at cryptocrack.de> wrote:
> On Thu, Jul 28, 2011 at 02:16:37PM -0500, Dan McGee wrote:
>> This goes with the previous patch that moves uploads into segmented
>> subdirectories.
>>
>> Signed-off-by: Dan McGee <dan at archlinux.org>
>> ---
>>  scripts/uploadbuckets.sh |   42 ++++++++++++++++++++++++++++++++++++++++++
>>  1 files changed, 42 insertions(+), 0 deletions(-)
>>  create mode 100755 scripts/uploadbuckets.sh
>>
>> diff --git a/scripts/uploadbuckets.sh b/scripts/uploadbuckets.sh
>> new file mode 100755
>> index 0000000..1bb1a90
>> --- /dev/null
>> +++ b/scripts/uploadbuckets.sh
>> @@ -0,0 +1,42 @@
>> +#!/bin/bash
>> +
>> +DRYRUN=1
>> +
>> +source="$1"
>> +dest="$2"
>> +
>> +if [[ -z $source || -z $dest ]]; then
>> +     echo 'usage: uploadbuckets.sh <source> <dest>'
>> +     exit 1
>> +fi
>> +
>> +if [[ ! -d $source ]]; then
>> +     echo 'error: source is not a directory'
>> +     exit 1
>> +fi
>> +
>> +if [[ -e $dest && ! -d $dest ]]; then
>> +     echo 'error: dest is not a directory'
>> +     exit 1
>> +fi
>> +
>> +if [[ ! -d $dest ]]; then
>> +     mkdir $dest
>> +fi
>> +
>> +for package in "$source"/*; do
>> +     pkgname="${package##*/}"
>> +     newfolder="$dest/${pkgname:0:2}"
>> +     if [[ ! -d "$newfolder" ]]; then
>> +             if [[ DRYRUN -gt 0 ]]; then
>> +                     echo mkdir -p "$newfolder"
>> +             else
>> +                     mkdir -p "$newfolder"
>> +             fi
>> +     fi
>> +     if [[ DRYRUN -gt 0 ]]; then
>> +             echo mv "$source/$pkgname" "$newfolder/$pkgname"
>> +     else
>> +             mv "$source/$pkgname" "$newfolder/$pkgname"
>
> This won't work if "$source" = "$dest" and there's a package name with
> length 2. We should probably add a check to assert that source and
> target directory are not equal.

Added in upcoming resubmit. There are a few more usability tweaks as well.

I tested it using the following:
mkdir /tmp/dir1 /tmp/dir2
cd /tmp/dir1
for name in $(~/projects/pacman/src/pacman/pacman -Qq); do mkdir $name; done
mkdir aa zy
DRYRUN=0 ./scripts/uploadbuckets.sh /tmp/dir1 /tmp/dir2

and then examining the contents of dir2. A few conditions worked- 'r'
ended up in /r/r/ as expected; the two letter fake packages worked
fine (and both aa and aalib were correctly in /aa/), and everything
else checked out.

-Dan


More information about the aur-dev mailing list