[Treepkg-commits] r191 - trunk/recipes/kde_enterprise_4
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Wed Apr 29 18:53:01 CEST 2009
Author: bh
Date: 2009-04-29 18:53:00 +0200 (Wed, 29 Apr 2009)
New Revision: 191
Modified:
trunk/recipes/kde_enterprise_4/base.py
Log:
Add automatic detection and builds of svn tags for the kdepim enterprise4
packages. Doesn't work for kde-l10n yet.
Modified: trunk/recipes/kde_enterprise_4/base.py
===================================================================
--- trunk/recipes/kde_enterprise_4/base.py 2009-04-29 14:37:22 UTC (rev 190)
+++ trunk/recipes/kde_enterprise_4/base.py 2009-04-29 16:53:00 UTC (rev 191)
@@ -10,10 +10,58 @@
import os
import time
import inspect
+import re
+import logging
import treepkg.packager
+import treepkg.subversion
+class TagDetector(object):
+
+ """Class to automatically find SVN tags and help package them
+
+ The tags are found using three parameters:
+ url -- The base url of the SVN tags directory to use
+ pattern -- A regular expression matching the subdirectories to
+ consider in the tag directory specified by the url
+ subdir -- A subdirectory of the directory matched by pattern to
+ export and use to determine revision number
+ """
+
+ def __init__(self, url, pattern, subdir):
+ self.url = url
+ self.pattern = re.compile(pattern)
+ self.subdir = subdir
+
+ def list_tags(self):
+ matches = []
+ if self.url:
+ for tag in treepkg.subversion.list_url(self.url):
+ if self.pattern.match(tag.rstrip("/")):
+ matches.append(tag)
+ return sorted(matches)
+
+ def newest_tag_revision(self):
+ """Determines the newest tag revision and returns (tagurl, revno)
+ If no tag can be found, the method returns the tuple (None, None).
+ """
+ candidates = self.list_tags()
+ if candidates:
+ newest = candidates[-1]
+ subdir = self.subdir
+ if not subdir.endswith("/"):
+ subdir += "/"
+ tag_url = self.url + "/" + newest
+ tag_subdirs = treepkg.subversion.list_url(tag_url)
+ if subdir in tag_subdirs:
+ subdir_url = tag_url + "/" + subdir
+ revision = treepkg.subversion.last_changed_revision(subdir_url)
+ return subdir_url, revision
+ return None, None
+
+
+
class BaseSourcePackager(treepkg.packager.SourcePackager):
def __init__(self, *args, **kw):
@@ -46,13 +94,48 @@
class BasePackageTrack(treepkg.packager.PackageTrack):
- extra_config_desc = ["version_template"]
+ 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 = 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:
+ logging.info("Exporting sources from %s to %r",
+ self.tag_url, to_dir)
+ treepkg.subversion.export(self.tag_url, to_dir)
+ else:
+ super(BasePackageTrack, self).export_sources(to_dir)
+
+
def define_kdepim_packager(basename=None, external_subdirs=None):
caller_globals = inspect.currentframe().f_back.f_globals
More information about the Treepkg-commits
mailing list