from bzrlib.trace import mutter
import bzrlib.ui as ui
-import svn.delta
-
from bzrlib.plugins.svn import changes, core
-from bzrlib.plugins.svn.cache import CacheTable
from bzrlib.plugins.svn.core import SubversionException
+from bzrlib.plugins.svn.cache import CacheTable
from bzrlib.plugins.svn.errors import ERR_FS_NO_SUCH_REVISION, ERR_FS_NOT_FOUND
+from bzrlib.plugins.svn.ra import DIRENT_KIND
from bzrlib.plugins.svn.transport import SvnRaTransport
class lazy_dict(object):
revprops = lazy_dict({}, self._transport.revprop_list, revnum)
if changes.changes_path(revpaths, path, True):
+ assert isinstance(revnum, int)
yield (revpaths, revnum, revprops)
i += 1
if limit != 0 and i == limit:
if next is None:
break
+ assert (ascending and next[1] > revnum) or \
+ (not ascending and next[1] < revnum)
(path, revnum) = next
+ assert isinstance(path, str)
+ assert isinstance(revnum, int)
def get_previous(self, path, revnum):
"""Return path,revnum pair specified pair was derived from.
:param to_revnum: End of range to fetch information for
"""
+ assert isinstance(self.saved_revnum, int)
if to_revnum <= self.saved_revnum:
return
latest_revnum = self.actual._transport.get_latest_revnum()
+ assert isinstance(latest_revnum, int)
to_revnum = max(latest_revnum, to_revnum)
pb = ui.ui_factory.nested_progress_bar()
assert isinstance(path, str), "invalid path"
path = path.strip("/")
conn = self._transport.connections.get(self._transport.get_svn_repos_root())
+ results = []
+ unchecked_dirs = set([path])
try:
- ft = conn.check_path(path, revnum)
- if ft == core.NODE_FILE:
- return []
- assert ft == core.NODE_DIR
- finally:
- self._transport.connections.add(conn)
-
- class FileTreeLister(object):
- def change_prop(self, name, value): pass
- def close(self): pass
- def apply_textdelta(self, checksum=None): pass
-
-
- class DirTreeLister(object):
- def __init__(self, tree, path):
- self.tree = tree
- self.path = path
-
- def change_prop(self, name, value):
- pass
-
- def close(self):
- pass
-
- def add_directory(self, path, copyfrom_path=None, copyfrom_revnum=-1):
- """See Editor.add_directory()."""
- self.tree.files.append(urlutils.join(self.tree.base, path))
- return DirTreeLister(self.tree, path)
-
- def add_file(self, path, copyfrom_path=None, copyfrom_revnum=-1):
- self.tree.files.append(urlutils.join(self.tree.base, path))
- return FileTreeLister()
-
- class TreeLister(object):
- def __init__(self, base):
- self.files = []
- self.base = base
-
- def set_target_revision(self, rev):
- pass
-
- def open_root(self, revnum):
- """See Editor.open_root()."""
- return DirTreeLister(self, path)
-
- def close(self):
- pass
-
- def abort(self):
- pass
-
- editor = TreeLister(path)
- try:
- conn = self._transport.connections.get(urlutils.join(self._transport.get_svn_repos_root(), path))
- reporter = conn.do_update(revnum, "", True, editor)
- reporter.set_path("", revnum, True, None)
- reporter.finish()
+ while len(unchecked_dirs) > 0:
+ nextp = unchecked_dirs.pop()
+ dirents = conn.get_dir(nextp, revnum, DIRENT_KIND)[0]
+ for k,v in dirents.items():
+ childp = urlutils.join(nextp, k)
+ if v['kind'] == core.NODE_DIR:
+ unchecked_dirs.add(childp)
+ results.append(childp)
finally:
self._transport.connections.add(conn)
- return editor.files
+ return results
def get_previous(self, path, revnum):
"""Return path,revnum pair specified pair was derived from.