blob: c3ea8639cdf91dffe7ba0f75ddbd12f8dd883411 [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
Fred Drake9f2b4201999-08-02 20:19:17 +000019import getopt
20import glob
21import os
Fred Drake77b76b62000-10-10 19:35:40 +000022import re
Fred Drake9f2b4201999-08-02 20:19:17 +000023import shutil
24import sys
25import tempfile
26
Fred Drake77b76b62000-10-10 19:35:40 +000027import cvsinfo
28
Fred Drake9f2b4201999-08-02 20:19:17 +000029
30quiet = 0
Fred Drake77b76b62000-10-10 19:35:40 +000031rx = re.compile(r":ext:(?:[a-zA-Z0-9]+)@cvs\.([a-zA-Z0-9]+).sourceforge.net:"
32 r"/cvsroot/\1")
Fred Drake9f2b4201999-08-02 20:19:17 +000033
34
35def main():
36 global quiet
37 try:
38 opts, args = getopt.getopt(sys.argv[1:], "abgtzq",
39 ["all", "bzip2", "gzip", "tools", "zip",
40 "quiet"])
41 except getopt.error, e:
42 usage(warning=str(e))
43 sys.exit(2)
44 if len(args) not in (1, 2):
45 usage(warning="wrong number of parameters")
46 sys.exit(2)
47 tools = 0
48 formats = {}
49 for opt, arg in opts:
50 if opt in ("-t", "--tools"):
51 tools = 1
52 elif opt in ("-q", "--quiet"):
53 quiet = quiet + 1
54 elif opt in ("-b", "--bzip2"):
55 formats["bzip2"] = 1
56 elif opt in ("-g", "--gzip"):
57 formats["gzip"] = 1
58 elif opt in ("-z", "--zip"):
59 formats["zip"] = 1
60 elif opt in ("-a", "--all"):
61 formats["bzip2"] = 1
62 formats["gzip"] = 1
63 formats["zip"] = 1
Fred Drake9f2b4201999-08-02 20:19:17 +000064 if formats:
65 # make order human-predictable
Fred Drakebc3974c2001-01-22 21:34:20 +000066 formats = formats.keys()
Fred Drake9f2b4201999-08-02 20:19:17 +000067 formats.sort()
68 else:
69 formats = ["gzip"]
70 release = args[0]
71 cvstag = None
72 if len(args) > 1:
73 cvstag = args[1]
74 tempdir = tempfile.mktemp()
75 os.mkdir(tempdir)
Fred Drake77b76b62000-10-10 19:35:40 +000076 pkgdir = os.path.join(tempdir, "Python-" + release)
77 os.mkdir(pkgdir)
78 pwd = os.getcwd()
79 mydir = os.path.abspath(os.path.dirname(sys.argv[0]))
80 info = cvsinfo.RepositoryInfo(mydir)
81 cvsroot = info.get_cvsroot()
82 m = rx.match(cvsroot)
83 if m:
84 # If this is an authenticated SourceForge repository, convert to
85 # anonymous usage for the export/checkout, since that avoids the
86 # SSH overhead.
87 group = m.group(1)
88 cvsroot = ":pserver:anonymous@cvs.%s.sourceforge.net:/cvsroot/%s" \
89 % (group, group)
90 # For some reason, SourceForge/CVS doesn't seem to care that we
91 # might not have done a "cvs login" to the anonymous server.
92 # That avoids a lot of painful gunk here.
93 os.chdir(pkgdir)
94 if not quiet:
95 print "--- current directory is:", pkgdir
Fred Drake9f2b4201999-08-02 20:19:17 +000096 if cvstag:
Fred Drake77b76b62000-10-10 19:35:40 +000097 run("cvs -d%s export -r %s -d Doc python/dist/src/Doc"
98 % (cvsroot, cvstag))
Fred Drake9f2b4201999-08-02 20:19:17 +000099 else:
Fred Drake77b76b62000-10-10 19:35:40 +0000100 run("cvs -Q -d%s checkout -d Doc python/dist/src/Doc" % cvsroot)
Fred Drake9f2b4201999-08-02 20:19:17 +0000101 # remove CVS directories
Fred Drake24da4772001-02-02 15:48:00 +0000102 for p in ('*/CVS', '*/*/CVS', '*/*/*/CVS'):
Fred Drake9f2b4201999-08-02 20:19:17 +0000103 map(shutil.rmtree, glob.glob(p))
Fred Drake24da4772001-02-02 15:48:00 +0000104 for f in ('.cvsignore', '*/.cvsignore'):
105 map(os.unlink, glob.glob(f))
Fred Drakebc3974c2001-01-22 21:34:20 +0000106 LICENSE = os.path.normpath(
107 os.path.join(mydir, os.pardir, os.pardir, "LICENSE"))
108 shutil.copyfile(LICENSE, "Doc/LICENSE")
Fred Drake9f2b4201999-08-02 20:19:17 +0000109 if tools:
Fred Drake77b76b62000-10-10 19:35:40 +0000110 archive = "doctools-" + release
Fred Drake9f2b4201999-08-02 20:19:17 +0000111 # we don't want the actual documents in this case:
Fred Drake77b76b62000-10-10 19:35:40 +0000112 for d in ("api", "dist", "doc", "ext", "inst",
113 "lib", "mac", "ref", "tut"):
114 shutil.rmtree(os.path.join(os.path.join(pkgdir, "Doc"), d))
Fred Drake9f2b4201999-08-02 20:19:17 +0000115 else:
116 archive = "latex-" + release
117
118 # XXX should also remove the .cvsignore files at this point
119
120 os.chdir(tempdir)
Fred Drake77b76b62000-10-10 19:35:40 +0000121 archive = os.path.join(pwd, archive)
Fred Drake9f2b4201999-08-02 20:19:17 +0000122 for format in formats:
123 if format == "bzip2":
124 run("tar cf - Python-%s | bzip2 -9 >%s.tar.bz2"
125 % (release, archive))
126 elif format == "gzip":
127 run("tar cf - Python-%s | gzip -9 >%s.tgz"
128 % (release, archive))
129 elif format == "zip":
Fred Drakeba828782000-04-03 04:19:14 +0000130 if os.path.exists(archive + ".zip"):
131 os.unlink(archive + ".zip")
132 run("zip -q -r9 %s.zip Python-%s"
Fred Drake9f2b4201999-08-02 20:19:17 +0000133 % (archive, release))
134
135 # clean up the work area:
Fred Drake77b76b62000-10-10 19:35:40 +0000136 os.chdir(pwd)
Fred Drake9f2b4201999-08-02 20:19:17 +0000137 shutil.rmtree(tempdir)
138
139
140def run(cmd):
141 if quiet < 2:
142 print "+++", cmd
143 if quiet:
Fred Drake77b76b62000-10-10 19:35:40 +0000144 cmd = "%s >/dev/null" % cmd
Fred Drake9f2b4201999-08-02 20:19:17 +0000145 rc = os.system(cmd)
146 if rc:
147 sys.exit(rc)
148
149
150def usage(warning=None):
151 stdout = sys.stdout
152 sys.stdout = sys.stderr
153 program = os.path.basename(sys.argv[0])
154 try:
155 if warning:
156 print "%s: %s\n" % (program, warning)
157 print __doc__ % {"program": program}
158 finally:
159 sys.stdout = stdout
160
161
162if __name__ == "__main__":
163 main()