annotate bin/publishpackages.py @ 98:f7b9c7113c46

Make packaging a specific revision work even if newer revisions have already been packaged. Add corresponding tests
author Bernhard Herzog <bh@intevation.de>
date Mon, 26 Nov 2007 15:17:04 +0000
parents 3caf4a5ecbf0
children ce03e24f6d0f
rev   line source
89
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
1 #! /usr/bin/python2.4
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
2 # Copyright (C) 2007 by Intevation GmbH
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
3 # Authors:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
4 # Bernhard Herzog <bh@intevation.de>
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
5 #
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
6 # This program is free software under the GPL (>=v2)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
7 # Read the file COPYING coming with the software for details.
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
8
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
9 """Publishes selected packages created by treepkg"""
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
10
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
11 import sys
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
12 import os
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
13 import shutil
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
14 from optparse import OptionParser
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
15 from ConfigParser import SafeConfigParser
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
16
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
17 import treepkgcmd
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
18 from treepkg.readconfig import read_config_section
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
19 from treepkg.run import call, capture_output
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
20 from treepkg.cmdexpand import cmdexpand
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
21 from treepkg.util import ensure_directory, listdir_abs
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
22
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
23
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
24 def remove_trailing_slashes(s):
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
25 return s.rstrip("/")
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
26
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
27 def expand_filename(filename):
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
28 """
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
29 Applies os.path.expanduser and os.path.expandvars to filename
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
30 """
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
31 return os.path.expandvars(os.path.expanduser(filename))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
32
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
33 config_desc = ["build_user", "build_host", "build_listpackages",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
34 "publish_user", "publish_host", "publish_apt_archive_update",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
35 ("publish_dir", remove_trailing_slashes),
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
36 ("cachedir",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
37 lambda s: expand_filename(remove_trailing_slashes(s)))]
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
38
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
39 def read_config(filename):
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
40 parser = SafeConfigParser()
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
41 parser.read([filename])
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
42 return read_config_section(parser, "publishpackages", config_desc)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
43
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
44 def parse_commandline():
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
45 parser = OptionParser()
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
46 parser.set_defaults(config_file=os.path.join(treepkgcmd.topdir,
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
47 "publishpackages.cfg"))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
48 parser.add_option("--config-file",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
49 help=("The configuration file."
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
50 " Default is publishpackages.cfg"))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
51 parser.add_option("--revision",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
52 help=("The revision whose files are to be published."
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
53 " If not given, the latest revision is used"))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
54 parser.add_option("--dist",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
55 help=("The debian distribution name to use on"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
56 " the publishing system"))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
57 parser.add_option("--section",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
58 help=("The debian distribution section name to use on"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
59 " the publishing system"))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
60 parser.add_option("--track",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
61 help=("The package track whose files are to be"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
62 " published"))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
63 return parser.parse_args()
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
64
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
65
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
66 def publish_packages_arch(variables, track, revision, dist, section, arch):
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
67 # create web-page on build host
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
68 if arch == "source":
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
69 variables["pkgtype"] = "--source"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
70 else:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
71 variables["pkgtype"] = "--binary"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
72
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
73 files = capture_output(cmdexpand("ssh $build_user$@$build_host"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
74 " $build_listpackages"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
75 " --track $track @revision $pkgtype",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
76 **variables)).strip().split("\n")
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
77 # scp the packages to the cache dir
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
78 cachedir = variables["cachedir"]
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
79 shutil.rmtree(cachedir, ignore_errors=True)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
80 ensure_directory(cachedir)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
81 userhost = "%(build_user)s@%(build_host)s:" % variables
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
82 call(cmdexpand("scp @files $cachedir/",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
83 files = [userhost + filename for filename in files],
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
84 **variables))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
85
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
86 # copy the packages to the remote publishing host. Create the
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
87 # destination directory if it doesn't exist yet.
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
88 destdir = os.path.join(variables["publish_dir"], dist, section, arch)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
89 call(cmdexpand("ssh $publish_user$@$publish_host mkdir --parents $destdir",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
90 destdir=destdir, **variables))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
91 call(cmdexpand("scp @files $publish_user$@$publish_host:$destdir",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
92 files=listdir_abs(cachedir), destdir=destdir,
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
93 **variables))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
94
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
95
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
96 def publish_packages(config_filename, track, revision, dist, section):
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
97 config = read_config(config_filename)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
98
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
99 variables = config.copy()
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
100 variables["track"] = track
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
101 if revision:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
102 variables["revision"] = ["--revision", revision]
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
103 else:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
104 variables["revision"] = []
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
105
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
106 for arch in ["binary-i386", "source"]:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
107 publish_packages_arch(variables, track, revision, dist, section, arch)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
108
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
109 # update apt archive
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
110 call(cmdexpand("ssh $publish_user$@$publish_host"
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
111 " $publish_apt_archive_update",
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
112 **variables))
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
113
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
114 def main():
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
115 options, args = parse_commandline()
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
116 for required_opt in ["track", "dist", "section"]:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
117 if getattr(options, required_opt) is None:
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
118 print >>sys.stderr, "The --%s option must be given" % required_opt
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
119 sys.exit(1)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
120 publish_packages(options.config_file, options.track, options.revision,
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
121 options.dist, options.section)
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
122
3caf4a5ecbf0 Add scripts that help publish the packages produced by the tree packager
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
123 main()
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)