Mercurial > treepkg > treepkg
annotate treepkg/packager.py @ 276:f3dee156e3e3
Add pkgbaseversion parameter to the prepare_sources_for_tarball method
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Thu, 07 May 2009 16:01:10 +0000 |
parents | 2676abfc0e1d |
children | 2b9d94f0ccad |
rev | line source |
---|---|
222
01c043f13f13
Remove the unused PackageTrack.last_packaged_revision method and
Bernhard Herzog <bh@intevation.de>
parents:
207
diff
changeset
|
1 # Copyright (C) 2007, 2008, 2009 by Intevation GmbH |
0 | 2 # Authors: |
3 # Bernhard Herzog <bh@intevation.de> | |
4 # | |
5 # This program is free software under the GPL (>=v2) | |
6 # Read the file COPYING coming with the software for details. | |
7 | |
8 """Classes to automatically build debian packages from subversion checkouts""" | |
9 | |
10 import os | |
11 import time | |
12 import re | |
13 import logging | |
14 import shutil | |
16
7c55f3879c4d
Use the new status class and report start/stop time too
Bernhard Herzog <bh@intevation.de>
parents:
14
diff
changeset
|
15 import datetime |
113
312949e7628d
Add a smarter way to load the packager modules: Add the function
Bernhard Herzog <bh@intevation.de>
parents:
112
diff
changeset
|
16 import new |
0 | 17 |
18 import util | |
231
7dbf0a3443bb
Use treepkg.subversion.ManualWorkingCopy for the debian directory in a
Bernhard Herzog <bh@intevation.de>
parents:
229
diff
changeset
|
19 from subversion import SvnRepository, SvnWorkingCopy, ManualWorkingCopy |
0 | 20 import run |
16
7c55f3879c4d
Use the new status class and report start/stop time too
Bernhard Herzog <bh@intevation.de>
parents:
14
diff
changeset
|
21 import status |
128
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
22 import debian |
45
3e610233ccfe
use cmdexpand when calling subprocesses
Bernhard Herzog <bh@intevation.de>
parents:
41
diff
changeset
|
23 from cmdexpand import cmdexpand |
112
cea98d4e4a6a
Abstract the pbuilder calls into the new class treepkg.builder.PBuilder.
Bernhard Herzog <bh@intevation.de>
parents:
106
diff
changeset
|
24 from builder import PBuilder |
0 | 25 |
135
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
26 def _fromparent(attr): |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
27 """Creates a property that delegates its value to self.parent.<attr>""" |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
28 def get(self): |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
29 return getattr(self.parent, attr) |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
30 return property(get) |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
31 |
0 | 32 |
33 class SourcePackager(object): | |
34 | |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
35 # Derived classes must supply the package basename |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
36 pkg_basename = None |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
37 |
274
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
38 # Derived classes may want to override this message |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
39 changemsg_template = "Update to revision %(revision)d" |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
40 |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
41 |
135
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
42 track = _fromparent("track") |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
43 revision = _fromparent("revision") |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
44 status = _fromparent("status") |
136
5598014b2a1d
Add a log/ subdir for each revision. The filename is available as the
Bernhard Herzog <bh@intevation.de>
parents:
135
diff
changeset
|
45 log_dir = _fromparent("log_dir") |
135
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
46 work_dir = _fromparent("work_dir") |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
47 src_dir = _fromparent("src_dir") |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
48 |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
49 def __init__(self, parent): |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
50 self.parent = parent |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
51 assert(self.pkg_basename) |
0 | 52 |
53 def determine_package_version(self, directory): | |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
54 """Returns the version number of the new package as a string |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
55 |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
56 The directory parameter is the name of the directory containing |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
57 the newly exported sources. The sources were exported with the |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
58 export_sources method. |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
59 |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
60 The default implementation simply returns the revision converted |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
61 to a string. |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
62 """ |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
63 return str(self.revision) |
0 | 64 |
65 def export_sources(self): | |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
66 """Export the sources from the subversion working directory |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
67 |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
68 This method first exports the sources to a temporary directory |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
69 and then renames the directory. The new name is of the form |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
70 |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
71 <pkg_basename>-<version> |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
72 |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
73 Where pkg_basename is the value of self.pkg_basename and version |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
74 is the return value of the determine_package_version() method. |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
75 """ |
0 | 76 temp_dir = os.path.join(self.work_dir, "temp") |
53
74cd21b6400b
rename some variables from pkg_track to track
Bernhard Herzog <bh@intevation.de>
parents:
52
diff
changeset
|
77 self.track.export_sources(temp_dir) |
0 | 78 |
79 pkgbaseversion = self.determine_package_version(temp_dir) | |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
80 pkgbasedir = os.path.join(self.work_dir, |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
81 self.pkg_basename + "-" + pkgbaseversion) |
0 | 82 |
83 os.rename(temp_dir, pkgbasedir) | |
84 return pkgbaseversion, pkgbasedir | |
85 | |
86 | |
276
f3dee156e3e3
Add pkgbaseversion parameter to the prepare_sources_for_tarball method
Bernhard Herzog <bh@intevation.de>
parents:
274
diff
changeset
|
87 def prepare_sources_for_tarball(self, pkgbasedir, pkgbaseversion): |
274
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
88 """Prepare the exported sources prior to creating the tarball. |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
89 |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
90 The default implementation does nothing. Derived classes should |
274
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
91 override this method if necessary to e.g. update the version |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
92 numbers in the code. |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
93 """ |
0 | 94 |
207
b82fe4d25893
SourcePackager.create_tarball: add parameter to specify compression method
Bernhard Herzog <bh@intevation.de>
parents:
202
diff
changeset
|
95 def create_tarball(self, tarballname, workdir, basedir, compression="gz"): |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
96 """Creates a new tarball. |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
97 |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
98 Parameters: |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
99 |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
100 tarballname -- the filename of the new tarball |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
101 workdir -- The directory into which to change before running tar. |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
102 (actually this is done with GNUI tar's -C option) |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
103 basedir -- The basedirectory of the files that are packaged |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
104 into the tarfile. This should be a relative |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
105 filename directly in workdir. |
207
b82fe4d25893
SourcePackager.create_tarball: add parameter to specify compression method
Bernhard Herzog <bh@intevation.de>
parents:
202
diff
changeset
|
106 compression -- The compression method to use as a string. |
b82fe4d25893
SourcePackager.create_tarball: add parameter to specify compression method
Bernhard Herzog <bh@intevation.de>
parents:
202
diff
changeset
|
107 Suported are 'gz' for gzip compression (the |
b82fe4d25893
SourcePackager.create_tarball: add parameter to specify compression method
Bernhard Herzog <bh@intevation.de>
parents:
202
diff
changeset
|
108 default) and 'bz2' for bzip2. |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
109 """ |
0 | 110 logging.info("Creating tarball %r", tarballname) |
207
b82fe4d25893
SourcePackager.create_tarball: add parameter to specify compression method
Bernhard Herzog <bh@intevation.de>
parents:
202
diff
changeset
|
111 if compression == "gz": |
b82fe4d25893
SourcePackager.create_tarball: add parameter to specify compression method
Bernhard Herzog <bh@intevation.de>
parents:
202
diff
changeset
|
112 compression_flag = "z" |
b82fe4d25893
SourcePackager.create_tarball: add parameter to specify compression method
Bernhard Herzog <bh@intevation.de>
parents:
202
diff
changeset
|
113 elif compression == "bz2": |
b82fe4d25893
SourcePackager.create_tarball: add parameter to specify compression method
Bernhard Herzog <bh@intevation.de>
parents:
202
diff
changeset
|
114 compression_flag = "j" |
b82fe4d25893
SourcePackager.create_tarball: add parameter to specify compression method
Bernhard Herzog <bh@intevation.de>
parents:
202
diff
changeset
|
115 else: |
b82fe4d25893
SourcePackager.create_tarball: add parameter to specify compression method
Bernhard Herzog <bh@intevation.de>
parents:
202
diff
changeset
|
116 raise ValueError("Unknown compression method %r" % compression) |
b82fe4d25893
SourcePackager.create_tarball: add parameter to specify compression method
Bernhard Herzog <bh@intevation.de>
parents:
202
diff
changeset
|
117 |
b82fe4d25893
SourcePackager.create_tarball: add parameter to specify compression method
Bernhard Herzog <bh@intevation.de>
parents:
202
diff
changeset
|
118 run.call(cmdexpand("tar c -$compression_flag -f $tarballname" |
b82fe4d25893
SourcePackager.create_tarball: add parameter to specify compression method
Bernhard Herzog <bh@intevation.de>
parents:
202
diff
changeset
|
119 " -C $workdir $basedir", **locals())) |
0 | 120 |
121 def copy_debian_directory(self, pkgbasedir, pkgbaseversion, changemsg): | |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
122 """Copies the debian directory and updates the copy's changelog |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
123 |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
124 Parameter: |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
125 pkgbasedir -- The directory holding the unpacked source package |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
126 pkgbaseversion -- The version to update the changelog to |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
127 changemsg -- The message for the changelog |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
128 |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
129 When determining the actual version for the new package, this |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
130 function looks at the previous version in the changelog. If it |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
131 has a prefix separated from the version number by a colon this |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
132 prefix is prepended to the pkgbaseversion parameter. Debian |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
133 uses such prefixes for the kde packages. |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
134 """ |
0 | 135 debian_dir = os.path.join(pkgbasedir, "debian") |
136 changelog = os.path.join(debian_dir, "changelog") | |
137 | |
53
74cd21b6400b
rename some variables from pkg_track to track
Bernhard Herzog <bh@intevation.de>
parents:
52
diff
changeset
|
138 self.track.copy_debian_directory(debian_dir) |
0 | 139 |
140 logging.info("Updating %r", changelog) | |
141 oldversion = util.debian_changelog_version(changelog) | |
142 if ":" in oldversion: | |
143 oldversionprefix = oldversion.split(":")[0] + ":" | |
144 else: | |
145 oldversionprefix = "" | |
93
73c67372c7f7
Make the prefix used in the debian revision number configurable.
Bernhard Herzog <bh@intevation.de>
parents:
91
diff
changeset
|
146 debrev = self.track.debrevision_prefix + "1" |
45
3e610233ccfe
use cmdexpand when calling subprocesses
Bernhard Herzog <bh@intevation.de>
parents:
41
diff
changeset
|
147 run.call(cmdexpand("debchange -c $changelog" |
93
73c67372c7f7
Make the prefix used in the debian revision number configurable.
Bernhard Herzog <bh@intevation.de>
parents:
91
diff
changeset
|
148 " -v ${oldversionprefix}${pkgbaseversion}-${debrev}" |
45
3e610233ccfe
use cmdexpand when calling subprocesses
Bernhard Herzog <bh@intevation.de>
parents:
41
diff
changeset
|
149 " $changemsg", **locals()), |
53
74cd21b6400b
rename some variables from pkg_track to track
Bernhard Herzog <bh@intevation.de>
parents:
52
diff
changeset
|
150 env=self.track.debian_environment()) |
0 | 151 |
152 | |
153 def create_source_package(self, pkgbasedir, origtargz): | |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
154 """Creates a new source package from pkgbasedir and origtargz""" |
194
86360f3d5611
Log the output of the dpkg-source call to dpkg_source.txt.
Bernhard Herzog <bh@intevation.de>
parents:
191
diff
changeset
|
155 util.ensure_directory(self.log_dir) |
86360f3d5611
Log the output of the dpkg-source call to dpkg_source.txt.
Bernhard Herzog <bh@intevation.de>
parents:
191
diff
changeset
|
156 dpkg_source_log = os.path.join(self.log_dir, "dpkg_source.txt") |
86360f3d5611
Log the output of the dpkg-source call to dpkg_source.txt.
Bernhard Herzog <bh@intevation.de>
parents:
191
diff
changeset
|
157 logging.info("Creating new source package; logging to %s", |
86360f3d5611
Log the output of the dpkg-source call to dpkg_source.txt.
Bernhard Herzog <bh@intevation.de>
parents:
191
diff
changeset
|
158 dpkg_source_log) |
45
3e610233ccfe
use cmdexpand when calling subprocesses
Bernhard Herzog <bh@intevation.de>
parents:
41
diff
changeset
|
159 run.call(cmdexpand("dpkg-source -b $directory $tarball", |
3e610233ccfe
use cmdexpand when calling subprocesses
Bernhard Herzog <bh@intevation.de>
parents:
41
diff
changeset
|
160 directory=os.path.basename(pkgbasedir), |
3e610233ccfe
use cmdexpand when calling subprocesses
Bernhard Herzog <bh@intevation.de>
parents:
41
diff
changeset
|
161 tarball=os.path.basename(origtargz)), |
0 | 162 cwd=os.path.dirname(pkgbasedir), |
194
86360f3d5611
Log the output of the dpkg-source call to dpkg_source.txt.
Bernhard Herzog <bh@intevation.de>
parents:
191
diff
changeset
|
163 logfile=dpkg_source_log, |
53
74cd21b6400b
rename some variables from pkg_track to track
Bernhard Herzog <bh@intevation.de>
parents:
52
diff
changeset
|
164 env=self.track.debian_environment()) |
0 | 165 |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
166 def move_source_package(self, pkgbasename): |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
167 """Moves the new source package from the work_dir to the src_dir""" |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
168 logging.info("Moving source package to %r", self.src_dir) |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
169 util.ensure_directory(self.src_dir) |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
170 for filename in [filename for filename in os.listdir(self.work_dir) |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
171 if filename.startswith(pkgbasename)]: |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
172 os.rename(os.path.join(self.work_dir, filename), |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
173 os.path.join(self.src_dir, filename)) |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
174 |
179
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
175 def sign_package(self): |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
176 """Signs the .dsc file created buy the instance""" |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
177 self.track.sign_file(util.listdir_abs(self.src_dir, "*.dsc")[0]) |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
178 |
0 | 179 def package(self): |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
180 """Creates a source package from a subversion checkout. |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
181 |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
182 After setting up the working directory, this method calls the |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
183 do_package method to do the actual packaging. Afterwards the |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
184 work directory is removed. |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
185 """ |
0 | 186 util.ensure_directory(self.work_dir) |
187 try: | |
41
f7ec40638a06
use the enums for the status field of RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents:
36
diff
changeset
|
188 self.status.creating_source_package() |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
189 self.do_package() |
179
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
190 self.sign_package() |
41
f7ec40638a06
use the enums for the status field of RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents:
36
diff
changeset
|
191 self.status.source_package_created() |
0 | 192 finally: |
193 logging.info("Removing workdir %r", self.work_dir) | |
194 shutil.rmtree(self.work_dir) | |
195 | |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
196 def do_package(self): |
274
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
197 """Does the work of creating a source package.""" |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
198 pkgbaseversion, pkgbasedir = self.export_sources() |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
199 |
274
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
200 pkgbasename = self.pkg_basename + "_" + pkgbaseversion |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
201 origtargz = os.path.join(self.work_dir, |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
202 pkgbasename + ".orig.tar.gz") |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
203 |
276
f3dee156e3e3
Add pkgbaseversion parameter to the prepare_sources_for_tarball method
Bernhard Herzog <bh@intevation.de>
parents:
274
diff
changeset
|
204 self.prepare_sources_for_tarball(pkgbasedir, pkgbaseversion) |
274
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
205 |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
206 self.create_tarball(origtargz, self.work_dir, |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
207 os.path.basename(pkgbasedir)) |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
208 |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
209 changemsg = self.changemsg_template % dict(revision=self.revision) |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
210 self.copy_debian_directory(pkgbasedir, pkgbaseversion, |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
211 changemsg) |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
212 |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
213 self.create_source_package(pkgbasedir, origtargz) |
2676abfc0e1d
Refactoring: Implement do_package in treepkg.packager.SourcePackager.
Bernhard Herzog <bh@intevation.de>
parents:
261
diff
changeset
|
214 self.move_source_package(pkgbasename) |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
215 |
0 | 216 |
217 class BinaryPackager(object): | |
218 | |
135
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
219 track = _fromparent("track") |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
220 status = _fromparent("status") |
136
5598014b2a1d
Add a log/ subdir for each revision. The filename is available as the
Bernhard Herzog <bh@intevation.de>
parents:
135
diff
changeset
|
221 log_dir = _fromparent("log_dir") |
135
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
222 binary_dir = _fromparent("binary_dir") |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
223 |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
224 def __init__(self, parent, dsc_file, logfile): |
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
225 self.parent = parent |
0 | 226 self.dsc_file = dsc_file |
227 self.logfile = logfile | |
228 | |
229 def package(self): | |
41
f7ec40638a06
use the enums for the status field of RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents:
36
diff
changeset
|
230 self.status.creating_binary_package() |
0 | 231 util.ensure_directory(self.binary_dir) |
149
4526105f81a7
Make sure the log dir exists before attempting to run pbuilder build
Bernhard Herzog <bh@intevation.de>
parents:
143
diff
changeset
|
232 util.ensure_directory(self.log_dir) |
54 | 233 logging.info("Building binary package; logging to %r", self.logfile) |
112
cea98d4e4a6a
Abstract the pbuilder calls into the new class treepkg.builder.PBuilder.
Bernhard Herzog <bh@intevation.de>
parents:
106
diff
changeset
|
234 self.track.builder.build(self.dsc_file, self.binary_dir, self.logfile) |
179
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
235 self.sign_package() |
41
f7ec40638a06
use the enums for the status field of RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents:
36
diff
changeset
|
236 self.status.binary_package_created() |
0 | 237 |
179
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
238 def sign_package(self): |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
239 """Signs the .changes file created buy the instance""" |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
240 self.track.sign_file(util.listdir_abs(self.binary_dir, "*.changes")[0]) |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
241 |
0 | 242 |
243 class RevisionPackager(object): | |
244 | |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
245 source_packager_cls = SourcePackager |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
246 binary_packager_cls = BinaryPackager |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
247 |
260
6aeae11ca7fe
Add tag parameter to RevisionPackager constructor. The tag is stored in
Bernhard Herzog <bh@intevation.de>
parents:
238
diff
changeset
|
248 def __init__(self, track, revision, rules_revision, tag=""): |
53
74cd21b6400b
rename some variables from pkg_track to track
Bernhard Herzog <bh@intevation.de>
parents:
52
diff
changeset
|
249 self.track = track |
0 | 250 self.revision = revision |
229
653a45adda50
Prepare for svn managed debian rules directories. So far, the directory
Bernhard Herzog <bh@intevation.de>
parents:
224
diff
changeset
|
251 self.rules_revision = rules_revision |
653a45adda50
Prepare for svn managed debian rules directories. So far, the directory
Bernhard Herzog <bh@intevation.de>
parents:
224
diff
changeset
|
252 self.base_dir = self.track.pkg_dir_for_revision(self.revision, |
653a45adda50
Prepare for svn managed debian rules directories. So far, the directory
Bernhard Herzog <bh@intevation.de>
parents:
224
diff
changeset
|
253 rules_revision) |
36
086c68ca51d2
rename Status to RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents:
26
diff
changeset
|
254 self.status = status.RevisionStatus(os.path.join(self.base_dir, |
086c68ca51d2
rename Status to RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents:
26
diff
changeset
|
255 "status")) |
260
6aeae11ca7fe
Add tag parameter to RevisionPackager constructor. The tag is stored in
Bernhard Herzog <bh@intevation.de>
parents:
238
diff
changeset
|
256 if tag: |
6aeae11ca7fe
Add tag parameter to RevisionPackager constructor. The tag is stored in
Bernhard Herzog <bh@intevation.de>
parents:
238
diff
changeset
|
257 util.ensure_directory(self.base_dir) |
6aeae11ca7fe
Add tag parameter to RevisionPackager constructor. The tag is stored in
Bernhard Herzog <bh@intevation.de>
parents:
238
diff
changeset
|
258 self.status.tags = tag |
0 | 259 |
172
06af36f915f2
Move the filenameproperty factory from treepkg/packager.py to
Bernhard Herzog <bh@intevation.de>
parents:
168
diff
changeset
|
260 log_dir = util.filenameproperty("log") |
06af36f915f2
Move the filenameproperty factory from treepkg/packager.py to
Bernhard Herzog <bh@intevation.de>
parents:
168
diff
changeset
|
261 work_dir = util.filenameproperty("work") |
06af36f915f2
Move the filenameproperty factory from treepkg/packager.py to
Bernhard Herzog <bh@intevation.de>
parents:
168
diff
changeset
|
262 binary_dir = util.filenameproperty("binary") |
06af36f915f2
Move the filenameproperty factory from treepkg/packager.py to
Bernhard Herzog <bh@intevation.de>
parents:
168
diff
changeset
|
263 src_dir = util.filenameproperty("src") |
06af36f915f2
Move the filenameproperty factory from treepkg/packager.py to
Bernhard Herzog <bh@intevation.de>
parents:
168
diff
changeset
|
264 build_log = util.filenameproperty("build_log.txt", dir_attr="log_dir") |
0 | 265 |
266 def find_dsc_file(self): | |
267 for filename in os.listdir(self.src_dir): | |
268 if filename.endswith(".dsc"): | |
269 return os.path.join(self.src_dir, filename) | |
270 return None | |
271 | |
18
d5c24cfce05e
Improve access to a RevisionPackager's build_log
Bernhard Herzog <bh@intevation.de>
parents:
16
diff
changeset
|
272 def has_build_log(self): |
d5c24cfce05e
Improve access to a RevisionPackager's build_log
Bernhard Herzog <bh@intevation.de>
parents:
16
diff
changeset
|
273 return os.path.exists(self.build_log) |
d5c24cfce05e
Improve access to a RevisionPackager's build_log
Bernhard Herzog <bh@intevation.de>
parents:
16
diff
changeset
|
274 |
140
0da76aee8035
Add RevisionPackager method list_log_files which returns a description
Bernhard Herzog <bh@intevation.de>
parents:
139
diff
changeset
|
275 def list_log_files(self): |
0da76aee8035
Add RevisionPackager method list_log_files which returns a description
Bernhard Herzog <bh@intevation.de>
parents:
139
diff
changeset
|
276 """Returns a list describing the logfiles available for the revision. |
0da76aee8035
Add RevisionPackager method list_log_files which returns a description
Bernhard Herzog <bh@intevation.de>
parents:
139
diff
changeset
|
277 Each list item is a tuple of the form (TITLE, FILENAME) where |
0da76aee8035
Add RevisionPackager method list_log_files which returns a description
Bernhard Herzog <bh@intevation.de>
parents:
139
diff
changeset
|
278 TITLE is a string with a title usable in e. g. a web-page, and |
0da76aee8035
Add RevisionPackager method list_log_files which returns a description
Bernhard Herzog <bh@intevation.de>
parents:
139
diff
changeset
|
279 FILENAME is the absolute filename of the log file. |
0da76aee8035
Add RevisionPackager method list_log_files which returns a description
Bernhard Herzog <bh@intevation.de>
parents:
139
diff
changeset
|
280 """ |
0da76aee8035
Add RevisionPackager method list_log_files which returns a description
Bernhard Herzog <bh@intevation.de>
parents:
139
diff
changeset
|
281 files = [] |
0da76aee8035
Add RevisionPackager method list_log_files which returns a description
Bernhard Herzog <bh@intevation.de>
parents:
139
diff
changeset
|
282 if self.has_build_log(): |
0da76aee8035
Add RevisionPackager method list_log_files which returns a description
Bernhard Herzog <bh@intevation.de>
parents:
139
diff
changeset
|
283 files.append(("build log", self.build_log)) |
0da76aee8035
Add RevisionPackager method list_log_files which returns a description
Bernhard Herzog <bh@intevation.de>
parents:
139
diff
changeset
|
284 return files |
0da76aee8035
Add RevisionPackager method list_log_files which returns a description
Bernhard Herzog <bh@intevation.de>
parents:
139
diff
changeset
|
285 |
88
3ae54f99db26
Add methods RevisionPackager.list_source_files and
Bernhard Herzog <bh@intevation.de>
parents:
85
diff
changeset
|
286 def list_source_files(self): |
3ae54f99db26
Add methods RevisionPackager.list_source_files and
Bernhard Herzog <bh@intevation.de>
parents:
85
diff
changeset
|
287 """Returns a list with the names of the files of the source package. |
3ae54f99db26
Add methods RevisionPackager.list_source_files and
Bernhard Herzog <bh@intevation.de>
parents:
85
diff
changeset
|
288 The implementation assumes that all files in self.src_dir belong |
3ae54f99db26
Add methods RevisionPackager.list_source_files and
Bernhard Herzog <bh@intevation.de>
parents:
85
diff
changeset
|
289 to the source package. |
3ae54f99db26
Add methods RevisionPackager.list_source_files and
Bernhard Herzog <bh@intevation.de>
parents:
85
diff
changeset
|
290 """ |
3ae54f99db26
Add methods RevisionPackager.list_source_files and
Bernhard Herzog <bh@intevation.de>
parents:
85
diff
changeset
|
291 return sorted(util.listdir_abs(self.src_dir)) |
3ae54f99db26
Add methods RevisionPackager.list_source_files and
Bernhard Herzog <bh@intevation.de>
parents:
85
diff
changeset
|
292 |
3ae54f99db26
Add methods RevisionPackager.list_source_files and
Bernhard Herzog <bh@intevation.de>
parents:
85
diff
changeset
|
293 def list_binary_files(self): |
3ae54f99db26
Add methods RevisionPackager.list_source_files and
Bernhard Herzog <bh@intevation.de>
parents:
85
diff
changeset
|
294 """Returns a list with the names of the files of the binary packages. |
3ae54f99db26
Add methods RevisionPackager.list_source_files and
Bernhard Herzog <bh@intevation.de>
parents:
85
diff
changeset
|
295 The implementation assumes that all files in self.binary_dir belong |
3ae54f99db26
Add methods RevisionPackager.list_source_files and
Bernhard Herzog <bh@intevation.de>
parents:
85
diff
changeset
|
296 to the binary packages. |
3ae54f99db26
Add methods RevisionPackager.list_source_files and
Bernhard Herzog <bh@intevation.de>
parents:
85
diff
changeset
|
297 """ |
3ae54f99db26
Add methods RevisionPackager.list_source_files and
Bernhard Herzog <bh@intevation.de>
parents:
85
diff
changeset
|
298 return sorted(util.listdir_abs(self.binary_dir)) |
3ae54f99db26
Add methods RevisionPackager.list_source_files and
Bernhard Herzog <bh@intevation.de>
parents:
85
diff
changeset
|
299 |
0 | 300 def package(self): |
301 try: | |
16
7c55f3879c4d
Use the new status class and report start/stop time too
Bernhard Herzog <bh@intevation.de>
parents:
14
diff
changeset
|
302 util.ensure_directory(self.work_dir) |
7c55f3879c4d
Use the new status class and report start/stop time too
Bernhard Herzog <bh@intevation.de>
parents:
14
diff
changeset
|
303 self.status.start = datetime.datetime.utcnow() |
135
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
304 src_packager = self.source_packager_cls(self) |
0 | 305 src_packager.package() |
306 | |
307 dsc_file = self.find_dsc_file() | |
308 if dsc_file is None: | |
309 raise RuntimeError("Cannot find dsc File in %r" % self.src_dir) | |
310 | |
135
e5b4dea52297
Make more of RevisionPackager available to SourcePackager and
Bernhard Herzog <bh@intevation.de>
parents:
131
diff
changeset
|
311 bin_packager = self.binary_packager_cls(self, dsc_file, |
18
d5c24cfce05e
Improve access to a RevisionPackager's build_log
Bernhard Herzog <bh@intevation.de>
parents:
16
diff
changeset
|
312 self.build_log) |
0 | 313 bin_packager.package() |
16
7c55f3879c4d
Use the new status class and report start/stop time too
Bernhard Herzog <bh@intevation.de>
parents:
14
diff
changeset
|
314 self.status.stop = datetime.datetime.utcnow() |
0 | 315 except: |
41
f7ec40638a06
use the enums for the status field of RevisionStatus
Bernhard Herzog <bh@intevation.de>
parents:
36
diff
changeset
|
316 self.status.error() |
16
7c55f3879c4d
Use the new status class and report start/stop time too
Bernhard Herzog <bh@intevation.de>
parents:
14
diff
changeset
|
317 self.status.stop = datetime.datetime.utcnow() |
99
7888fe374e11
Add support for notification mails in case of build errors
Bernhard Herzog <bh@intevation.de>
parents:
98
diff
changeset
|
318 # set the notification status last to avoid race conditions. |
7888fe374e11
Add support for notification mails in case of build errors
Bernhard Herzog <bh@intevation.de>
parents:
98
diff
changeset
|
319 # The pending notification is for now the only situation |
7888fe374e11
Add support for notification mails in case of build errors
Bernhard Herzog <bh@intevation.de>
parents:
98
diff
changeset
|
320 # where another process might modify the status file (the |
7888fe374e11
Add support for notification mails in case of build errors
Bernhard Herzog <bh@intevation.de>
parents:
98
diff
changeset
|
321 # listpendingnotifications program will set it to |
7888fe374e11
Add support for notification mails in case of build errors
Bernhard Herzog <bh@intevation.de>
parents:
98
diff
changeset
|
322 # "notification_sent") |
7888fe374e11
Add support for notification mails in case of build errors
Bernhard Herzog <bh@intevation.de>
parents:
98
diff
changeset
|
323 self.status.notification_pending() |
0 | 324 raise |
325 | |
326 def remove_package_dir(self): | |
327 logging.info("Removing pkgdir %r", self.base_dir) | |
328 shutil.rmtree(self.base_dir) | |
329 | |
330 | |
52
78cf5f6778ec
Rename 'packagel ine' -> 'package track'
Bernhard Herzog <bh@intevation.de>
parents:
49
diff
changeset
|
331 class PackageTrack(object): |
0 | 332 |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
333 revision_packager_cls = RevisionPackager |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
334 |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
335 svn_external_subdirs = [] |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
336 |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
337 extra_config_desc = [] |
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
338 |
47
2802be410156
add config options pbuilderrc and use it when calling pbuilder
Bernhard Herzog <bh@intevation.de>
parents:
16
diff
changeset
|
339 def __init__(self, name, base_dir, svn_url, root_cmd, pbuilderrc, deb_email, |
93
73c67372c7f7
Make the prefix used in the debian revision number configurable.
Bernhard Herzog <bh@intevation.de>
parents:
91
diff
changeset
|
340 deb_fullname, packager_class="treepkg.packager", |
167
36004ee0b3a1
Introduce package track config option signing_key_id to specify the
Bernhard Herzog <bh@intevation.de>
parents:
149
diff
changeset
|
341 debrevision_prefix="treepkg", handle_dependencies=False, |
234
eaa696629a91
Add a way to specify the svn URL of the repository with the debian rules
Bernhard Herzog <bh@intevation.de>
parents:
232
diff
changeset
|
342 signing_key_id="", do_build=True, rules_svn_url=None): |
0 | 343 self.name = name |
344 self.base_dir = base_dir | |
176
7bde59aa611e
Make PBuilder.update_extra_pkg_dir create Release and Release.gpg files
Bernhard Herzog <bh@intevation.de>
parents:
172
diff
changeset
|
345 self.builder = PBuilder(pbuilderrc, root_cmd, |
7bde59aa611e
Make PBuilder.update_extra_pkg_dir create Release and Release.gpg files
Bernhard Herzog <bh@intevation.de>
parents:
172
diff
changeset
|
346 release_signing_keyid=signing_key_id) |
0 | 347 self.deb_email = deb_email |
348 self.deb_fullname = deb_fullname | |
93
73c67372c7f7
Make the prefix used in the debian revision number configurable.
Bernhard Herzog <bh@intevation.de>
parents:
91
diff
changeset
|
349 self.debrevision_prefix = debrevision_prefix |
167
36004ee0b3a1
Introduce package track config option signing_key_id to specify the
Bernhard Herzog <bh@intevation.de>
parents:
149
diff
changeset
|
350 self.signing_key_id = signing_key_id |
191
94fb3f3ab58b
When building a subset of tracks, make sure new packages are added to
Bernhard Herzog <bh@intevation.de>
parents:
190
diff
changeset
|
351 self.do_build = do_build |
128
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
352 self.handle_dependencies = handle_dependencies |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
353 self.dependencies = None |
229
653a45adda50
Prepare for svn managed debian rules directories. So far, the directory
Bernhard Herzog <bh@intevation.de>
parents:
224
diff
changeset
|
354 self.pkg_dir_template = "%(revision)d-%(rules_revision)d" |
653a45adda50
Prepare for svn managed debian rules directories. So far, the directory
Bernhard Herzog <bh@intevation.de>
parents:
224
diff
changeset
|
355 self.pkg_dir_regex = re.compile(r"(?P<revision>[0-9]+)" |
653a45adda50
Prepare for svn managed debian rules directories. So far, the directory
Bernhard Herzog <bh@intevation.de>
parents:
224
diff
changeset
|
356 r"-(?P<rules_revision>[0-9]+)$") |
224
6bac65dcf258
Handle the svn repositories and working copies in a more object oriented way
Bernhard Herzog <bh@intevation.de>
parents:
222
diff
changeset
|
357 repo = SvnRepository(svn_url, self.svn_external_subdirs) |
6bac65dcf258
Handle the svn repositories and working copies in a more object oriented way
Bernhard Herzog <bh@intevation.de>
parents:
222
diff
changeset
|
358 self.working_copy = SvnWorkingCopy(repo, self.checkout_dir, |
6bac65dcf258
Handle the svn repositories and working copies in a more object oriented way
Bernhard Herzog <bh@intevation.de>
parents:
222
diff
changeset
|
359 logger=logging) |
234
eaa696629a91
Add a way to specify the svn URL of the repository with the debian rules
Bernhard Herzog <bh@intevation.de>
parents:
232
diff
changeset
|
360 if rules_svn_url: |
eaa696629a91
Add a way to specify the svn URL of the repository with the debian rules
Bernhard Herzog <bh@intevation.de>
parents:
232
diff
changeset
|
361 repo = SvnRepository(rules_svn_url) |
eaa696629a91
Add a way to specify the svn URL of the repository with the debian rules
Bernhard Herzog <bh@intevation.de>
parents:
232
diff
changeset
|
362 self.rules_working_copy = SvnWorkingCopy(repo, self.debian_dir, |
eaa696629a91
Add a way to specify the svn URL of the repository with the debian rules
Bernhard Herzog <bh@intevation.de>
parents:
232
diff
changeset
|
363 logger=logging) |
eaa696629a91
Add a way to specify the svn URL of the repository with the debian rules
Bernhard Herzog <bh@intevation.de>
parents:
232
diff
changeset
|
364 else: |
eaa696629a91
Add a way to specify the svn URL of the repository with the debian rules
Bernhard Herzog <bh@intevation.de>
parents:
232
diff
changeset
|
365 self.rules_working_copy = ManualWorkingCopy(self.debian_dir) |
0 | 366 |
172
06af36f915f2
Move the filenameproperty factory from treepkg/packager.py to
Bernhard Herzog <bh@intevation.de>
parents:
168
diff
changeset
|
367 checkout_dir = util.filenameproperty("checkout") |
06af36f915f2
Move the filenameproperty factory from treepkg/packager.py to
Bernhard Herzog <bh@intevation.de>
parents:
168
diff
changeset
|
368 debian_dir = util.filenameproperty("debian") |
06af36f915f2
Move the filenameproperty factory from treepkg/packager.py to
Bernhard Herzog <bh@intevation.de>
parents:
168
diff
changeset
|
369 pkg_dir = util.filenameproperty("pkg") |
0 | 370 |
106
66cbfc772f84
Add bin/inittreepkg.py, a script to automate some of the installation
Bernhard Herzog <bh@intevation.de>
parents:
99
diff
changeset
|
371 def init_treepkg(self): |
66cbfc772f84
Add bin/inittreepkg.py, a script to automate some of the installation
Bernhard Herzog <bh@intevation.de>
parents:
99
diff
changeset
|
372 print "Initializing", self.name |
66cbfc772f84
Add bin/inittreepkg.py, a script to automate some of the installation
Bernhard Herzog <bh@intevation.de>
parents:
99
diff
changeset
|
373 if not os.path.exists(self.base_dir): |
66cbfc772f84
Add bin/inittreepkg.py, a script to automate some of the installation
Bernhard Herzog <bh@intevation.de>
parents:
99
diff
changeset
|
374 print "creating %s" % (self.base_dir,) |
66cbfc772f84
Add bin/inittreepkg.py, a script to automate some of the installation
Bernhard Herzog <bh@intevation.de>
parents:
99
diff
changeset
|
375 util.ensure_directory(self.base_dir) |
234
eaa696629a91
Add a way to specify the svn URL of the repository with the debian rules
Bernhard Herzog <bh@intevation.de>
parents:
232
diff
changeset
|
376 # TODO: handle case where debian directory is in version control |
106
66cbfc772f84
Add bin/inittreepkg.py, a script to automate some of the installation
Bernhard Herzog <bh@intevation.de>
parents:
99
diff
changeset
|
377 if not os.path.exists(self.debian_dir): |
66cbfc772f84
Add bin/inittreepkg.py, a script to automate some of the installation
Bernhard Herzog <bh@intevation.de>
parents:
99
diff
changeset
|
378 print ("TODO: the debian directory %s still has to be created" |
66cbfc772f84
Add bin/inittreepkg.py, a script to automate some of the installation
Bernhard Herzog <bh@intevation.de>
parents:
99
diff
changeset
|
379 % (self.debian_dir,)) |
66cbfc772f84
Add bin/inittreepkg.py, a script to automate some of the installation
Bernhard Herzog <bh@intevation.de>
parents:
99
diff
changeset
|
380 |
128
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
381 def determine_dependencies(self): |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
382 if self.dependencies is not None: |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
383 return |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
384 |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
385 requires = () |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
386 provides = () |
131
bea9f1cc0bef
Try to determine dependencies only when treepkg is fully configured.
Bernhard Herzog <bh@intevation.de>
parents:
128
diff
changeset
|
387 # only try to parse the control file if the debian directory |
bea9f1cc0bef
Try to determine dependencies only when treepkg is fully configured.
Bernhard Herzog <bh@intevation.de>
parents:
128
diff
changeset
|
388 # exists. If the debian directory doesn't exist yet, the tree |
bea9f1cc0bef
Try to determine dependencies only when treepkg is fully configured.
Bernhard Herzog <bh@intevation.de>
parents:
128
diff
changeset
|
389 # packager is likely still being configured and this code may be |
bea9f1cc0bef
Try to determine dependencies only when treepkg is fully configured.
Bernhard Herzog <bh@intevation.de>
parents:
128
diff
changeset
|
390 # run indirectly from e. g. bin/inittreepkg.py in which case the |
bea9f1cc0bef
Try to determine dependencies only when treepkg is fully configured.
Bernhard Herzog <bh@intevation.de>
parents:
128
diff
changeset
|
391 # init_treepkg method will report the missing debian |
bea9f1cc0bef
Try to determine dependencies only when treepkg is fully configured.
Bernhard Herzog <bh@intevation.de>
parents:
128
diff
changeset
|
392 if self.handle_dependencies and os.path.exists(self.debian_dir): |
128
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
393 control = debian.DebianControlFile(os.path.join(self.debian_dir, |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
394 "control")) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
395 requires = control.build_depends |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
396 provides = (pkg[0] for pkg in control.packages) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
397 self.dependencies = (set(requires), set(provides)) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
398 logging.debug("Track %s: build depends: %s", self.name, |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
399 " ".join(self.dependencies[0])) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
400 logging.debug("Track %s: provides: %s", self.name, |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
401 " ".join(self.dependencies[1])) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
402 |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
403 def dependencies_required(self): |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
404 """Returns a list of required packages""" |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
405 self.determine_dependencies() |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
406 return self.dependencies[0] |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
407 |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
408 def dependencies_provided(self): |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
409 """Returns a list of provided packages""" |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
410 self.determine_dependencies() |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
411 return self.dependencies[1] |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
412 |
229
653a45adda50
Prepare for svn managed debian rules directories. So far, the directory
Bernhard Herzog <bh@intevation.de>
parents:
224
diff
changeset
|
413 def pkg_dir_for_revision(self, revision, rules_revision): |
0 | 414 return os.path.join(self.pkg_dir, |
415 self.pkg_dir_template % locals()) | |
416 | |
417 def last_changed_revision(self): | |
224
6bac65dcf258
Handle the svn repositories and working copies in a more object oriented way
Bernhard Herzog <bh@intevation.de>
parents:
222
diff
changeset
|
418 return self.working_copy.last_changed_revision() |
0 | 419 |
11
6efe0bd3d8c1
Add method RevisionPackager.get_revision_numbers
Bernhard Herzog <bh@intevation.de>
parents:
10
diff
changeset
|
420 def get_revision_numbers(self): |
6efe0bd3d8c1
Add method RevisionPackager.get_revision_numbers
Bernhard Herzog <bh@intevation.de>
parents:
10
diff
changeset
|
421 """Returns a list of the numbers of the packaged revisions""" |
6efe0bd3d8c1
Add method RevisionPackager.get_revision_numbers
Bernhard Herzog <bh@intevation.de>
parents:
10
diff
changeset
|
422 revisions = [] |
6efe0bd3d8c1
Add method RevisionPackager.get_revision_numbers
Bernhard Herzog <bh@intevation.de>
parents:
10
diff
changeset
|
423 if os.path.exists(self.pkg_dir): |
6efe0bd3d8c1
Add method RevisionPackager.get_revision_numbers
Bernhard Herzog <bh@intevation.de>
parents:
10
diff
changeset
|
424 for filename in os.listdir(self.pkg_dir): |
6efe0bd3d8c1
Add method RevisionPackager.get_revision_numbers
Bernhard Herzog <bh@intevation.de>
parents:
10
diff
changeset
|
425 match = self.pkg_dir_regex.match(filename) |
6efe0bd3d8c1
Add method RevisionPackager.get_revision_numbers
Bernhard Herzog <bh@intevation.de>
parents:
10
diff
changeset
|
426 if match: |
229
653a45adda50
Prepare for svn managed debian rules directories. So far, the directory
Bernhard Herzog <bh@intevation.de>
parents:
224
diff
changeset
|
427 revisions.append((int(match.group("revision")), |
653a45adda50
Prepare for svn managed debian rules directories. So far, the directory
Bernhard Herzog <bh@intevation.de>
parents:
224
diff
changeset
|
428 int(match.group("rules_revision")))) |
85
31b0567df051
Make PackageTrack.get_revision_numbers return the revisions as a sorted
Bernhard Herzog <bh@intevation.de>
parents:
84
diff
changeset
|
429 revisions.sort() |
11
6efe0bd3d8c1
Add method RevisionPackager.get_revision_numbers
Bernhard Herzog <bh@intevation.de>
parents:
10
diff
changeset
|
430 return revisions |
6efe0bd3d8c1
Add method RevisionPackager.get_revision_numbers
Bernhard Herzog <bh@intevation.de>
parents:
10
diff
changeset
|
431 |
80
0af2fa3790e0
Add revision parameter to PackagerGroup.__init__ and some other methods
Bernhard Herzog <bh@intevation.de>
parents:
78
diff
changeset
|
432 def update_checkout(self, revision=None): |
224
6bac65dcf258
Handle the svn repositories and working copies in a more object oriented way
Bernhard Herzog <bh@intevation.de>
parents:
222
diff
changeset
|
433 """Updates the working copy. |
0 | 434 |
224
6bac65dcf258
Handle the svn repositories and working copies in a more object oriented way
Bernhard Herzog <bh@intevation.de>
parents:
222
diff
changeset
|
435 If the checkout_dir doesn't exist yet, a new checkout is made |
6bac65dcf258
Handle the svn repositories and working copies in a more object oriented way
Bernhard Herzog <bh@intevation.de>
parents:
222
diff
changeset
|
436 into that directory. The value of the revision parameter is |
6bac65dcf258
Handle the svn repositories and working copies in a more object oriented way
Bernhard Herzog <bh@intevation.de>
parents:
222
diff
changeset
|
437 passed through to the update method. |
0 | 438 """ |
224
6bac65dcf258
Handle the svn repositories and working copies in a more object oriented way
Bernhard Herzog <bh@intevation.de>
parents:
222
diff
changeset
|
439 self.working_copy.update_or_checkout(revision=revision) |
0 | 440 |
441 def export_sources(self, to_dir): | |
442 logging.info("Exporting sources for tarball to %r", to_dir) | |
224
6bac65dcf258
Handle the svn repositories and working copies in a more object oriented way
Bernhard Herzog <bh@intevation.de>
parents:
222
diff
changeset
|
443 self.working_copy.export(to_dir) |
0 | 444 |
445 def copy_debian_directory(self, to_dir): | |
446 logging.info("Copying debian directory to %r", to_dir) | |
231
7dbf0a3443bb
Use treepkg.subversion.ManualWorkingCopy for the debian directory in a
Bernhard Herzog <bh@intevation.de>
parents:
229
diff
changeset
|
447 self.rules_working_copy.export(to_dir) |
0 | 448 |
449 def debian_environment(self): | |
450 """Returns the environment variables for the debian commands""" | |
451 env = os.environ.copy() | |
452 env["DEBFULLNAME"] = self.deb_fullname | |
453 env["DEBEMAIL"] = self.deb_email | |
454 return env | |
455 | |
261
e574b03a2957
Move the code that creates the builder for a new revision to a separate method.
Bernhard Herzog <bh@intevation.de>
parents:
260
diff
changeset
|
456 def packager_for_new_revision(self): |
e574b03a2957
Move the code that creates the builder for a new revision to a separate method.
Bernhard Herzog <bh@intevation.de>
parents:
260
diff
changeset
|
457 current_revision = (self.last_changed_revision(), |
e574b03a2957
Move the code that creates the builder for a new revision to a separate method.
Bernhard Herzog <bh@intevation.de>
parents:
260
diff
changeset
|
458 self.rules_working_copy.last_changed_revision()) |
e574b03a2957
Move the code that creates the builder for a new revision to a separate method.
Bernhard Herzog <bh@intevation.de>
parents:
260
diff
changeset
|
459 logging.info("New revision is %s", current_revision) |
e574b03a2957
Move the code that creates the builder for a new revision to a separate method.
Bernhard Herzog <bh@intevation.de>
parents:
260
diff
changeset
|
460 if current_revision not in self.get_revision_numbers(): |
e574b03a2957
Move the code that creates the builder for a new revision to a separate method.
Bernhard Herzog <bh@intevation.de>
parents:
260
diff
changeset
|
461 logging.info("Revision %s has not been packaged yet", |
e574b03a2957
Move the code that creates the builder for a new revision to a separate method.
Bernhard Herzog <bh@intevation.de>
parents:
260
diff
changeset
|
462 current_revision) |
e574b03a2957
Move the code that creates the builder for a new revision to a separate method.
Bernhard Herzog <bh@intevation.de>
parents:
260
diff
changeset
|
463 return self.revision_packager_cls(self, *current_revision) |
e574b03a2957
Move the code that creates the builder for a new revision to a separate method.
Bernhard Herzog <bh@intevation.de>
parents:
260
diff
changeset
|
464 else: |
e574b03a2957
Move the code that creates the builder for a new revision to a separate method.
Bernhard Herzog <bh@intevation.de>
parents:
260
diff
changeset
|
465 logging.info("Revision %s has already been packaged.", |
e574b03a2957
Move the code that creates the builder for a new revision to a separate method.
Bernhard Herzog <bh@intevation.de>
parents:
260
diff
changeset
|
466 current_revision) |
e574b03a2957
Move the code that creates the builder for a new revision to a separate method.
Bernhard Herzog <bh@intevation.de>
parents:
260
diff
changeset
|
467 |
190
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
179
diff
changeset
|
468 def package_if_updated(self, revision=None, do_svn_update=True): |
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
179
diff
changeset
|
469 """Returns a new packager if the working copy has not been packaged yet. |
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
179
diff
changeset
|
470 If do_svn_update is true -- the default -- update the working |
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
179
diff
changeset
|
471 copy to the the revision specified with the revision parameter |
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
179
diff
changeset
|
472 or if revision is None, the latest revision in the repository.""" |
191
94fb3f3ab58b
When building a subset of tracks, make sure new packages are added to
Bernhard Herzog <bh@intevation.de>
parents:
190
diff
changeset
|
473 if not self.do_build: |
94fb3f3ab58b
When building a subset of tracks, make sure new packages are added to
Bernhard Herzog <bh@intevation.de>
parents:
190
diff
changeset
|
474 return None |
190
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
179
diff
changeset
|
475 if do_svn_update: |
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
179
diff
changeset
|
476 self.update_checkout(revision=revision) |
232
e3cda08d2619
When checking whether to build a new revision, also update the rules
Bernhard Herzog <bh@intevation.de>
parents:
231
diff
changeset
|
477 # TODO: what should happen with the debian checkout, if a |
e3cda08d2619
When checking whether to build a new revision, also update the rules
Bernhard Herzog <bh@intevation.de>
parents:
231
diff
changeset
|
478 # revision for the source checkoute was given? |
e3cda08d2619
When checking whether to build a new revision, also update the rules
Bernhard Herzog <bh@intevation.de>
parents:
231
diff
changeset
|
479 self.rules_working_copy.update_or_checkout() |
261
e574b03a2957
Move the code that creates the builder for a new revision to a separate method.
Bernhard Herzog <bh@intevation.de>
parents:
260
diff
changeset
|
480 return self.packager_for_new_revision() |
0 | 481 |
14
dfd89f81e66c
Add simple status report tool. Still using the old status files
Bernhard Herzog <bh@intevation.de>
parents:
11
diff
changeset
|
482 def get_revisions(self): |
dfd89f81e66c
Add simple status report tool. Still using the old status files
Bernhard Herzog <bh@intevation.de>
parents:
11
diff
changeset
|
483 """Returns RevisionPackager objects for each packaged revision""" |
229
653a45adda50
Prepare for svn managed debian rules directories. So far, the directory
Bernhard Herzog <bh@intevation.de>
parents:
224
diff
changeset
|
484 return [self.revision_packager_cls(self, revision, rules_revision) |
653a45adda50
Prepare for svn managed debian rules directories. So far, the directory
Bernhard Herzog <bh@intevation.de>
parents:
224
diff
changeset
|
485 for revision, rules_revision in self.get_revision_numbers()] |
14
dfd89f81e66c
Add simple status report tool. Still using the old status files
Bernhard Herzog <bh@intevation.de>
parents:
11
diff
changeset
|
486 |
179
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
487 def sign_file(self, filename): |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
488 """Signs a file using the debian.sign_file function. |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
489 The file is signed with the key indicated by the track's |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
490 signing_key_id attribute. If that is empty, the file is not |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
491 signed. |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
492 """ |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
493 if self.signing_key_id: |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
494 logging.info("Signing %r with key %r", filename, |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
495 self.signing_key_id) |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
496 debian.sign_file(filename, self.signing_key_id) |
952d366f7b14
Implement optional signing of .dsc and .changes files
Bernhard Herzog <bh@intevation.de>
parents:
176
diff
changeset
|
497 |
0 | 498 |
113
312949e7628d
Add a smarter way to load the packager modules: Add the function
Bernhard Herzog <bh@intevation.de>
parents:
112
diff
changeset
|
499 def import_packager_module(packager_class): |
312949e7628d
Add a smarter way to load the packager modules: Add the function
Bernhard Herzog <bh@intevation.de>
parents:
112
diff
changeset
|
500 """Import the packager module named by packager_class. |
312949e7628d
Add a smarter way to load the packager modules: Add the function
Bernhard Herzog <bh@intevation.de>
parents:
112
diff
changeset
|
501 |
312949e7628d
Add a smarter way to load the packager modules: Add the function
Bernhard Herzog <bh@intevation.de>
parents:
112
diff
changeset
|
502 The packager_class must be the full absolute module name for the |
125
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
503 packager. The function tries to find or create a suitable |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
504 PackageTrack class from this module using the following rules: |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
505 |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
506 - If the module contains a class called PackageTrack, use that. |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
507 |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
508 - Otherwise create one using the module's RevisionPackager class, |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
509 creating RevisionPackager if necessary. |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
510 |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
511 - If RevisionPackager needs to be created, it uses the module's |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
512 SourcePackager as source_packager_cls and if present also the |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
513 module's BinaryPackager as binary_packager_cls. If the module |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
514 does not have a BinaryPackager, the default BinaryPackager is |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
515 used. |
113
312949e7628d
Add a smarter way to load the packager modules: Add the function
Bernhard Herzog <bh@intevation.de>
parents:
112
diff
changeset
|
516 """ |
312949e7628d
Add a smarter way to load the packager modules: Add the function
Bernhard Herzog <bh@intevation.de>
parents:
112
diff
changeset
|
517 module = util.import_dotted_name(packager_class) |
312949e7628d
Add a smarter way to load the packager modules: Add the function
Bernhard Herzog <bh@intevation.de>
parents:
112
diff
changeset
|
518 if not hasattr(module, "PackageTrack"): |
125
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
519 if not hasattr(module, "RevisionPackager"): |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
520 binary_packager = getattr(module, "BinaryPackager", BinaryPackager) |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
521 module.RevisionPackager \ |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
522 = new.classobj("RevisionPackager", (RevisionPackager,), |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
523 dict(source_packager_cls=module.SourcePackager, |
34e08d52956e
Make the import_packager_module function more flexible. The modules may
Bernhard Herzog <bh@intevation.de>
parents:
113
diff
changeset
|
524 binary_packager_cls=binary_packager)) |
113
312949e7628d
Add a smarter way to load the packager modules: Add the function
Bernhard Herzog <bh@intevation.de>
parents:
112
diff
changeset
|
525 module.PackageTrack \ |
312949e7628d
Add a smarter way to load the packager modules: Add the function
Bernhard Herzog <bh@intevation.de>
parents:
112
diff
changeset
|
526 = new.classobj("PackageTrack", (PackageTrack,), |
312949e7628d
Add a smarter way to load the packager modules: Add the function
Bernhard Herzog <bh@intevation.de>
parents:
112
diff
changeset
|
527 dict(revision_packager_cls=module.RevisionPackager)) |
312949e7628d
Add a smarter way to load the packager modules: Add the function
Bernhard Herzog <bh@intevation.de>
parents:
112
diff
changeset
|
528 return module |
312949e7628d
Add a smarter way to load the packager modules: Add the function
Bernhard Herzog <bh@intevation.de>
parents:
112
diff
changeset
|
529 |
52
78cf5f6778ec
Rename 'packagel ine' -> 'package track'
Bernhard Herzog <bh@intevation.de>
parents:
49
diff
changeset
|
530 def create_package_track(packager_class, **kw): |
113
312949e7628d
Add a smarter way to load the packager modules: Add the function
Bernhard Herzog <bh@intevation.de>
parents:
112
diff
changeset
|
531 module = import_packager_module(packager_class) |
52
78cf5f6778ec
Rename 'packagel ine' -> 'package track'
Bernhard Herzog <bh@intevation.de>
parents:
49
diff
changeset
|
532 return module.PackageTrack(**kw) |
4
fee641fec94e
Separate the kolab specific parts.
Bernhard Herzog <bh@intevation.de>
parents:
2
diff
changeset
|
533 |
0 | 534 |
128
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
535 class CyclicDependencyError(Exception): |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
536 |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
537 """Exception thrown when a cycle is detected in the track dependencies""" |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
538 |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
539 def __init__(self, tracks): |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
540 Exception.__init__(self, |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
541 "Cyclic dependencies between" " tracks (%s)" |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
542 % ", ".join([track.name for track in tracks])) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
543 |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
544 |
7
96f4f58c62b5
Rename the Packager class to PackagerGroup
Bernhard Herzog <bh@intevation.de>
parents:
4
diff
changeset
|
545 class PackagerGroup(object): |
0 | 546 |
91
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
547 def __init__(self, package_tracks, check_interval, revision=None, |
190
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
179
diff
changeset
|
548 instructions_file=None, do_svn_update=True): |
52
78cf5f6778ec
Rename 'packagel ine' -> 'package track'
Bernhard Herzog <bh@intevation.de>
parents:
49
diff
changeset
|
549 self.package_tracks = package_tracks |
0 | 550 self.check_interval = check_interval |
80
0af2fa3790e0
Add revision parameter to PackagerGroup.__init__ and some other methods
Bernhard Herzog <bh@intevation.de>
parents:
78
diff
changeset
|
551 self.revision = revision |
190
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
179
diff
changeset
|
552 self.do_svn_update = do_svn_update |
91
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
553 self.instructions_file = instructions_file |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
554 self.instructions_file_removed = False |
128
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
555 self.sort_tracks() |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
556 |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
557 def sort_tracks(self): |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
558 """Sorts tracks for dependency handling""" |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
559 todo = self.package_tracks[:] |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
560 sorted = [] |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
561 seen = set() |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
562 |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
563 # dependencies that can be solved by one of the tracks |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
564 known = set() |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
565 for track in todo: |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
566 known |= track.dependencies_provided() |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
567 |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
568 while todo: |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
569 todo_again = [] |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
570 for track in todo: |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
571 if not track.handle_dependencies: |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
572 sorted.append(track) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
573 continue |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
574 |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
575 unmet = (track.dependencies_required() & known) - seen |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
576 if unmet: |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
577 todo_again.append(track) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
578 else: |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
579 sorted.append(track) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
580 seen |= track.dependencies_provided() |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
581 if todo_again == todo: |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
582 raise CyclicDependencyError(todo) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
583 todo = todo_again |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
584 |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
585 self.package_tracks = sorted |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
586 self.needed_binaries = set() |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
587 for track in self.package_tracks: |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
588 self.needed_binaries |= track.dependencies_required() |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
589 self.needed_binaries &= known |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
590 |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
591 logging.info("sorted track order: %s", |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
592 " ".join(track.name for track in sorted)) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
593 logging.info("binary packages needed as build dependencies: %s", |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
594 " ".join(self.needed_binaries)) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
595 |
0 | 596 |
597 def run(self): | |
7
96f4f58c62b5
Rename the Packager class to PackagerGroup
Bernhard Herzog <bh@intevation.de>
parents:
4
diff
changeset
|
598 """Runs the packager group indefinitely""" |
78
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
55
diff
changeset
|
599 logging.info("Starting in periodic check mode." |
9a602d8eaa60
initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents:
55
diff
changeset
|
600 " Will check every %d seconds", self.check_interval) |
0 | 601 last_check = -1 |
602 while 1: | |
603 now = time.time() | |
604 if now > last_check + self.check_interval: | |
91
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
605 if self.check_package_tracks(): |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
606 break |
0 | 607 last_check = now |
608 next_check = now + self.check_interval | |
609 to_sleep = next_check - time.time() | |
610 if to_sleep > 0: | |
611 logging.info("Next check at %s", | |
612 time.strftime("%Y-%m-%d %H:%M:%S", | |
613 time.localtime(next_check))) | |
614 time.sleep(to_sleep) | |
615 else: | |
616 logging.info("Next check now") | |
91
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
617 if self.should_stop(): |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
618 logging.info("Received stop instruction. Stopping.") |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
619 return |
0 | 620 |
52
78cf5f6778ec
Rename 'packagel ine' -> 'package track'
Bernhard Herzog <bh@intevation.de>
parents:
49
diff
changeset
|
621 def check_package_tracks(self): |
78cf5f6778ec
Rename 'packagel ine' -> 'package track'
Bernhard Herzog <bh@intevation.de>
parents:
49
diff
changeset
|
622 logging.info("Checking package tracks") |
91
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
623 self.clear_instruction() |
128
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
624 repeat = True |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
625 while repeat: |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
626 repeat = False |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
627 for track in self.package_tracks: |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
628 try: |
190
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
179
diff
changeset
|
629 packager = track.package_if_updated(revision=self.revision, |
e83db4482aab
Add runtreepkg.py command line option --no-svn-update to inhibit updates
Bernhard Herzog <bh@intevation.de>
parents:
179
diff
changeset
|
630 do_svn_update=self.do_svn_update) |
128
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
631 if packager: |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
632 packager.package() |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
633 repeat = self.install_dependencies(track, packager) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
634 if self.should_stop(): |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
635 logging.info("Received stop instruction. Stopping.") |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
636 return True |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
637 except: |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
638 logging.exception("An error occurred while" |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
639 " checking packager track %r", track.name) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
640 if repeat: |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
641 logging.info("Built binaries needed by other tracks." |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
642 " Starting over to ensure all dependencies" |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
643 " are met") |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
644 break |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
645 |
52
78cf5f6778ec
Rename 'packagel ine' -> 'package track'
Bernhard Herzog <bh@intevation.de>
parents:
49
diff
changeset
|
646 logging.info("Checked all package tracks") |
14
dfd89f81e66c
Add simple status report tool. Still using the old status files
Bernhard Herzog <bh@intevation.de>
parents:
11
diff
changeset
|
647 |
128
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
648 |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
649 def install_dependencies(self, track, packager): |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
650 """Add the binaries built by packager to the builder, if necessary. |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
651 It is necessary if any track depends on the packages. The |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
652 method simply installs all binary files built by the packger |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
653 instead of only those which are immediately required by a track. |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
654 This is done because tracks usually depend directly only on the |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
655 -dev packages which usually require another binary package built |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
656 at the same time. |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
657 """ |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
658 if (track.handle_dependencies |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
659 and track.dependencies_provided() & self.needed_binaries): |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
660 # FIXME: this basically assumes that all tracks use the same |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
661 # builder. This is true for now, but it is possible to |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
662 # configure treepkg with different builders for different |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
663 # tracks and we really should be installing the newly built |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
664 # binaries into the builder of the tracks which depends on |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
665 # them |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
666 binaries = packager.list_binary_files() |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
667 track.builder.add_binaries_to_extra_pkg(binaries) |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
668 return True |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
669 return False |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
670 |
5155b4f9443d
Add basic dependency handling to PackageTrack and PackagerGroup.
Bernhard Herzog <bh@intevation.de>
parents:
125
diff
changeset
|
671 |
52
78cf5f6778ec
Rename 'packagel ine' -> 'package track'
Bernhard Herzog <bh@intevation.de>
parents:
49
diff
changeset
|
672 def get_package_tracks(self): |
78cf5f6778ec
Rename 'packagel ine' -> 'package track'
Bernhard Herzog <bh@intevation.de>
parents:
49
diff
changeset
|
673 return self.package_tracks |
91
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
674 |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
675 def read_instruction(self): |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
676 if not self.instructions_file: |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
677 return "" |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
678 try: |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
679 f = open(self.instructions_file) |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
680 except (IOError, OSError): |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
681 return "" |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
682 try: |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
683 return f.read().strip() |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
684 finally: |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
685 f.close() |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
686 self.clear_instruction() |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
687 |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
688 def clear_instruction(self, force=False): |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
689 if self.instructions_file and (not self.instructions_file_removed |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
690 or force): |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
691 util.writefile(self.instructions_file, "") |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
692 self.instructions_file_removed = True |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
693 |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
694 def should_stop(self): |
3ed079a7174a
Implement a way to stop a running treepackager.
Bernhard Herzog <bh@intevation.de>
parents:
90
diff
changeset
|
695 return self.read_instruction() == "stop" |