Mercurial > treepkg
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")