# HG changeset patch # User David Schleimer # Date 1372275631 18000 # Node ID 16045f6f3fef948f5d19c69bf31c41dd4691a1d6 # Parent 66395f232b7cb25e9ff6648f0fd4a5aea3802156 layouts: pull svn path -> potential tag name mapping into layouts diff --git a/hgsubversion/layouts/base.py b/hgsubversion/layouts/base.py --- a/hgsubversion/layouts/base.py +++ b/hgsubversion/layouts/base.py @@ -49,3 +49,17 @@ class BaseLayout(object): """ self.__unimplemented('tagpaths') + + def get_path_tag(self, path, taglocations): + """Get the tag name for the given svn path, if it is a possible tag. + + This function should return None if the path cannot be a tag. + Returning a non-empty sring does not imply that the path is a + tag, only that it is a candidate to be a tag. Returning an + empty string is an error. + + Path should be relative to the repo url. + taglocations should be as returned by self.taglocations() + + """ + self.__unimplemented('get_path_tag') diff --git a/hgsubversion/layouts/single.py b/hgsubversion/layouts/single.py --- a/hgsubversion/layouts/single.py +++ b/hgsubversion/layouts/single.py @@ -16,3 +16,6 @@ class SingleLayout(base.BaseLayout): def taglocations(self, meta_data_dir): return [] + + def get_path_tag(self, path, taglocations): + return None diff --git a/hgsubversion/layouts/standard.py b/hgsubversion/layouts/standard.py --- a/hgsubversion/layouts/standard.py +++ b/hgsubversion/layouts/standard.py @@ -56,3 +56,11 @@ class StandardLayout(base.BaseLayout): self._tag_locations.reverse() return self._tag_locations + + def get_path_tag(self, path, taglocations): + for tagspath in taglocations: + if path.startswith(tagspath + '/'): + tag = path[len(tagspath) + 1:] + if tag: + return tag + return None diff --git a/hgsubversion/svnmeta.py b/hgsubversion/svnmeta.py --- a/hgsubversion/svnmeta.py +++ b/hgsubversion/svnmeta.py @@ -251,14 +251,9 @@ class SVNMeta(object): Note that it's only a tag if it was copied from the path '' in a branch (or tag) we have, for our purposes. """ - if self.layout != 'single': - path = self.normalize(path) - for tagspath in self.layoutobj.taglocations(self.meta_data_dir): - if path.startswith(tagspath + '/'): - tag = path[len(tagspath) + 1:] - if tag: - return tag - return None + path = self.normalize(path) + taglocations = self.layoutobj.taglocations(self.meta_data_dir) + return self.layoutobj.get_path_tag(path, taglocations) def split_branch_path(self, path, existing=True): """Figure out which branch inside our repo this path represents, and