view build-aux/gnupload @ 7302:8a1a9361108c

* _fpending.c: Include <config.h> unconditionally, since we no longer worry about uses that don't define HAVE_CONFIG_H. * acl.c, alloca.c, argmatch.c, atexit.c, backupfile.c: * basename.c, c-stack.c, c-strtod.c, calloc.c, canon-host.c: * canonicalize.c, chdir-long.c, chdir-safer.c, chown.c: * cloexec.c, close-stream.c, closeout.c, creat-safer.c: * cycle-check.c, diacrit.c, dirchownmod.c, dirfd.c, dirname.c: * dup-safer.c, dup2.c, error.c, euidaccess.c, exclude.c: * exitfail.c, fchmodat.c, fchown-stub.c, fd-safer.c: * file-type.c, fileblocks.c, filemode.c, filenamecat.c: * fnmatch.c, fopen-safer.c, fprintftime.c, free.c, fsusage.c: * ftruncate.c, fts-cycle.c, fts.c, full-write.c, gai_strerror.c: * getcwd.c, getdate.y, getdomainname.c, getgroups.c: * gethostname.c, gethrxtime.c, getloadavg.c, getlogin_r.c: * getndelim2.c, getnline.c, getopt.c, getopt1.c, getpass.c: * gettime.c, gettimeofday.c, getugroups.c, getusershell.c: * glob.c, group-member.c, hard-locale.c, hash-pjw.c, hash.c: * human.c, idcache.c, inet_ntop.c, inet_pton.c, inttostr.c: * isdir.c, lchown.c, linebuffer.c, long-options.c, lstat.c: * malloc.c, md5.c, memcasecmp.c, memchr.c, memcmp.c, memcoll.c: * memcpy.c, memmove.c, memrchr.c, mkancesdirs.c, mkdir-p.c: * mkdir.c, mkdirat.c, mkstemp-safer.c, mkstemp.c, modechange.c: * mountlist.c, nanosleep.c, obstack.c, open-safer.c: * openat-die.c, openat.c, pagealign_alloc.c, physmem.c: * pipe-safer.c, posixtm.c, posixver.c, putenv.c, quote.c: * quotearg.c, raise.c, readtokens.c, readtokens0.c, readutmp.c: * realloc.c, regex.c, rename.c, rmdir.c, rpmatch.c, safe-read.c: * same.c, save-cwd.c, savedir.c, setenv.c, settime.c, sha1.c: * sig2str.c, snprintf.c, strdup.c, strerror.c, strftime.c: * stripslash.c, strndup.c, strnlen.c, strpbrk.c, strtod.c: * strtoimax.c, strtol.c, strverscmp.c, tempname.c, time_r.c: * timegm.c, tmpfile-safer.c, unlinkdir.c, userspec.c, utime.c: * utimecmp.c, utimens.c, version-etc-fsf.c, version-etc.c: * xalloc-die.c, xgetcwd.c, xgethostname.c, xmalloc.c: * xmemcoll.c, xnanosleep.c, xreadlink.c, xstrtod.c: * xstrtoimax.c, xstrtol.c, xstrtoumax.c, yesno.c: Likewise.
author Paul Eggert <eggert@cs.ucla.edu>
date Wed, 13 Sep 2006 22:38:14 +0000
parents e8fe34306afa
children e44e7c739d9c
line wrap: on
line source

#!/bin/sh
# Sign files and upload them.

scriptversion=2006-05-20.00

# Copyright (C) 2004, 2005, 2006  Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.

# Originally written by Alexandre Duret-Lutz <adl@gnu.org>.

set -e

GPG='/usr/bin/gpg --batch --no-tty'
to=

usage="Usage: $0 [OPTIONS]... FILES...

Sign all FILES, and upload them to selected destinations.

Options:
  --help                   print this help text and exit
  --to DEST                specify one destination for FILES
                           (multiple --to options are allowed)
  --user NAME              sign with key NAME
  --version                output version information and exit

Recognized destinations are:
  alpha.gnu.org:DIRECTORY
  savannah.gnu.org:DIRECTORY
  savannah.nongnu.org:DIRECTORY
  ftp.gnu.org:DIRECTORY
                           build directive files and upload files by FTP
  [user@]host:DIRECTORY    upload files with scp

Example:
  gnupload --to sources.redhat.com:~ftp/pub/automake \\
           ""--to alpha.gnu.org:automake \\
           automake-1.8.2b.tar.gz automake-1.8.2b.tar.bz2

Report bugs to <bug-automake@gnu.org>.
Send patches to <automake-patches@gnu.org>."

while test -n "$1"; do
  case $1 in
    --help)
      echo "$usage"
      exit $?
      ;;
    --to)
      if test -z "$2"; then
	echo "$0: Missing argument for --to" 1>&2
        exit 1
      else
        to="$to $2"
        shift 2
      fi
      ;;
    --user)
      if test -z "$2"; then
	echo "$0: Missing argument for --user" 1>&2
        exit 1
      else
        GPG="$GPG --local-user $2"
        shift 2
      fi
      ;;
    --version)
      echo "gnupload $scriptversion"
      exit $?
      ;;
    -*)
      echo "$0: Unknown option \`$1', try \`$0 --help'" 1>&2
      exit 1
      ;;
    *)
      break
      ;;
  esac
done

if test $# = 0; then
  echo "$0: No file to upload" 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

# Make sure passphrase is not exported in the environment.
unset passphrase

# Reset PATH to be sure that echo is a built-in.  We will later use
# `echo $passphrase' to output the passphrase, so it is important that
# it is a built-in (third-party programs tend to appear in `ps'
# listings with their arguments...).
# Remember this script runs with `set -e', so if echo is not built-in
# it will exit now.
PATH=/empty echo -n "Enter GPG passphrase: "
stty -echo
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

for dest in $to;
do
  for file;
  do
    echo "Uploading $file to $dest..."
    files="$file $file.sig"
    destdir=`echo $dest | sed 's/[^:]*://'`
    case $dest in
      alpha.gnu.org:*)
	rm -f $file.directive $file.directive.asc
	echo directory: $destdir >$file.directive
	echo "$passphrase" | $GPG --passphrase-fd 0 --clearsign $file.directive
        ncftpput ftp-upload.gnu.org /incoming/alpha $files $file.directive.asc
	rm -f $file.directive $file.directive.asc
	;;
      ftp.gnu.org:*)
	rm -f $file.directive $file.directive.asc
	echo directory: $destdir >$file.directive
	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
	;;
      savannah.nongnu.org:*)
        ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files
	;;
      *)
	scp $files $dest
	;;
    esac
  done
done

# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End: