Rev 1834: Skip range replay for now. in file:///data/jelmer/bzr-svn/trunk/
Jelmer Vernooij
jelmer at samba.org
Sat Sep 6 20:13:59 BST 2008
At file:///data/jelmer/bzr-svn/trunk/
------------------------------------------------------------
revno: 1834
revision-id: jelmer at samba.org-20080906191358-gocb2tw46dp5yxma
parent: jelmer at samba.org-20080906190027-usxfoq67o02jat2v
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Sat 2008-09-06 21:13:58 +0200
message:
Skip range replay for now.
modified:
fetch.py fetch.py-20060625004942-x2lfaib8ra707a8p-1
=== modified file 'fetch.py'
--- a/fetch.py 2008-09-06 19:00:27 +0000
+++ b/fetch.py 2008-09-06 19:13:58 +0000
@@ -771,16 +771,6 @@
if self.target.is_in_write_group():
self.target.commit_write_group()
- def _fetch_revisions_range(self, revids, pb=None):
- """Copy a set of related revisions using svn.ra.replay.
-
- :param revids: Revision ids to copy.
- :param pb: Optional progress bar
- """
- # FIXME: First, determine ranges to fetch
- # FIXME: Fetch ranges
- raise NotImplementedError(self._fetch_replay_range)
-
def fetch(self, revision_id=None, pb=None, find_ghosts=False,
branches=None):
"""Fetch revisions. """
@@ -818,16 +808,79 @@
else:
nested_pb = None
try:
- #FIXME: if self.source.transport.has_capability("partial-replay"):
- # self._fetch_revisions_range(needed, pb)
+ #if self.source.transport.has_capability("partial-replay"):
+ # self._fetch_revision_chunks(needed, pb)
#else:
- self._fetch_revisions(needed, pb)
+ self._fetch_revisions(needed, pb)
finally:
if nested_pb is not None:
nested_pb.finished()
finally:
self.target.unlock()
+ def _fetch_revision_chunks(self, revs, pb=None):
+ """Copy a set of related revisions using svn.ra.replay.
+
+ :param revids: Revision ids to copy.
+ :param pb: Optional progress bar
+ """
+ self._prev_inv = None
+ ranges = []
+ curmetabranch = None
+ currange = None
+ revmetas = {}
+ pb = ui.ui_factory.nested_progress_bar()
+ try:
+ for i, (revmeta, mapping) in enumerate(revs):
+ pb.update("determining revision ranges", i, len(revs))
+ if revmeta.metabranch is not None and curmetabranch == revmeta.metabranch:
+ (branch_path, low_water_mark, from_revnum, to_revum, revmetas) = currange
+ revmetas[revmeta.revnum] = (revmeta, mapping)
+ currange = (revmeta.branch_path, low_water_mark, from_revnum, revmeta.revnum, revmetas)
+ else:
+ if currange is not None:
+ ranges.append(currange)
+ parentrevmeta = revmeta.get_lhs_parent_revmeta(mapping)
+ if parentrevmeta is None:
+ low_water_mark = 0
+ else:
+ low_water_mark = parentrevmeta.revnum
+ currange = (revmeta.branch_path, low_water_mark, revmeta.revnum, revmeta.revnum,
+ {revmeta.revnum: (revmeta, mapping)})
+ finally:
+ pb.finished()
+ if currange is not None:
+ ranges.append(currange)
+
+ mutter("fetching ranges: %r" % ranges)
+ if not self.target.is_in_write_group():
+ self.target.start_write_group()
+
+ try:
+ for (branch_path, low_water_mark, start_revision, end_revision, revmetas) in ranges:
+ def revstart(revnum, revprops):
+ if pb is not None:
+ pb.update("fetching revisions", revnum, len(revs))
+ revmeta, mapping = revmetas[revnum]
+ revmeta._revprops = revprops
+ return self._get_editor(revmeta, mapping)
+
+ def revfinish(revision, revprops, editor):
+ self._prev_inv = editor.inventory
+
+ conn = self.source.transport.get_connection(revmeta.branch_path)
+ try:
+ conn.replay_range(start_revision, end_revision, low_water_mark, (revstart, revfinish), True)
+ finally:
+ if not conn.busy:
+ self.source.transport.add_connection(conn)
+
+ if i % FETCH_COMMIT_WRITE_SIZE == 0:
+ self.target.commit_write_group()
+ finally:
+ if self.target.is_in_write_group():
+ self.target.commit_write_group()
+
@staticmethod
def is_compatible(source, target):
"""Be compatible with SvnRepository."""
More information about the bazaar-commits
mailing list