blob: 098bed2d1b69efe8b419d8935e1adbde0626386a [file] [log] [blame]
Fred Drake9f2b4201999-08-02 20:19:17 +00001#! /usr/bin/env python
2# -*- Python -*-
3
4"""%(program)s - script to create the latex source distribution
5
6usage:
7 %(program)s [-t|--tools] release [tag]
8
9with -t|--tools: doesn't include the documents, only the framework
10
11without [tag]: generate from the current version that's checked in
12 (*NOT* what's in the current directory!)
13
14with [tag]: generate from the named tag
15"""
16#* should be modified to get the Python version number automatically
17# from the Makefile or someplace.
18
19__version__ = "$Revision$"
20
21import getopt
22import glob
23import os
Fred Drake77b76b62000-10-10 19:35:40 +000024import re
Fred Drake9f2b4201999-08-02 20:19:17 +000025import shutil
26import sys
27import tempfile
28
Fred Drake77b76b62000-10-10 19:35:40 +000029import cvsinfo
30
Fred Drake9f2b4201999-08-02 20:19:17 +000031
32quiet = 0
Fred Drake77b76b62000-10-10 19:35:40 +000033rx = re.compile(r":ext:(?:[a-zA-Z0-9]+)@cvs\.([a-zA-Z0-9]+).sourceforge.net:"
34 r"/cvsroot/\1")
Fred Drake9f2b4201999-08-02 20:19:17 +000035
36
37def main():
38 global quiet
39 try:
40 opts, args = getopt.getopt(sys.argv[1:], "abgtzq",
41 ["all", "bzip2", "gzip", "tools", "zip",
42 "quiet"])
43 except getopt.error, e:
44 usage(warning=str(e))
45 sys.exit(2)
46 if len(args) not in (1, 2):
47 usage(warning="wrong number of parameters")
48 sys.exit(2)
49 tools = 0
50 formats = {}
51 for opt, arg in opts:
52 if opt in ("-t", "--tools"):
53 tools = 1
54 elif opt in ("-q", "--quiet"):
55 quiet = quiet + 1
56 elif opt in ("-b", "--bzip2"):
57 formats["bzip2"] = 1
58 elif opt in ("-g", "--gzip"):
59 formats["gzip"] = 1
60 elif opt in ("-z", "--zip"):
61 formats["zip"] = 1
62 elif opt in ("-a", "--all"):
63 formats["bzip2"] = 1
64 formats["gzip"] = 1
65 formats["zip"] = 1
66 formats = formats.keys()
67 if formats:
68 # make order human-predictable
69 formats.sort()
70 else:
71 formats = ["gzip"]
72 release = args[0]
73 cvstag = None
74 if len(args) > 1:
75 cvstag = args[1]
76 tempdir = tempfile.mktemp()
77 os.mkdir(tempdir)
Fred Drake77b76b62000-10-10 19:35:40 +000078 pkgdir = os.path.join(tempdir, "Python-" + release)
79 os.mkdir(pkgdir)
80 pwd = os.getcwd()
81 mydir = os.path.abspath(os.path.dirname(sys.argv[0]))
82 info = cvsinfo.RepositoryInfo(mydir)
83 cvsroot = info.get_cvsroot()
84 m = rx.match(cvsroot)
85 if m:
86 # If this is an authenticated SourceForge repository, convert to
87 # anonymous usage for the export/checkout, since that avoids the
88 # SSH overhead.
89 group = m.group(1)
90 cvsroot = ":pserver:anonymous@cvs.%s.sourceforge.net:/cvsroot/%s" \
91 % (group, group)
92 # For some reason, SourceForge/CVS doesn't seem to care that we
93 # might not have done a "cvs login" to the anonymous server.
94 # That avoids a lot of painful gunk here.
95 os.chdir(pkgdir)
96 if not quiet:
97 print "--- current directory is:", pkgdir
Fred Drake9f2b4201999-08-02 20:19:17 +000098 if cvstag:
Fred Drake77b76b62000-10-10 19:35:40 +000099 run("cvs -d%s export -r %s -d Doc python/dist/src/Doc"
100 % (cvsroot, cvstag))
Fred Drake9f2b4201999-08-02 20:19:17 +0000101 else:
Fred Drake77b76b62000-10-10 19:35:40 +0000102 run("cvs -Q -d%s checkout -d Doc python/dist/src/Doc" % cvsroot)
Fred Drake9f2b4201999-08-02 20:19:17 +0000103 # remove CVS directories
Fred Drake9f2b4201999-08-02 20:19:17 +0000104 for p in ('*/CVS', '*/*/CVS', '*/*/*/CVS'):
105 map(shutil.rmtree, glob.glob(p))
Fred Drake9f2b4201999-08-02 20:19:17 +0000106 if tools:
Fred Drake77b76b62000-10-10 19:35:40 +0000107 archive = "doctools-" + release
Fred Drake9f2b4201999-08-02 20:19:17 +0000108 # we don't want the actual documents in this case:
Fred Drake77b76b62000-10-10 19:35:40 +0000109 for d in ("api", "dist", "doc", "ext", "inst",
110 "lib", "mac", "ref", "tut"):
111 shutil.rmtree(os.path.join(os.path.join(pkgdir, "Doc"), d))
Fred Drake9f2b4201999-08-02 20:19:17 +0000112 else:
113 archive = "latex-" + release
114
115 # XXX should also remove the .cvsignore files at this point
116
117 os.chdir(tempdir)
Fred Drake77b76b62000-10-10 19:35:40 +0000118 archive = os.path.join(pwd, archive)
Fred Drake9f2b4201999-08-02 20:19:17 +0000119 for format in formats:
120 if format == "bzip2":
121 run("tar cf - Python-%s | bzip2 -9 >%s.tar.bz2"
122 % (release, archive))
123 elif format == "gzip":
124 run("tar cf - Python-%s | gzip -9 >%s.tgz"
125 % (release, archive))
126 elif format == "zip":
Fred Drakeba828782000-04-03 04:19:14 +0000127 if os.path.exists(archive + ".zip"):
128 os.unlink(archive + ".zip")
129 run("zip -q -r9 %s.zip Python-%s"
Fred Drake9f2b4201999-08-02 20:19:17 +0000130 % (archive, release))
131
132 # clean up the work area:
Fred Drake77b76b62000-10-10 19:35:40 +0000133 os.chdir(pwd)
Fred Drake9f2b4201999-08-02 20:19:17 +0000134 shutil.rmtree(tempdir)
135
136
137def run(cmd):
138 if quiet < 2:
139 print "+++", cmd
140 if quiet:
Fred Drake77b76b62000-10-10 19:35:40 +0000141 cmd = "%s >/dev/null" % cmd
Fred Drake9f2b4201999-08-02 20:19:17 +0000142 rc = os.system(cmd)
143 if rc:
144 sys.exit(rc)
145
146
147def usage(warning=None):
148 stdout = sys.stdout
149 sys.stdout = sys.stderr
150 program = os.path.basename(sys.argv[0])
151 try:
152 if warning:
153 print "%s: %s\n" % (program, warning)
154 print __doc__ % {"program": program}
155 finally:
156 sys.stdout = stdout
157
158
159if __name__ == "__main__":
160 main()