Mercurial > treepkg
view recipes/kde_enterprise_3_5/base.py @ 280:d2382953b2c8
When building a tagged revision, make sure to explicitly use the
revision number when exporting the sources to avoid a race. The
repository might change between detection of the tag and the export.
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Mon, 03 Aug 2009 18:57:27 +0000 |
parents | f3dee156e3e3 |
children | cd10b835d9b8 |
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 logging import treepkg.packager import treepkg.subversion class BaseSourcePackager(treepkg.packager.SourcePackager): changemsg_template = "Update to SVN enterprise35 branch rev. %(revision)d" 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 prepare_sources_for_tarball(self, pkgbasedir, pkgbaseversion): self.update_version_numbers(pkgbasedir) def update_version_numbers(self, pkgbasedir): """Updates the version numbers in the code in pkgbasedir. The default implementation does nothing. Derived classes should override this method if necessary. """ class BasePackageTrack(treepkg.packager.PackageTrack): extra_config_desc = [("version_template", str, "%(enterprise_version)s"), ("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 self.tag_revision = tag_revision 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, revision=self.tag_revision) else: super(BasePackageTrack, self).export_sources(to_dir) def export_tag(self, tag_url, to_dir, revision=None): logging.info("Exporting sources from %s to %r", tag_url, to_dir) treepkg.subversion.export(tag_url, to_dir, revision=revision)