comparison treepkg/packager.py @ 55:6b5f7f7575f6

merge
author Bernhard Herzog <bh@intevation.de>
date Tue, 10 Apr 2007 12:07:39 +0200
parents e1028211d34b b0014b8f6029
children 9a602d8eaa60
comparison
equal deleted inserted replaced
51:e1028211d34b 55:6b5f7f7575f6
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, track, status, work_dir, src_dir, revision):
36 self.pkg_line = pkg_line 36 self.track = 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.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
112 uses such prefixes for the kde packages. 112 uses such prefixes for the kde packages.
113 """ 113 """
114 debian_dir = os.path.join(pkgbasedir, "debian") 114 debian_dir = os.path.join(pkgbasedir, "debian")
115 changelog = os.path.join(debian_dir, "changelog") 115 changelog = os.path.join(debian_dir, "changelog")
116 116
117 self.pkg_line.copy_debian_directory(debian_dir) 117 self.track.copy_debian_directory(debian_dir)
118 118
119 logging.info("Updating %r", changelog) 119 logging.info("Updating %r", changelog)
120 oldversion = util.debian_changelog_version(changelog) 120 oldversion = util.debian_changelog_version(changelog)
121 if ":" in oldversion: 121 if ":" in oldversion:
122 oldversionprefix = oldversion.split(":")[0] + ":" 122 oldversionprefix = oldversion.split(":")[0] + ":"
123 else: 123 else:
124 oldversionprefix = "" 124 oldversionprefix = ""
125 run.call(cmdexpand("debchange -c $changelog" 125 run.call(cmdexpand("debchange -c $changelog"
126 " -v ${oldversionprefix}${pkgbaseversion}-kk1" 126 " -v ${oldversionprefix}${pkgbaseversion}-kk1"
127 " $changemsg", **locals()), 127 " $changemsg", **locals()),
128 env=self.pkg_line.debian_environment()) 128 env=self.track.debian_environment())
129 129
130 130
131 def create_source_package(self, pkgbasedir, origtargz): 131 def create_source_package(self, pkgbasedir, origtargz):
132 """Creates a new source package from pkgbasedir and origtargz""" 132 """Creates a new source package from pkgbasedir and origtargz"""
133 logging.info("Creating new source package") 133 logging.info("Creating new source package")
134 run.call(cmdexpand("dpkg-source -b $directory $tarball", 134 run.call(cmdexpand("dpkg-source -b $directory $tarball",
135 directory=os.path.basename(pkgbasedir), 135 directory=os.path.basename(pkgbasedir),
136 tarball=os.path.basename(origtargz)), 136 tarball=os.path.basename(origtargz)),
137 cwd=os.path.dirname(pkgbasedir), 137 cwd=os.path.dirname(pkgbasedir),
138 suppress_output=True, 138 suppress_output=True,
139 env=self.pkg_line.debian_environment()) 139 env=self.track.debian_environment())
140 140
141 def move_source_package(self, pkgbasename): 141 def move_source_package(self, pkgbasename):
142 """Moves the new source package from the work_dir to the src_dir""" 142 """Moves the new source package from the work_dir to the src_dir"""
143 logging.info("Moving source package to %r", self.src_dir) 143 logging.info("Moving source package to %r", self.src_dir)
144 util.ensure_directory(self.src_dir) 144 util.ensure_directory(self.src_dir)
174 raise NotImplementedError 174 raise NotImplementedError
175 175
176 176
177 class BinaryPackager(object): 177 class BinaryPackager(object):
178 178
179 def __init__(self, pkg_line, status, binary_dir, dsc_file, logfile): 179 def __init__(self, track, status, binary_dir, dsc_file, logfile):
180 self.pkg_line = pkg_line 180 self.track = track
181 self.status = status 181 self.status = status
182 self.binary_dir = binary_dir 182 self.binary_dir = binary_dir
183 self.dsc_file = dsc_file 183 self.dsc_file = dsc_file
184 self.logfile = logfile 184 self.logfile = logfile
185 185
186 def package(self): 186 def package(self):
187 self.status.creating_binary_package() 187 self.status.creating_binary_package()
188 util.ensure_directory(self.binary_dir) 188 util.ensure_directory(self.binary_dir)
189 logging.info("Building binary package; loging to %r", self.logfile) 189 logging.info("Building binary package; logging to %r", self.logfile)
190 run.call(cmdexpand("@rootcmd /usr/sbin/pbuilder build" 190 run.call(cmdexpand("@rootcmd /usr/sbin/pbuilder build"
191 " --configfile $pbuilderrc" 191 " --configfile $pbuilderrc"
192 " --logfile $logfile --buildresult $bindir $dsc", 192 " --logfile $logfile --buildresult $bindir $dsc",
193 rootcmd=self.pkg_line.root_cmd, 193 rootcmd=self.track.root_cmd,
194 pbuilderrc=self.pkg_line.pbuilderrc, 194 pbuilderrc=self.track.pbuilderrc,
195 logfile=self.logfile, bindir=self.binary_dir, 195 logfile=self.logfile, bindir=self.binary_dir,
196 dsc=self.dsc_file), 196 dsc=self.dsc_file),
197 suppress_output=True) 197 suppress_output=True)
198 self.status.binary_package_created() 198 self.status.binary_package_created()
199 199
201 class RevisionPackager(object): 201 class RevisionPackager(object):
202 202
203 source_packager_cls = SourcePackager 203 source_packager_cls = SourcePackager
204 binary_packager_cls = BinaryPackager 204 binary_packager_cls = BinaryPackager
205 205
206 def __init__(self, pkg_line, revision): 206 def __init__(self, track, revision):
207 self.pkg_line = pkg_line 207 self.track = track
208 self.revision = revision 208 self.revision = revision
209 self.base_dir = self.pkg_line.pkg_dir_for_revision(self.revision, 1) 209 self.base_dir = self.track.pkg_dir_for_revision(self.revision, 1)
210 self.status = status.RevisionStatus(os.path.join(self.base_dir, 210 self.status = status.RevisionStatus(os.path.join(self.base_dir,
211 "status")) 211 "status"))
212 212
213 work_dir = _filenameproperty("work") 213 work_dir = _filenameproperty("work")
214 binary_dir = _filenameproperty("binary") 214 binary_dir = _filenameproperty("binary")
226 226
227 def package(self): 227 def package(self):
228 try: 228 try:
229 util.ensure_directory(self.work_dir) 229 util.ensure_directory(self.work_dir)
230 self.status.start = datetime.datetime.utcnow() 230 self.status.start = datetime.datetime.utcnow()
231 src_packager = self.source_packager_cls(self.pkg_line, self.status, 231 src_packager = self.source_packager_cls(self.track, self.status,
232 self.work_dir, self.src_dir, 232 self.work_dir, self.src_dir,
233 self.revision) 233 self.revision)
234 src_packager.package() 234 src_packager.package()
235 235
236 dsc_file = self.find_dsc_file() 236 dsc_file = self.find_dsc_file()
237 if dsc_file is None: 237 if dsc_file is None:
238 raise RuntimeError("Cannot find dsc File in %r" % self.src_dir) 238 raise RuntimeError("Cannot find dsc File in %r" % self.src_dir)
239 239
240 bin_packager = self.binary_packager_cls(self.pkg_line, self.status, 240 bin_packager = self.binary_packager_cls(self.track, self.status,
241 self.binary_dir, dsc_file, 241 self.binary_dir, dsc_file,
242 self.build_log) 242 self.build_log)
243 bin_packager.package() 243 bin_packager.package()
244 self.status.stop = datetime.datetime.utcnow() 244 self.status.stop = datetime.datetime.utcnow()
245 except: 245 except:
250 def remove_package_dir(self): 250 def remove_package_dir(self):
251 logging.info("Removing pkgdir %r", self.base_dir) 251 logging.info("Removing pkgdir %r", self.base_dir)
252 shutil.rmtree(self.base_dir) 252 shutil.rmtree(self.base_dir)
253 253
254 254
255 class PackageLine(object): 255 class PackageTrack(object):
256 256
257 revision_packager_cls = RevisionPackager 257 revision_packager_cls = RevisionPackager
258 258
259 svn_external_subdirs = [] 259 svn_external_subdirs = []
260 260
367 """Returns RevisionPackager objects for each packaged revision""" 367 """Returns RevisionPackager objects for each packaged revision"""
368 return [self.revision_packager_cls(self, revision) 368 return [self.revision_packager_cls(self, revision)
369 for revision in self.get_revision_numbers()] 369 for revision in self.get_revision_numbers()]
370 370
371 371
372 def create_package_line(packager_class, **kw): 372 def create_package_track(packager_class, **kw):
373 module = util.import_dotted_name(packager_class) 373 module = util.import_dotted_name(packager_class)
374 return module.PackageLine(**kw) 374 return module.PackageTrack(**kw)
375 375
376 376
377 class PackagerGroup(object): 377 class PackagerGroup(object):
378 378
379 def __init__(self, package_lines, check_interval): 379 def __init__(self, package_tracks, check_interval):
380 self.package_lines = package_lines 380 self.package_tracks = package_tracks
381 self.check_interval = check_interval 381 self.check_interval = check_interval
382 382
383 def run(self): 383 def run(self):
384 """Runs the packager group indefinitely""" 384 """Runs the packager group indefinitely"""
385 logging.info("Tree packager starts. Will check every %d seconds", 385 logging.info("Tree packager starts. Will check every %d seconds",
386 self.check_interval) 386 self.check_interval)
387 last_check = -1 387 last_check = -1
388 while 1: 388 while 1:
389 now = time.time() 389 now = time.time()
390 if now > last_check + self.check_interval: 390 if now > last_check + self.check_interval:
391 self.check_package_lines() 391 self.check_package_tracks()
392 last_check = now 392 last_check = now
393 next_check = now + self.check_interval 393 next_check = now + self.check_interval
394 to_sleep = next_check - time.time() 394 to_sleep = next_check - time.time()
395 if to_sleep > 0: 395 if to_sleep > 0:
396 logging.info("Next check at %s", 396 logging.info("Next check at %s",
398 time.localtime(next_check))) 398 time.localtime(next_check)))
399 time.sleep(to_sleep) 399 time.sleep(to_sleep)
400 else: 400 else:
401 logging.info("Next check now") 401 logging.info("Next check now")
402 402
403 def check_package_lines(self): 403 def check_package_tracks(self):
404 logging.info("Checking package lines") 404 logging.info("Checking package tracks")
405 for line in self.package_lines: 405 for track in self.package_tracks:
406 try: 406 try:
407 packager = line.package_if_updated() 407 packager = track.package_if_updated()
408 if packager: 408 if packager:
409 packager.package() 409 packager.package()
410 except: 410 except:
411 logging.exception("An error occurred while" 411 logging.exception("An error occurred while"
412 " checking packager line %r", line.name) 412 " checking packager track %r", track.name)
413 logging.info("Checked all package lines") 413 logging.info("Checked all package tracks")
414 414
415 def get_package_lines(self): 415 def get_package_tracks(self):
416 return self.package_lines 416 return self.package_tracks
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)