changeset 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 026dd7286431
children 2676abfc0e1d
files recipes/kde_enterprise_3_5/base.py recipes/kde_enterprise_4/base.py treepkg/subversion.py
diffstat 3 files changed, 74 insertions(+), 138 deletions(-) [+]
line wrap: on
line diff
--- a/recipes/kde_enterprise_3_5/base.py	Thu May 07 14:11:14 2009 +0000
+++ b/recipes/kde_enterprise_3_5/base.py	Thu May 07 14:25:10 2009 +0000
@@ -9,79 +9,11 @@
 
 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):
 
@@ -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")
--- 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")
--- a/treepkg/subversion.py	Thu May 07 14:11:14 2009 +0000
+++ b/treepkg/subversion.py	Thu May 07 14:25:10 2009 +0000
@@ -9,6 +9,7 @@
 
 import os
 import shutil
+import re
 
 import run
 from cmdexpand import cmdexpand
@@ -163,3 +164,70 @@
     def last_changed_revision(self):
         """Always returns 0"""
         return 0
+
+
+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 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 = last_changed_revision(revision_url)
+            urlrev = (baseurl + "/" + subdir, revision)
+        except SubversionError:
+            pass
+        return urlrev
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)