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
1=== modified file 'breezy/git/branch.py'
2--- breezy/git/branch.py 2021-05-02 15:07:21 +0000
3+++ breezy/git/branch.py 2022-01-21 22:35:17 +0000
4@@ -86,6 +86,19 @@
5 )
6
7
8+
9+def _update_tip(source, target, revid, overwrite=False):
10+ if not overwrite:
11+ last_rev = target.last_revision()
12+ graph = target.repository.get_graph(source.repository)
13+ if graph.is_ancestor(revid, last_rev):
14+ # target is ahead of revid
15+ return
16+ target.generate_revision_history(revid, last_rev, other_branch=source)
17+ else:
18+ target.generate_revision_history(revid)
19+
20+
21 def _calculate_revnos(branch):
22 if branch._format.stores_revno():
23 return True
24@@ -1027,13 +1040,9 @@
25
26 def _update_revisions(self, stop_revision=None, overwrite=False, tag_selector=None):
27 head, refs = self.fetch_objects(stop_revision, fetch_tags=None, tag_selector=tag_selector)
28- if overwrite:
29- prev_last_revid = None
30- else:
31- prev_last_revid = self.target.last_revision()
32- self.target.generate_revision_history(
33- self._last_revid, last_rev=prev_last_revid,
34- other_branch=self.source)
35+ _update_tip(
36+ self.source, self.target,
37+ self._last_revid, overwrite)
38 return head, refs
39
40 def update_references(self, revid=None):
41@@ -1260,10 +1269,10 @@
42 result.target_branch = self.target
43 result.old_revid = self.target.last_revision()
44 refs, stop_revision = self.update_refs(stop_revision)
45- self.target.generate_revision_history(
46+ _update_tip(
47+ self.source, self.target,
48 stop_revision,
49- (result.old_revid if ("history" not in overwrite) else None),
50- other_branch=self.source)
51+ "history" in overwrite)
52 tags_ret = self.source.tags.merge_to(
53 self.target.tags,
54 overwrite=("tags" in overwrite),
55@@ -1311,10 +1320,10 @@
56 with self.target.lock_write(), self.source.lock_read():
57 result.old_revid = self.target.last_revision()
58 refs, stop_revision = self.update_refs(stop_revision)
59- self.target.generate_revision_history(
60+ _update_tip(
61+ self.source, self.target,
62 stop_revision,
63- (result.old_revid if ("history" not in overwrite) else None),
64- other_branch=self.source)
65+ "history" in overwrite)
66 tags_ret = self.source.tags.merge_to(
67 self.target.tags, overwrite=("tags" in overwrite),
68 selector=tag_selector)
69
70=== modified file 'breezy/git/tests/test_branch.py'
71--- breezy/git/tests/test_branch.py 2020-02-18 01:57:45 +0000
72+++ breezy/git/tests/test_branch.py 2022-01-21 22:35:17 +0000
73@@ -330,6 +330,17 @@
74 revid,
75 wt.branch.get_master_branch().last_revision())
76
77+ def test_interbranch_pull_older(self):
78+ path, (gitsha1, gitsha2) = self.make_tworev_branch()
79+ oldrepo = Repository.open(path)
80+ revid1 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha1)
81+ revid2 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha2)
82+ newbranch = self.make_branch('g')
83+ inter_branch = InterBranch.get(Branch.open(path), newbranch)
84+ inter_branch.pull(stop_revision=revid2)
85+ inter_branch.pull(stop_revision=revid1)
86+ self.assertEqual(revid2, newbranch.last_revision())
87+
88
89 class ForeignTestsBranchFactory(object):
90

Subscribers

People subscribed via source and target branches