Mercurial > treepkg
view recipes/kde_enterprise_4/base.py @ 273:4b700b39c32f
Refactoring: Move the TagDetector class into the treepkg.subversion module
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Thu, 07 May 2009 14:25:10 +0000 |
parents | bba100869221 |
children | 2676abfc0e1d |
line wrap: on
line source
# Copyright (C) 2007, 2008, 2009 by Intevation GmbH # Authors: # Bernhard Herzog <bh@intevation.de> # # This program is free software under the GPL (>=v2) # Read the file COPYING coming with the software for details. """Base classes for all kdepim packagers""" import os import time import inspect import logging import treepkg.packager import treepkg.subversion class BaseSourcePackager(treepkg.packager.SourcePackager): def __init__(self, *args, **kw): super(BaseSourcePackager, self).__init__(*args, **kw) self.enterprise_version = (time.strftime("%Y%m%d", time.localtime()) \ + "." + str(self.revision)) def determine_package_version(self, directory): enterprise_version = self.enterprise_version return self.track.version_template % locals() def do_package(self): pkgbaseversion, pkgbasedir = self.export_sources() self.update_version_numbers(pkgbasedir) pkgbasename = self.pkg_basename + "_" + pkgbaseversion origtargz = os.path.join(self.work_dir, pkgbasename + ".orig.tar.gz") self.create_tarball(origtargz, self.work_dir, os.path.basename(pkgbasedir)) changemsg = ("Update to SVN enterprise4 branch rev. %d" % (self.revision,)) self.copy_debian_directory(pkgbasedir, pkgbaseversion, changemsg) self.create_source_package(pkgbasedir, origtargz) self.move_source_package(pkgbasename) class BasePackageTrack(treepkg.packager.PackageTrack): extra_config_desc = ["version_template", ("tags_url", str, ""), ("tags_pattern", str, ""), ("tags_subdir", str, "")] def __init__(self, *args, **kw): self.version_template = kw.pop("version_template") tags_url = kw.pop("tags_url") tags_pattern = kw.pop("tags_pattern") tags_subdir = kw.pop("tags_subdir") super(BasePackageTrack, self).__init__(*args, **kw) self.tag_detector = treepkg.subversion.TagDetector(tags_url, tags_pattern, tags_subdir) def packager_for_new_revision(self): logging.info("Checking tags") self.tag_url = None tag_url, tag_revision = self.tag_detector.newest_tag_revision() logging.info("Found: %s: %s", tag_url, tag_revision) if tag_url is not None: revision = (tag_revision, self.rules_working_copy.last_changed_revision()) logging.info("New revision is %s", revision) if revision not in self.get_revision_numbers(): logging.info("Revision %s has not been packaged yet", revision) self.tag_url = tag_url return self.revision_packager_cls(self, tag=tag_url, *revision) else: logging.info("Revision %s has already been packaged.", revision) return super(BasePackageTrack, self).packager_for_new_revision() def export_sources(self, to_dir): if self.tag_url is not None: self.export_tag(self.tag_url, to_dir) else: super(BasePackageTrack, self).export_sources(to_dir) def export_tag(self, tag_url, to_dir): logging.info("Exporting sources from %s to %r", tag_url, to_dir) treepkg.subversion.export(tag_url, to_dir) def define_kdepim_packager(basename=None, external_subdirs=None): caller_globals = inspect.currentframe().f_back.f_globals SourcePackager = caller_globals.get("SourcePackager") if SourcePackager is None: class SourcePackager(BaseSourcePackager): pkg_basename = basename class RevisionPackager(treepkg.packager.RevisionPackager): source_packager_cls = SourcePackager class PackageTrack(BasePackageTrack): revision_packager_cls = RevisionPackager if external_subdirs is not None: svn_external_subdirs = external_subdirs caller_globals["PackageTrack"] = PackageTrack