]> code.delx.au - gnu-emacs-elpa/blobdiff - admin/update-archive.sh
* update-archive.sh (send_mail): Use `sendmail' and `rsync'.
[gnu-emacs-elpa] / admin / update-archive.sh
index 9d8d9c76ce1849baa8bacf7c9fbe29a096afccfc..464a0078ceec56f9a571d2afe431bea51656006a 100755 (executable)
@@ -3,13 +3,32 @@
 makelog=""
 buildir="$(pwd)"
 
+announce=no
+a_email="" #info-gnu-emacs@gnu.org
+
 export LANG=C
-case "$1" in
-    "--batch")
-        makelog="$(pwd)/make.log"
-        exec >"$makelog" 2>&1
-        ;;
-esac
+while [ $# -gt 0 ]; do
+    case "$1" in
+        "--announce") announce=yes; a_email="$2"; shift ;;
+        "--batch")
+            makelog="$(pwd)/make.log"
+            exec >"$makelog" 2>&1
+            ;;
+    esac
+    shift
+done
+
+send_mail () {
+    to="$1"; shift
+    title="$*"
+    (cat <<ENDDOC
+From: ELPA update <do.not.reply@elpa.gnu.org>
+To: $to
+Subject: $title
+
+ENDDOC
+     cat -) | /usr/sbin/sendmail "$to"
+}
 
 # Send an email to warn about a problem.
 signal_error () {
@@ -17,23 +36,24 @@ signal_error () {
     if [ "" = "$makelog" ]; then
         echo "Error: $title"
     else
-        mx_gnu_org="$(host -t mx gnu.org | sed 's/.*[  ]//')"
-        (sleep 5; echo "HELO elpa.gnu.org"
-         sleep 1; echo "MAIL FROM: <elpa@elpa.gnu.org>"
-         sleep 1; echo "RCPT TO: <emacs-elpa-diffs@gnu.org>"
-         sleep 1; echo "DATA"
-         sleep 1; cat <<ENDDOC
-From: ELPA update <elpa@elpa.gnu.org>
-To: emacs-elpa-diffs@gnu.org
-Subject: $title
-
-ENDDOC
-         cat "$makelog"
-         echo "."; sleep 1) | telnet "$mx_gnu_org" smtp
+        send_mail "emacs-elpa-diffs@gnu.org" "$title" <"$makelog"
     fi
     exit 1
 }
 
+announce_new () {
+    if [ "yes" != "$announce" ]; then return; fi
+    pv="$1"
+    pkg="$(echo "$pv" | sed -e 's/^\(.*\)-\([^-]*\)\.[^-.]*$/\1/')"
+    ver="$(echo "$pv" | sed -e 's/^\(.*\)-\([^-]*\)\.[^-.]*$/\2/')"
+    if [ -z "$pkg" ] || [ -z "$ver" ]; then signal_error "bad PKG-VER: $pv"; fi
+    send_mail "$a_email" "[GNU ELPA] $pkg version $ver" <<ENDDOC
+Version $ver of GNU ELPA package $pkg has just been released.
+You can now find it in M-x package-list RET.
+
+More at http://elpa.gnu.org/packages/$pkg.html
+ENDDOC
+}
 
 cd ../elpa
 
@@ -72,15 +92,16 @@ make archive-full || {
 }
 latest="emacs-packages-latest.tgz"
 (cd archive
- tar zcf "$latest" packages)
GZIP=--best tar zcf "$latest" packages)
 (cd ../
  mkdir -p staging/packages
  # Not sure why we have `staging-old', but let's keep it for now.
- rm -rf staging-old
- cp -a staging staging-old
+ rsync -av --inplace --delete staging/. staging-old/.
  # Move new files into place but don't throw out old package versions.
  for f in build/archive/packages/*; do
-     dst="staging/packages/$(basename "$f")"
+     # PKG-VER
+     pv=$(basename "$f")
+     dst="staging/packages/$pv"
      # Actually, let's never overwrite an existing version.  So changes can
      # be installed without causing a new package to be built until the
      # version field is changed.  Some files need to be excluded from the
@@ -91,9 +112,9 @@ latest="emacs-packages-latest.tgz"
          * ) if [ -r "$dst" ]
              then rm "$f"
              else
-                 # FIXME: Announce the new package/version on
-                 # gnu.emacs.sources!
                  mv "$f" "$dst"
+                 # FIXME: Add a tag to remember the precise code used.
+                 announce_new "$pv"
              fi ;;
      esac
  done