Mercurial > treepkg > treepkg
comparison treepkg/packager.py @ 52:78cf5f6778ec
Rename 'packagel ine' -> 'package track'
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Tue, 03 Apr 2007 20:33:33 +0200 |
parents | 38d66dc6a1e5 |
children | 74cd21b6400b |
comparison
equal
deleted
inserted
replaced
50:225206553bba | 52:78cf5f6778ec |
---|---|
30 class SourcePackager(object): | 30 class SourcePackager(object): |
31 | 31 |
32 # Derived classes must supply the package basename | 32 # Derived classes must supply the package basename |
33 pkg_basename = None | 33 pkg_basename = None |
34 | 34 |
35 def __init__(self, pkg_line, status, work_dir, src_dir, revision): | 35 def __init__(self, pkg_track, status, work_dir, src_dir, revision): |
36 self.pkg_line = pkg_line | 36 self.pkg_track = pkg_track |
37 self.status = status | 37 self.status = status |
38 self.work_dir = work_dir | 38 self.work_dir = work_dir |
39 self.src_dir = src_dir | 39 self.src_dir = src_dir |
40 self.revision = revision | 40 self.revision = revision |
41 assert(self.pkg_basename) | 41 assert(self.pkg_basename) |
62 | 62 |
63 Where pkg_basename is the value of self.pkg_basename and version | 63 Where pkg_basename is the value of self.pkg_basename and version |
64 is the return value of the determine_package_version() method. | 64 is the return value of the determine_package_version() method. |
65 """ | 65 """ |
66 temp_dir = os.path.join(self.work_dir, "temp") | 66 temp_dir = os.path.join(self.work_dir, "temp") |
67 self.pkg_line.export_sources(temp_dir) | 67 self.pkg_track.export_sources(temp_dir) |
68 | 68 |
69 pkgbaseversion = self.determine_package_version(temp_dir) | 69 pkgbaseversion = self.determine_package_version(temp_dir) |
70 pkgbasedir = os.path.join(self.work_dir, | 70 pkgbasedir = os.path.join(self.work_dir, |
71 self.pkg_basename + "-" + pkgbaseversion) | 71 self.pkg_basename + "-" + pkgbaseversion) |
72 | 72 |
111 uses such prefixes for the kde packages. | 111 uses such prefixes for the kde packages. |
112 """ | 112 """ |
113 debian_dir = os.path.join(pkgbasedir, "debian") | 113 debian_dir = os.path.join(pkgbasedir, "debian") |
114 changelog = os.path.join(debian_dir, "changelog") | 114 changelog = os.path.join(debian_dir, "changelog") |
115 | 115 |
116 self.pkg_line.copy_debian_directory(debian_dir) | 116 self.pkg_track.copy_debian_directory(debian_dir) |
117 | 117 |
118 logging.info("Updating %r", changelog) | 118 logging.info("Updating %r", changelog) |
119 oldversion = util.debian_changelog_version(changelog) | 119 oldversion = util.debian_changelog_version(changelog) |
120 if ":" in oldversion: | 120 if ":" in oldversion: |
121 oldversionprefix = oldversion.split(":")[0] + ":" | 121 oldversionprefix = oldversion.split(":")[0] + ":" |
122 else: | 122 else: |
123 oldversionprefix = "" | 123 oldversionprefix = "" |
124 run.call(["debchange", "-c", changelog, | 124 run.call(["debchange", "-c", changelog, |
125 "-v", oldversionprefix + pkgbaseversion + "-kk1", | 125 "-v", oldversionprefix + pkgbaseversion + "-kk1", |
126 changemsg], | 126 changemsg], |
127 env=self.pkg_line.debian_environment()) | 127 env=self.pkg_track.debian_environment()) |
128 | 128 |
129 | 129 |
130 def create_source_package(self, pkgbasedir, origtargz): | 130 def create_source_package(self, pkgbasedir, origtargz): |
131 """Creates a new source package from pkgbasedir and origtargz""" | 131 """Creates a new source package from pkgbasedir and origtargz""" |
132 logging.info("Creating new source package") | 132 logging.info("Creating new source package") |
133 run.call(["dpkg-source", "-b", os.path.basename(pkgbasedir), | 133 run.call(["dpkg-source", "-b", os.path.basename(pkgbasedir), |
134 os.path.basename(origtargz)], | 134 os.path.basename(origtargz)], |
135 cwd=os.path.dirname(pkgbasedir), | 135 cwd=os.path.dirname(pkgbasedir), |
136 suppress_output=True, | 136 suppress_output=True, |
137 env=self.pkg_line.debian_environment()) | 137 env=self.pkg_track.debian_environment()) |
138 | 138 |
139 def move_source_package(self, pkgbasename): | 139 def move_source_package(self, pkgbasename): |
140 """Moves the new source package from the work_dir to the src_dir""" | 140 """Moves the new source package from the work_dir to the src_dir""" |
141 logging.info("Moving source package to %r", self.src_dir) | 141 logging.info("Moving source package to %r", self.src_dir) |
142 util.ensure_directory(self.src_dir) | 142 util.ensure_directory(self.src_dir) |
172 raise NotImplementedError | 172 raise NotImplementedError |
173 | 173 |
174 | 174 |
175 class BinaryPackager(object): | 175 class BinaryPackager(object): |
176 | 176 |
177 def __init__(self, pkg_line, status, binary_dir, dsc_file, logfile): | 177 def __init__(self, pkg_track, status, binary_dir, dsc_file, logfile): |
178 self.pkg_line = pkg_line | 178 self.pkg_track = pkg_track |
179 self.status = status | 179 self.status = status |
180 self.binary_dir = binary_dir | 180 self.binary_dir = binary_dir |
181 self.dsc_file = dsc_file | 181 self.dsc_file = dsc_file |
182 self.logfile = logfile | 182 self.logfile = logfile |
183 | 183 |
184 def package(self): | 184 def package(self): |
185 self.status.creating_binary_package() | 185 self.status.creating_binary_package() |
186 util.ensure_directory(self.binary_dir) | 186 util.ensure_directory(self.binary_dir) |
187 logging.info("Building binary package; loging to %r", self.logfile) | 187 logging.info("Building binary package; loging to %r", self.logfile) |
188 cmd = ["/usr/sbin/pbuilder", "build", | 188 cmd = ["/usr/sbin/pbuilder", "build", |
189 "--configfile", self.pkg_line.pbuilderrc, | 189 "--configfile", self.pkg_track.pbuilderrc, |
190 "--logfile", self.logfile, | 190 "--logfile", self.logfile, |
191 "--buildresult", self.binary_dir, self.dsc_file] | 191 "--buildresult", self.binary_dir, self.dsc_file] |
192 run.call(self.pkg_line.root_cmd + cmd, suppress_output=True) | 192 run.call(self.pkg_track.root_cmd + cmd, suppress_output=True) |
193 self.status.binary_package_created() | 193 self.status.binary_package_created() |
194 | 194 |
195 | 195 |
196 class RevisionPackager(object): | 196 class RevisionPackager(object): |
197 | 197 |
198 source_packager_cls = SourcePackager | 198 source_packager_cls = SourcePackager |
199 binary_packager_cls = BinaryPackager | 199 binary_packager_cls = BinaryPackager |
200 | 200 |
201 def __init__(self, pkg_line, revision): | 201 def __init__(self, pkg_track, revision): |
202 self.pkg_line = pkg_line | 202 self.pkg_track = pkg_track |
203 self.revision = revision | 203 self.revision = revision |
204 self.base_dir = self.pkg_line.pkg_dir_for_revision(self.revision, 1) | 204 self.base_dir = self.pkg_track.pkg_dir_for_revision(self.revision, 1) |
205 self.status = status.RevisionStatus(os.path.join(self.base_dir, | 205 self.status = status.RevisionStatus(os.path.join(self.base_dir, |
206 "status")) | 206 "status")) |
207 | 207 |
208 work_dir = _filenameproperty("work") | 208 work_dir = _filenameproperty("work") |
209 binary_dir = _filenameproperty("binary") | 209 binary_dir = _filenameproperty("binary") |
221 | 221 |
222 def package(self): | 222 def package(self): |
223 try: | 223 try: |
224 util.ensure_directory(self.work_dir) | 224 util.ensure_directory(self.work_dir) |
225 self.status.start = datetime.datetime.utcnow() | 225 self.status.start = datetime.datetime.utcnow() |
226 src_packager = self.source_packager_cls(self.pkg_line, self.status, | 226 src_packager = self.source_packager_cls(self.pkg_track, self.status, |
227 self.work_dir, self.src_dir, | 227 self.work_dir, self.src_dir, |
228 self.revision) | 228 self.revision) |
229 src_packager.package() | 229 src_packager.package() |
230 | 230 |
231 dsc_file = self.find_dsc_file() | 231 dsc_file = self.find_dsc_file() |
232 if dsc_file is None: | 232 if dsc_file is None: |
233 raise RuntimeError("Cannot find dsc File in %r" % self.src_dir) | 233 raise RuntimeError("Cannot find dsc File in %r" % self.src_dir) |
234 | 234 |
235 bin_packager = self.binary_packager_cls(self.pkg_line, self.status, | 235 bin_packager = self.binary_packager_cls(self.pkg_track, self.status, |
236 self.binary_dir, dsc_file, | 236 self.binary_dir, dsc_file, |
237 self.build_log) | 237 self.build_log) |
238 bin_packager.package() | 238 bin_packager.package() |
239 self.status.stop = datetime.datetime.utcnow() | 239 self.status.stop = datetime.datetime.utcnow() |
240 except: | 240 except: |
245 def remove_package_dir(self): | 245 def remove_package_dir(self): |
246 logging.info("Removing pkgdir %r", self.base_dir) | 246 logging.info("Removing pkgdir %r", self.base_dir) |
247 shutil.rmtree(self.base_dir) | 247 shutil.rmtree(self.base_dir) |
248 | 248 |
249 | 249 |
250 class PackageLine(object): | 250 class PackageTrack(object): |
251 | 251 |
252 revision_packager_cls = RevisionPackager | 252 revision_packager_cls = RevisionPackager |
253 | 253 |
254 svn_external_subdirs = [] | 254 svn_external_subdirs = [] |
255 | 255 |
362 """Returns RevisionPackager objects for each packaged revision""" | 362 """Returns RevisionPackager objects for each packaged revision""" |
363 return [self.revision_packager_cls(self, revision) | 363 return [self.revision_packager_cls(self, revision) |
364 for revision in self.get_revision_numbers()] | 364 for revision in self.get_revision_numbers()] |
365 | 365 |
366 | 366 |
367 def create_package_line(packager_class, **kw): | 367 def create_package_track(packager_class, **kw): |
368 module = util.import_dotted_name(packager_class) | 368 module = util.import_dotted_name(packager_class) |
369 return module.PackageLine(**kw) | 369 return module.PackageTrack(**kw) |
370 | 370 |
371 | 371 |
372 class PackagerGroup(object): | 372 class PackagerGroup(object): |
373 | 373 |
374 def __init__(self, package_lines, check_interval): | 374 def __init__(self, package_tracks, check_interval): |
375 self.package_lines = package_lines | 375 self.package_tracks = package_tracks |
376 self.check_interval = check_interval | 376 self.check_interval = check_interval |
377 | 377 |
378 def run(self): | 378 def run(self): |
379 """Runs the packager group indefinitely""" | 379 """Runs the packager group indefinitely""" |
380 logging.info("Tree packager starts. Will check every %d seconds", | 380 logging.info("Tree packager starts. Will check every %d seconds", |
381 self.check_interval) | 381 self.check_interval) |
382 last_check = -1 | 382 last_check = -1 |
383 while 1: | 383 while 1: |
384 now = time.time() | 384 now = time.time() |
385 if now > last_check + self.check_interval: | 385 if now > last_check + self.check_interval: |
386 self.check_package_lines() | 386 self.check_package_tracks() |
387 last_check = now | 387 last_check = now |
388 next_check = now + self.check_interval | 388 next_check = now + self.check_interval |
389 to_sleep = next_check - time.time() | 389 to_sleep = next_check - time.time() |
390 if to_sleep > 0: | 390 if to_sleep > 0: |
391 logging.info("Next check at %s", | 391 logging.info("Next check at %s", |
393 time.localtime(next_check))) | 393 time.localtime(next_check))) |
394 time.sleep(to_sleep) | 394 time.sleep(to_sleep) |
395 else: | 395 else: |
396 logging.info("Next check now") | 396 logging.info("Next check now") |
397 | 397 |
398 def check_package_lines(self): | 398 def check_package_tracks(self): |
399 logging.info("Checking package lines") | 399 logging.info("Checking package tracks") |
400 for line in self.package_lines: | 400 for track in self.package_tracks: |
401 try: | 401 try: |
402 packager = line.package_if_updated() | 402 packager = track.package_if_updated() |
403 if packager: | 403 if packager: |
404 packager.package() | 404 packager.package() |
405 except: | 405 except: |
406 logging.exception("An error occurred while" | 406 logging.exception("An error occurred while" |
407 " checking packager line %r", line.name) | 407 " checking packager track %r", track.name) |
408 logging.info("Checked all package lines") | 408 logging.info("Checked all package tracks") |
409 | 409 |
410 def get_package_lines(self): | 410 def get_package_tracks(self): |
411 return self.package_lines | 411 return self.package_tracks |