diff recipes/kde_enterprise_4/base.py @ 268:bba100869221

Improve handling of nested subdirectories of tags in the enterprise4 tag detector. This is necessary for the kdebase_runtime and kdebase_workspace packages
author Bernhard Herzog <bh@intevation.de>
date Wed, 06 May 2009 13:52:26 +0000
parents fdee17d71778
children 4b700b39c32f
line wrap: on
line diff
--- a/recipes/kde_enterprise_4/base.py	Thu Apr 30 10:30:04 2009 +0000
+++ b/recipes/kde_enterprise_4/base.py	Wed May 06 13:52:26 2009 +0000
@@ -27,6 +27,25 @@
                  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):
@@ -47,19 +66,22 @@
         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]
-            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
+            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):
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)