blob: c7ca1883c65b2721aec47772cbcc1d74250e3c9c [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 Drakebc3974c2001-01-22 21:34:20 +0000102 for p in ('*/CVS', '*/*/CVS', '*/*/*/CVS',
103 '.cvsignore', '*/.cvsignore'):
Fred Drake9f2b4201999-08-02 20:19:17 +0000104 map(shutil.rmtree, glob.glob(p))
Fred Drakebc3974c2001-01-22 21:34:20 +0000105 LICENSE = os.path.normpath(
106 os.path.join(mydir, os.pardir, os.pardir, "LICENSE"))
107 shutil.copyfile(LICENSE, "Doc/LICENSE")
Fred Drake9f2b4201999-08-02 20:19:17 +0000108 if tools:
Fred Drake77b76b62000-10-10 19:35:40 +0000109 archive = "doctools-" + release
Fred Drake9f2b4201999-08-02 20:19:17 +0000110 # we don't want the actual documents in this case:
Fred Drake77b76b62000-10-10 19:35:40 +0000111 for d in ("api", "dist", "doc", "ext", "inst",
112 "lib", "mac", "ref", "tut"):
113 shutil.rmtree(os.path.join(os.path.join(pkgdir, "Doc"), d))
Fred Drake9f2b4201999-08-02 20:19:17 +0000114 else:
115 archive = "latex-" + release
116
117 # XXX should also remove the .cvsignore files at this point
118
119 os.chdir(tempdir)
Fred Drake77b76b62000-10-10 19:35:40 +0000120 archive = os.path.join(pwd, archive)
Fred Drake9f2b4201999-08-02 20:19:17 +0000121 for format in formats:
122 if format == "bzip2":
123 run("tar cf - Python-%s | bzip2 -9 >%s.tar.bz2"
124 % (release, archive))
125 elif format == "gzip":
126 run("tar cf - Python-%s | gzip -9 >%s.tgz"
127 % (release, archive))
128 elif format == "zip":
Fred Drakeba828782000-04-03 04:19:14 +0000129 if os.path.exists(archive + ".zip"):
130 os.unlink(archive + ".zip")
131 run("zip -q -r9 %s.zip Python-%s"
Fred Drake9f2b4201999-08-02 20:19:17 +0000132 % (archive, release))
133
134 # clean up the work area:
Fred Drake77b76b62000-10-10 19:35:40 +0000135 os.chdir(pwd)
Fred Drake9f2b4201999-08-02 20:19:17 +0000136 shutil.rmtree(tempdir)
137
138
139def run(cmd):
140 if quiet < 2:
141 print "+++", cmd
142 if quiet:
Fred Drake77b76b62000-10-10 19:35:40 +0000143 cmd = "%s >/dev/null" % cmd
Fred Drake9f2b4201999-08-02 20:19:17 +0000144 rc = os.system(cmd)
145 if rc:
146 sys.exit(rc)
147
148
149def usage(warning=None):
150 stdout = sys.stdout
151 sys.stdout = sys.stderr
152 program = os.path.basename(sys.argv[0])
153 try:
154 if warning:
155 print "%s: %s\n" % (program, warning)
156 print __doc__ % {"program": program}
157 finally:
158 sys.stdout = stdout
159
160
161if __name__ == "__main__":
162 main()