On Fri, Jul 29, 2011 at 7:22 PM, Lukas Fleischer <[email protected]> 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 <[email protected]> >> --- >> 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
