Merge lp:~jelmer/brz/overwrite-old-revision into lp:brz/3.2

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: no longer in the source branch.
Merge reported by: The Breezy Bot
Merged at revision: not available
Proposed branch: lp:~jelmer/brz/overwrite-old-revision
Merge into: lp:brz/3.2
Diff against target: 89 lines (+33/-13)
2 files modified
breezy/git/branch.py (+22/-13)
breezy/git/tests/test_branch.py (+11/-0)
To merge this branch: bzr merge lp:~jelmer/brz/overwrite-old-revision
Reviewer Review Type Date Requested Status
Jelmer Vernooij Approve
Review via email: mp+414476@code.launchpad.net

Commit message

Handle pulling of old revisions.

Description of the change

Handle pulling of old revisions.

To post a comment you must log in.
Revision history for this message
Jelmer Vernooij (jelmer) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'breezy/git/branch.py'
--- breezy/git/branch.py 2021-05-02 15:07:21 +0000
+++ breezy/git/branch.py 2022-01-21 22:35:17 +0000
@@ -86,6 +86,19 @@
86 )86 )
8787
8888
89
90def _update_tip(source, target, revid, overwrite=False):
91 if not overwrite:
92 last_rev = target.last_revision()
93 graph = target.repository.get_graph(source.repository)
94 if graph.is_ancestor(revid, last_rev):
95 # target is ahead of revid
96 return
97 target.generate_revision_history(revid, last_rev, other_branch=source)
98 else:
99 target.generate_revision_history(revid)
100
101
89def _calculate_revnos(branch):102def _calculate_revnos(branch):
90 if branch._format.stores_revno():103 if branch._format.stores_revno():
91 return True104 return True
@@ -1027,13 +1040,9 @@
10271040
1028 def _update_revisions(self, stop_revision=None, overwrite=False, tag_selector=None):1041 def _update_revisions(self, stop_revision=None, overwrite=False, tag_selector=None):
1029 head, refs = self.fetch_objects(stop_revision, fetch_tags=None, tag_selector=tag_selector)1042 head, refs = self.fetch_objects(stop_revision, fetch_tags=None, tag_selector=tag_selector)
1030 if overwrite:1043 _update_tip(
1031 prev_last_revid = None1044 self.source, self.target,
1032 else:1045 self._last_revid, overwrite)
1033 prev_last_revid = self.target.last_revision()
1034 self.target.generate_revision_history(
1035 self._last_revid, last_rev=prev_last_revid,
1036 other_branch=self.source)
1037 return head, refs1046 return head, refs
10381047
1039 def update_references(self, revid=None):1048 def update_references(self, revid=None):
@@ -1260,10 +1269,10 @@
1260 result.target_branch = self.target1269 result.target_branch = self.target
1261 result.old_revid = self.target.last_revision()1270 result.old_revid = self.target.last_revision()
1262 refs, stop_revision = self.update_refs(stop_revision)1271 refs, stop_revision = self.update_refs(stop_revision)
1263 self.target.generate_revision_history(1272 _update_tip(
1273 self.source, self.target,
1264 stop_revision,1274 stop_revision,
1265 (result.old_revid if ("history" not in overwrite) else None),1275 "history" in overwrite)
1266 other_branch=self.source)
1267 tags_ret = self.source.tags.merge_to(1276 tags_ret = self.source.tags.merge_to(
1268 self.target.tags,1277 self.target.tags,
1269 overwrite=("tags" in overwrite),1278 overwrite=("tags" in overwrite),
@@ -1311,10 +1320,10 @@
1311 with self.target.lock_write(), self.source.lock_read():1320 with self.target.lock_write(), self.source.lock_read():
1312 result.old_revid = self.target.last_revision()1321 result.old_revid = self.target.last_revision()
1313 refs, stop_revision = self.update_refs(stop_revision)1322 refs, stop_revision = self.update_refs(stop_revision)
1314 self.target.generate_revision_history(1323 _update_tip(
1324 self.source, self.target,
1315 stop_revision,1325 stop_revision,
1316 (result.old_revid if ("history" not in overwrite) else None),1326 "history" in overwrite)
1317 other_branch=self.source)
1318 tags_ret = self.source.tags.merge_to(1327 tags_ret = self.source.tags.merge_to(
1319 self.target.tags, overwrite=("tags" in overwrite),1328 self.target.tags, overwrite=("tags" in overwrite),
1320 selector=tag_selector)1329 selector=tag_selector)
13211330
=== modified file 'breezy/git/tests/test_branch.py'
--- breezy/git/tests/test_branch.py 2020-02-18 01:57:45 +0000
+++ breezy/git/tests/test_branch.py 2022-01-21 22:35:17 +0000
@@ -330,6 +330,17 @@
330 revid,330 revid,
331 wt.branch.get_master_branch().last_revision())331 wt.branch.get_master_branch().last_revision())
332332
333 def test_interbranch_pull_older(self):
334 path, (gitsha1, gitsha2) = self.make_tworev_branch()
335 oldrepo = Repository.open(path)
336 revid1 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha1)
337 revid2 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha2)
338 newbranch = self.make_branch('g')
339 inter_branch = InterBranch.get(Branch.open(path), newbranch)
340 inter_branch.pull(stop_revision=revid2)
341 inter_branch.pull(stop_revision=revid1)
342 self.assertEqual(revid2, newbranch.last_revision())
343
333344
334class ForeignTestsBranchFactory(object):345class ForeignTestsBranchFactory(object):
335346

Subscribers

People subscribed via source and target branches