warn('incomplete data for %r' % p)
else:
for c in find_children(data[1], data[2]):
- map[c.replace(data[1], p, 1)] = generate_file_id(revid, c), revid
+ path = c.replace(data[1], p, 1)
+ map[path] = generate_file_id(revid, c), revid
+ mutter('added mapping %r -> %r' % (path, map[path]))
elif data[0] == 'M':
if p == "":
try:
(dirents, _, _) = self.transport.get_dir2(
- "/" + path.encode('utf8'), revnum, 0)
+ path.lstrip("/").encode('utf8'), revnum,
+ svn.core.SVN_DIRENT_KIND)
except SubversionException, (_, num):
if num == svn.core.SVN_ERR_FS_NOT_DIRECTORY:
return
for p in dirents:
yield os.path.join(path, p)
- for c in self.find_children(os.path.join(path, p), revnum):
- yield c
+ if dirents[p].kind == svn.core.svn_node_dir:
+ for c in self.find_children(os.path.join(path, p), revnum):
+ yield c
def get_previous(self, path, revnum):
"""Return path,revnum pair specified pair was derived from.
self.assertEqual("", info[0])
self.assertEqual("My Message", info[1])
+ def test_find_children_empty(self):
+ repos_url = self.make_client("a", "dc")
+ self.build_tree({'dc/trunk': None})
+ self.client_add("dc/trunk")
+ self.client_commit("dc", "My Message")
+
+ walker = logwalker.LogWalker(TrunkBranchingScheme(),
+ transport=SvnRaTransport(repos_url))
+
+ self.assertEqual([], list(walker.find_children("trunk", 1)))
+
+ def test_find_children_one(self):
+ repos_url = self.make_client("a", "dc")
+ self.build_tree({'dc/trunk/data': 'foo'})
+ self.client_add("dc/trunk")
+ self.client_commit("dc", "My Message")
+
+ walker = logwalker.LogWalker(TrunkBranchingScheme(),
+ transport=SvnRaTransport(repos_url))
+
+ self.assertEqual(['trunk/data'], list(walker.find_children("trunk", 1)))
+
+ def test_find_children_nested(self):
+ repos_url = self.make_client("a", "dc")
+ self.build_tree({'dc/trunk/data/bla': 'foo', 'dc/trunk/file': 'bla'})
+ self.client_add("dc/trunk")
+ self.client_commit("dc", "My Message")
+
+ walker = logwalker.LogWalker(TrunkBranchingScheme(),
+ transport=SvnRaTransport(repos_url))
+
+ self.assertEqual(['trunk/data', 'trunk/data/bla', 'trunk/file'],
+ list(walker.find_children("trunk", 1)))
+
+ def test_find_children_later(self):
+ repos_url = self.make_client("a", "dc")
+ self.build_tree({'dc/trunk/data/bla': 'foo'})
+ self.client_add("dc/trunk")
+ self.client_commit("dc", "My Message")
+ self.build_tree({'dc/trunk/file': 'bla'})
+ self.client_add("dc/trunk/file")
+ self.client_commit("dc", "My Message")
+
+ walker = logwalker.LogWalker(TrunkBranchingScheme(),
+ transport=SvnRaTransport(repos_url))
+
+ self.assertEqual(['trunk/data', 'trunk/data/bla'],
+ list(walker.find_children("trunk", 1)))
+ self.assertEqual(['trunk/data', 'trunk/data/bla', 'trunk/file'],
+ list(walker.find_children("trunk", 2)))
self._ra = svn.client.open_ra_session(self.svn_url.encode('utf8'),
self._client, self.pool)
@need_lock
- def get_dir2(self, *args, **kwargs):
- return svn.ra.get_dir2(self._ra, *args, **kwargs)
+ def get_dir2(self, path, *args, **kwargs):
+ # ra_dav backends fail with strange errors if the path starts with a
+ # slash while other backends don't.
+ assert len(path) == 0 or path[0] != "/"
+ return svn.ra.get_dir2(self._ra, path, *args, **kwargs)
def list_dir(self, relpath):
if relpath == ".":