# HG changeset patch # User Bernhard Herzog # Date 1241617946 0 # Node ID bba10086922199bd5da9dec98dfc749a586ed7c5 # Parent fdee17d71778ff59bc8f445c3cdd434dcb81cf28 Improve handling of nested subdirectories of tags in the enterprise4 tag detector. This is necessary for the kdebase_runtime and kdebase_workspace packages diff -r fdee17d71778 -r bba100869221 recipes/kde_enterprise_4/base.py --- 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.. . 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):