| Fred Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 1 | #! /usr/bin/env python | 
|  | 2 | #  -*- Python -*- | 
|  | 3 |  | 
|  | 4 | """%(program)s - script to create the latex source distribution | 
|  | 5 |  | 
|  | 6 | usage: | 
|  | 7 | %(program)s [-t|--tools] release [tag] | 
|  | 8 |  | 
|  | 9 | with -t|--tools:  doesn't include the documents, only the framework | 
|  | 10 |  | 
|  | 11 | without [tag]:  generate from the current version that's checked in | 
|  | 12 | (*NOT* what's in the current directory!) | 
|  | 13 |  | 
|  | 14 | with [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 |  | 
|  | 21 | import getopt | 
|  | 22 | import glob | 
|  | 23 | import os | 
| Fred Drake | 77b76b6 | 2000-10-10 19:35:40 +0000 | [diff] [blame^] | 24 | import re | 
| Fred Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 25 | import shutil | 
|  | 26 | import sys | 
|  | 27 | import tempfile | 
|  | 28 |  | 
| Fred Drake | 77b76b6 | 2000-10-10 19:35:40 +0000 | [diff] [blame^] | 29 | import cvsinfo | 
|  | 30 |  | 
| Fred Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 31 |  | 
|  | 32 | quiet = 0 | 
| Fred Drake | 77b76b6 | 2000-10-10 19:35:40 +0000 | [diff] [blame^] | 33 | rx = re.compile(r":ext:(?:[a-zA-Z0-9]+)@cvs\.([a-zA-Z0-9]+).sourceforge.net:" | 
|  | 34 | r"/cvsroot/\1") | 
| Fred Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 35 |  | 
|  | 36 |  | 
|  | 37 | def 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 Drake | 77b76b6 | 2000-10-10 19:35:40 +0000 | [diff] [blame^] | 78 | 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 Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 98 | if cvstag: | 
| Fred Drake | 77b76b6 | 2000-10-10 19:35:40 +0000 | [diff] [blame^] | 99 | run("cvs -d%s export -r %s -d Doc python/dist/src/Doc" | 
|  | 100 | % (cvsroot, cvstag)) | 
| Fred Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 101 | else: | 
| Fred Drake | 77b76b6 | 2000-10-10 19:35:40 +0000 | [diff] [blame^] | 102 | run("cvs -Q -d%s checkout -d Doc python/dist/src/Doc" % cvsroot) | 
| Fred Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 103 | # remove CVS directories | 
| Fred Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 104 | for p in ('*/CVS', '*/*/CVS', '*/*/*/CVS'): | 
|  | 105 | map(shutil.rmtree, glob.glob(p)) | 
| Fred Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 106 | if tools: | 
| Fred Drake | 77b76b6 | 2000-10-10 19:35:40 +0000 | [diff] [blame^] | 107 | archive = "doctools-" + release | 
| Fred Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 108 | # we don't want the actual documents in this case: | 
| Fred Drake | 77b76b6 | 2000-10-10 19:35:40 +0000 | [diff] [blame^] | 109 | 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 Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 112 | else: | 
|  | 113 | archive = "latex-" + release | 
|  | 114 |  | 
|  | 115 | # XXX should also remove the .cvsignore files at this point | 
|  | 116 |  | 
|  | 117 | os.chdir(tempdir) | 
| Fred Drake | 77b76b6 | 2000-10-10 19:35:40 +0000 | [diff] [blame^] | 118 | archive = os.path.join(pwd, archive) | 
| Fred Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 119 | 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 Drake | ba82878 | 2000-04-03 04:19:14 +0000 | [diff] [blame] | 127 | if os.path.exists(archive + ".zip"): | 
|  | 128 | os.unlink(archive + ".zip") | 
|  | 129 | run("zip -q -r9 %s.zip Python-%s" | 
| Fred Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 130 | % (archive, release)) | 
|  | 131 |  | 
|  | 132 | # clean up the work area: | 
| Fred Drake | 77b76b6 | 2000-10-10 19:35:40 +0000 | [diff] [blame^] | 133 | os.chdir(pwd) | 
| Fred Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 134 | shutil.rmtree(tempdir) | 
|  | 135 |  | 
|  | 136 |  | 
|  | 137 | def run(cmd): | 
|  | 138 | if quiet < 2: | 
|  | 139 | print "+++", cmd | 
|  | 140 | if quiet: | 
| Fred Drake | 77b76b6 | 2000-10-10 19:35:40 +0000 | [diff] [blame^] | 141 | cmd = "%s >/dev/null" % cmd | 
| Fred Drake | 9f2b420 | 1999-08-02 20:19:17 +0000 | [diff] [blame] | 142 | rc = os.system(cmd) | 
|  | 143 | if rc: | 
|  | 144 | sys.exit(rc) | 
|  | 145 |  | 
|  | 146 |  | 
|  | 147 | def 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 |  | 
|  | 159 | if __name__ == "__main__": | 
|  | 160 | main() |