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
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)