Rev 3470: (Jelmer) Move update_revisions() implementation from BzrBranch to in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Wed Jun 4 18:42:24 BST 2008
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 3470
revision-id:pqm at pqm.ubuntu.com-20080604174215-d0m8mjs939ek9ed7
parent: pqm at pqm.ubuntu.com-20080604075316-2zq1pdapom9r80zr
parent: jelmer at samba.org-20080604153249-0o340pscw459x3sq
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Wed 2008-06-04 18:42:15 +0100
message:
(Jelmer) Move update_revisions() implementation from BzrBranch to
Branch.
modified:
bzrlib/branch.py branch.py-20050309040759-e4baf4e0d046576e
------------------------------------------------------------
revno: 3465.1.1
revision-id:jelmer at samba.org-20080604153249-0o340pscw459x3sq
parent: pqm at pqm.ubuntu.com-20080602222734-9ojr7ubruggqcjau
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: bzr.dev
timestamp: Wed 2008-06-04 17:32:49 +0200
message:
Move implementation of update_revisions() from BzrBranch to Branch as it only uses publib functions.
modified:
bzrlib/branch.py branch.py-20050309040759-e4baf4e0d046576e
=== modified file 'bzrlib/branch.py'
--- a/bzrlib/branch.py 2008-06-04 07:29:35 +0000
+++ b/bzrlib/branch.py 2008-06-04 17:42:15 +0000
@@ -448,6 +448,7 @@
raise errors.NoSuchRevision(self, stop_revision)
return other_history[self_len:stop_revision]
+ @needs_write_lock
def update_revisions(self, other, stop_revision=None, overwrite=False,
graph=None):
"""Pull in new perfect-fit revisions.
@@ -460,7 +461,51 @@
information. This can be None.
:return: None
"""
- raise NotImplementedError(self.update_revisions)
+ other.lock_read()
+ try:
+ other_revno, other_last_revision = other.last_revision_info()
+ stop_revno = None # unknown
+ if stop_revision is None:
+ stop_revision = other_last_revision
+ if _mod_revision.is_null(stop_revision):
+ # if there are no commits, we're done.
+ return
+ stop_revno = other_revno
+
+ # what's the current last revision, before we fetch [and change it
+ # possibly]
+ last_rev = _mod_revision.ensure_null(self.last_revision())
+ # we fetch here so that we don't process data twice in the common
+ # case of having something to pull, and so that the check for
+ # already merged can operate on the just fetched graph, which will
+ # be cached in memory.
+ self.fetch(other, stop_revision)
+ # Check to see if one is an ancestor of the other
+ if not overwrite:
+ if graph is None:
+ graph = self.repository.get_graph()
+ heads = graph.heads([stop_revision, last_rev])
+ if heads == set([last_rev]):
+ # The current revision is a decendent of the target,
+ # nothing to do
+ return
+ elif heads == set([stop_revision, last_rev]):
+ # These branches have diverged
+ raise errors.DivergedBranches(self, other)
+ elif heads != set([stop_revision]):
+ raise AssertionError("invalid heads: %r" % heads)
+ if stop_revno is None:
+ if graph is None:
+ graph = self.repository.get_graph()
+ this_revno, this_last_revision = self.last_revision_info()
+ stop_revno = graph.find_distance_to_null(stop_revision,
+ [(other_last_revision, other_revno),
+ (this_last_revision, this_revno)])
+ self.set_last_revision_info(stop_revno, stop_revision)
+ finally:
+ other.unlock()
+
+
def revision_id_to_revno(self, revision_id):
"""Given a revision id, return its revno"""
@@ -1506,54 +1551,6 @@
self.set_revision_history(self._lefthand_history(revision_id,
last_rev, other_branch))
- @needs_write_lock
- def update_revisions(self, other, stop_revision=None, overwrite=False,
- graph=None):
- """See Branch.update_revisions."""
- other.lock_read()
- try:
- other_revno, other_last_revision = other.last_revision_info()
- stop_revno = None # unknown
- if stop_revision is None:
- stop_revision = other_last_revision
- if _mod_revision.is_null(stop_revision):
- # if there are no commits, we're done.
- return
- stop_revno = other_revno
-
- # what's the current last revision, before we fetch [and change it
- # possibly]
- last_rev = _mod_revision.ensure_null(self.last_revision())
- # we fetch here so that we don't process data twice in the common
- # case of having something to pull, and so that the check for
- # already merged can operate on the just fetched graph, which will
- # be cached in memory.
- self.fetch(other, stop_revision)
- # Check to see if one is an ancestor of the other
- if not overwrite:
- if graph is None:
- graph = self.repository.get_graph()
- heads = graph.heads([stop_revision, last_rev])
- if heads == set([last_rev]):
- # The current revision is a decendent of the target,
- # nothing to do
- return
- elif heads == set([stop_revision, last_rev]):
- # These branches have diverged
- raise errors.DivergedBranches(self, other)
- elif heads != set([stop_revision]):
- raise AssertionError("invalid heads: %r" % heads)
- if stop_revno is None:
- if graph is None:
- graph = self.repository.get_graph()
- this_revno, this_last_revision = self.last_revision_info()
- stop_revno = graph.find_distance_to_null(stop_revision,
- [(other_last_revision, other_revno),
- (this_last_revision, this_revno)])
- self.set_last_revision_info(stop_revno, stop_revision)
- finally:
- other.unlock()
-
def basis_tree(self):
"""See Branch.basis_tree."""
return self.repository.revision_tree(self.last_revision())
More information about the bazaar-commits
mailing list