]> code.delx.au - gnu-emacs-elpa/blob - admin/update-archive.sh
Sync from company/master
[gnu-emacs-elpa] / admin / update-archive.sh
1 #!/bin/sh -x
2
3 makelog=""
4 buildir="$(pwd)"
5
6 export LANG=C
7 case "$1" in
8 "--batch")
9 makelog="$(pwd)/make.log"
10 exec >"$makelog" 2>&1
11 ;;
12 esac
13
14 # Send an email to warn about a problem.
15 signal_error () {
16 title="$*"
17 if [ "" = "$makelog" ]; then
18 echo "Error: $title"
19 else
20 mx_gnu_org="$(host -t mx gnu.org | sed 's/.*[ ]//')"
21 (sleep 5; echo "HELO elpa.gnu.org"
22 sleep 1; echo "MAIL FROM: <elpa@elpa.gnu.org>"
23 sleep 1; echo "RCPT TO: <emacs-elpa-diffs@gnu.org>"
24 sleep 1; echo "DATA"
25 sleep 1; cat <<ENDDOC
26 From: ELPA update <elpa@elpa.gnu.org>
27 To: emacs-elpa-diffs@gnu.org
28 Subject: $title
29
30 ENDDOC
31 cat "$makelog"
32 echo "."; sleep 1) | telnet "$mx_gnu_org" smtp
33 fi
34 exit 1
35 }
36
37
38 cd ../elpa
39
40 # Fetch changes.
41 git pull || signal_error "git pull failed"
42
43 # Remember we're inside the "elpa" branch which we don't want to trust,
44 # So always refer to the makefile and admins files from $builddir".
45
46 # Setup and update externals.
47 emacs --batch -l "$buildir/admin/archive-contents.el" \
48 -f archive-add/remove/update-externals
49
50 make -f "$buildir/GNUmakefile" check_copyrights ||
51 signal_error "check_copyright failed"
52
53 cd "$buildir"
54
55 rsync -av --delete --exclude=ChangeLog --exclude=.git ../elpa/packages ./
56
57 # Refresh the ChangeLog files. This needs to be done in
58 # the source tree, because it needs the VCS data!
59 emacs -batch -l admin/archive-contents.el \
60 -eval '(archive-prepare-packages "../elpa")'
61
62
63 rm -rf archive # In case there's one left over!
64 make archive-full || {
65 signal_error "make archive-full failed"
66 }
67 latest="emacs-packages-latest.tgz"
68 (cd archive
69 tar zcf "$latest" packages)
70 (cd ../
71 mkdir -p staging/packages
72 # Not sure why we have `staging-old', but let's keep it for now.
73 rm -rf staging-old
74 cp -a staging staging-old
75 # Move new files into place but don't throw out old package versions.
76 for f in build/archive/packages/*; do
77 dst="staging/packages/$(basename "$f")"
78 # Actually, let's never overwrite an existing version. So changes can
79 # be installed without causing a new package to be built until the
80 # version field is changed. Some files need to be excluded from the
81 # "immutable" policy, most importantly "archive-contents"
82 # and "*-readme.txt".
83 case $dst in
84 */archive-contents | *-readme.txt ) mv "$f" "$dst" ;;
85 * ) if [ -r "$dst" ]
86 then rm "$f"
87 else
88 # FIXME: Announce the new package/version on
89 # gnu.emacs.sources!
90 mv "$f" "$dst"
91 fi ;;
92 esac
93 done
94 mv build/archive/"$latest" staging/
95 rm -rf build/archive)
96
97 # Make the HTML and readme.txt files.
98 (cd ../staging/packages
99 emacs --batch -l ../../build/admin/archive-contents.el \
100 --eval '(batch-html-make-index)')