[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnupload and delete
From: |
Karl Berry |
Subject: |
gnupload and delete |
Date: |
Wed, 12 Nov 2008 13:12:10 -0600 |
It is not exactly simple to figure out how to delete (archive) files
from ftp.gnu.org and alpha.gnu.org with the ftp directives, and anyway
constructing the directive files and uploading them by hand is always a
pain.
This patch adds a --delete option so gnupload can do it.
It worked ok in my tests, FWIW.
Wdyt? When/if it's included, I'll add a note to the maintainers manual
about it.
Thanks,
Karl
--- a/lib/gnupload
+++ b/lib/gnupload
@@ -24,10 +24,12 @@ set -e
GPG='gpg --batch --no-tty'
to=
+delete=false
usage="Usage: $0 [OPTIONS]... FILES...
-Sign all FILES, and upload them to selected destinations, according to
+Sign all FILES, and upload them to (or delete them from) selected
+destinations, according to
<http://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html>.
Options:
@@ -35,6 +37,7 @@ Options:
--to DEST specify one destination for FILES
(multiple --to options are allowed)
--user NAME sign with key NAME
+ --delete delete FILES from destination instead of uploading
--version output version information and exit
Recognized destinations are:
@@ -45,9 +48,14 @@ Recognized destinations are:
build directive files and upload files by FTP
address@hidden:DIRECTORY upload files with scp
+Deletion only works for ftp.gnu.org and alpha.gnu.org (using the
+archive: directive). Otherwise it is a no-op. Deleting a file foo also
+deletes foo.sig; do not specify the .sig explicitly.
+
Simple single-target single-file examples:
gnupload --to alpha.gnu.org:automake automake-1.8.2b.tar.gz
gnupload --to ftp.gnu.org:automake automake-1.8.3.tar.gz
+ gnupload --to alpha.gnu.org:automake --delete automake-oops.tar.gz
Multiple-target multiple-file example:
gnupload --to sources.redhat.com:~ftp/pub/automake \\
@@ -59,6 +67,10 @@ Send patches to <address@hidden>."
while test -n "$1"; do
case $1 in
+ --delete)
+ delete=true
+ shift
+ ;;
--help)
echo "$usage"
exit $?
@@ -96,23 +108,25 @@ while test -n "$1"; do
done
if test $# = 0; then
- echo "$0: No file to upload" 1>&2
+ echo "$0: No file to upload or delete" 1>&2
exit 1
else
:
fi
-# Make sure all files exist. We don't want to ask
-# for the passphrase if the script will fail.
-for file
-do
- if test ! -f $file; then
- echo "$0: Cannot find \`$file'" 1>&2
- exit 1
- else
- :
- fi
-done
+if $delete; then :; else
+ # Make sure all files exist. We don't want to ask
+ # for the passphrase if the script will fail.
+ for file
+ do
+ if test ! -f $file; then
+ echo "$0: Cannot find \`$file'" 1>&2
+ exit 1
+ else
+ :
+ fi
+ done
+fi
# Make sure passphrase is not exported in the environment.
unset passphrase
@@ -129,27 +143,39 @@ read -r passphrase
stty echo
echo
-for file
-do
- echo "Signing $file..."
- rm -f $file.sig
- echo $passphrase | $GPG --passphrase-fd 0 -ba -o $file.sig $file
-done
+# Nothing to sign if deleting.
+if $delete; then :; else
+ for file
+ do
+ echo "Signing $file..."
+ rm -f $file.sig
+ echo $passphrase | $GPG --passphrase-fd 0 -ba -o $file.sig $file
+ done
+fi
for dest in $to
do
for file
do
- echo "Uploading $file to $dest..."
- files="$file $file.sig"
+ # Prepare arguments.
+ if $delete; then
+ echo "Removing $file from $dest..."
+ files= # nothing to upload if deleting
+ directive="archive: $file"
+ else
+ echo "Uploading $file to $dest..."
+ files="$file $file.sig"
+ directive="filename: `basename -- \"$file\"`"
+ fi
destdir=`echo $dest | sed 's/[^:]*://'`
+
case $dest in
alpha.gnu.org:*)
rm -f $file.directive $file.directive.asc
cat >$file.directive<<EOF
version: 1.1
directory: $destdir
-filename: `basename -- "$file"`
+$directive
EOF
echo "$passphrase" | $GPG --passphrase-fd 0 --clearsign $file.directive
ncftpput ftp-upload.gnu.org /incoming/alpha $files $file.directive.asc
@@ -160,20 +186,24 @@ EOF
cat >$file.directive<<EOF
version: 1.1
directory: $destdir
-filename: `basename -- "$file"`
+$directive
EOF
echo "$passphrase" | $GPG --passphrase-fd 0 --clearsign $file.directive
ncftpput ftp-upload.gnu.org /incoming/ftp $files $file.directive.asc
rm -f $file.directive $file.directive.asc
;;
savannah.gnu.org:*)
- ncftpput savannah.gnu.org /incoming/savannah/$destdir $files
+ # We only know how to implement delete for {ftp,alpha}.gnu.org.
+ $delete \
+ || ncftpput savannah.gnu.org /incoming/savannah/$destdir $files
;;
savannah.nongnu.org:*)
- ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files
+ $delete \
+ || ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files
;;
*)
- scp $files $dest
+ $delete \
+ || scp $files $dest
;;
esac
done
- gnupload and delete,
Karl Berry <=