diff 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 diff
--- a/recipes/kde_enterprise_4/base.py	Thu May 07 14:11:14 2009 +0000
+++ b/recipes/kde_enterprise_4/base.py	Thu May 07 14:25:10 2009 +0000
@@ -10,80 +10,12 @@
 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
-
-    The subdir parameter is there to cope with the kdepim enterprise
-    tags.  The URL for a tag is of the form
-    .../tags/kdepim/enterprise4.0.<date>.<rev> .  Each such tag has
-    subdirectories for kdepim, kdelibs, etc.  The url and pattern are
-    used to match the URL for the tag, and the subdir is used to select
-    which part of the tag is meant.
-
-    The subdir also determines which SVN directory's revision number is
-    used.  Normally, just appending the subdir to the tag URL would be
-    enough for this, but the situation is more complex for
-    kdebase_workspace and kdebase_runtime, whose code comes from
-    different subdirectories of the kdebase-4.X-branch subdirectory (for
-    enterprise4 tags).  Here the revision number must be taken from
-    kdebase-4.X-branch, but the URL to use when exporting the sources,
-    must refer to e.g. kdebase-4.1-branch/kdebase_workspace.  To achieve
-    that, subdir may contain slashes to indicate subdirectories of
-    subdirectories, but only the first part of subdir (up to the first
-    slash) is used when determining the 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()
-        urlrev = (None, None)
-        if candidates:
-            newest = candidates[-1]
-            urlrev = self.determine_revision(self.url + "/" + newest,
-                                             self.subdir)
-        return urlrev
-
-    def determine_revision(self, baseurl, subdir):
-        urlrev = (None, None)
-        revision_url = baseurl + "/" + subdir.split("/")[0]
-        try:
-            revision = treepkg.subversion.last_changed_revision(revision_url)
-            urlrev = (baseurl + "/" + subdir, revision)
-        except treepkg.subversion.SubversionError:
-            pass
-        return urlrev
-
-
 class BaseSourcePackager(treepkg.packager.SourcePackager):
 
     def __init__(self, *args, **kw):
@@ -127,7 +59,9 @@
         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)
+        self.tag_detector = treepkg.subversion.TagDetector(tags_url,
+                                                           tags_pattern,
+                                                           tags_subdir)
 
     def packager_for_new_revision(self):
         logging.info("Checking tags")
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)