13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program. If not, see <http://www.gnu.org/licenses/>.
16
from bzrlib import urlutils
17
from bzrlib.plugins.svn import errors as svn_errors
18
from bzrlib.plugins.svn.layout import (
16
22
from bzrlib.plugins.svn.layout.standard import (
21
class KDELayout(InverseTrunkLayout):
26
class KDELayout(RepositoryLayout):
22
27
"""Layout for the KDE repository."""
25
InverseTrunkLayout.__init__(self, 1)
29
def get_project_prefixes(self, project):
30
sproject = project.strip("/").split("/")
31
return [urlutils.join("trunk", project),
32
urlutils.join("branches", sproject[0]),
33
urlutils.join("tags", sproject[0])]
38
def get_tag_path(self, name, project=None):
41
p = project.strip("/").split("/")
42
return urlutils.join("tags", p[0], name.encode("utf-8"), *p[1:])
44
def _is_parent(self, path, project, kind):
45
path = path.strip("/")
48
spath = path.strip("/").split("/")
51
if spath[0] == "trunk":
52
if kind != "branches":
55
elif spath[0] == kind:
58
candidate.append(spath[1])
60
candidate += spath[3:]
63
if len(candidate) == 0:
65
if candidate[0] == "KDE" and len(candidate) == 1:
69
def is_branch_parent(self, path, project=""):
70
return self._is_parent(path, project, "branches")
72
def is_tag_parent(self, path, project=""):
73
return self._is_parent(path, project, "tags")
75
def get_tag_name(self, path, project=""):
76
pts = path.strip("/").split("/")
77
assert pts[0] == "tags"
80
def push_merged_revisions(self, project=""):
83
def get_branch_path(self, name, project=None):
86
pts = project.strip("/").split("/")
88
return urlutils.join("trunk", project)
89
return urlutils.join("branches", pts[0], name, *pts[1:])
91
def parse(self, path):
92
pts = path.strip("/").split("/")
97
raise svn_errors.NotSvnBranchPath(path, self)
101
elif pts[0] == "branches":
102
# branches / FIRST / NAME / IPATH
108
raise svn_errors.NotSvnBranchPath(path, self)
110
elif pts[0] == "tags":
116
raise svn_errors.NotSvnBranchPath(path, self)
119
raise svn_errors.NotSvnBranchPath(path, self)
123
project.append(rest[0])
125
raise svn_errors.NotSvnBranchPath(path, self)
128
ipath = "/".join(rest)
129
return (kind, "/".join(project), path[:len(path)-len(ipath)].strip("/"),
132
def _children_helper(self, rpf, name, trunk=False):
134
return [("trunk", None)]
136
return [(urlutils.join(name, subname), has_props) for (subname, has_props) in rpf.find_children(name)]
138
def _get_project_items(self, name, repository, revnum, project, pb, trunk=False):
140
rpf = RootPathFinder(repository, revnum)
141
children = self._children_helper(rpf, name, trunk)
142
for subpath, has_props in children:
143
cp = urlutils.join(subpath, project)
144
if rpf.check_path(cp):
145
ret.append((project, cp, urlutils.split(subpath)[-1], has_props))
148
def _get_all_items(self, name, repository, revnum, pb, trunk=False):
150
rpf = RootPathFinder(repository, revnum)
151
children = self._children_helper(rpf, name, trunk)
152
for subpath, _ in children:
153
for p, has_props in rpf.find_children(subpath):
154
pp = urlutils.join(subpath, p)
156
for kdep, has_props in rpf.find_children(pp):
157
ret.append(("KDE/" + kdep, urlutils.join(pp, kdep), urlutils.split(subpath)[-1], has_props))
159
ret.append((p, pp, urlutils.split(subpath)[-1], has_props))
162
def _get_items(self, name, repository, revnum, project, pb, trunk=False):
164
return self._get_all_items(name, repository, revnum, pb, trunk)
166
return self._get_project_items(name, repository, revnum, project, pb, trunk)
168
def get_branches(self, repository, revnum, project=None, pb=None):
169
return self._get_items("branches", repository, revnum,
170
project, pb, trunk=False) + self._get_items("trunk", repository,
171
revnum, project, pb, trunk=True)
173
def get_tags(self, repository, revnum, project=None, pb=None):
174
return self._get_items("tags", repository, revnum, project, pb,
28
181
class ApacheLayout(TrunkLayout):