Merge lp:~jelmer/bzr-builddeb/svn-upstream-import into lp:bzr-builddeb

Proposed by Jelmer Vernooij
Status: Merged
Merged at revision: 494
Proposed branch: lp:~jelmer/bzr-builddeb/svn-upstream-import
Merge into: lp:bzr-builddeb
Diff against target: 106 lines (+36/-18)
2 files modified
merge_upstream.py (+35/-12)
tests/test_merge_upstream.py (+1/-6)
To merge this branch: bzr merge lp:~jelmer/bzr-builddeb/svn-upstream-import
Reviewer Review Type Date Requested Status
James Westby Approve
Bzr-builddeb-hackers code Pending
Review via email: mp+33590@code.launchpad.net

Description of the change

This updates bzr-builddeb to prefer updating the upstream version string using a format that's already being used (if ~svn is used, update that rather than adding ~bzr, etc).

It also adds support for updating the ~svn / +bzr suffixes when upstream is not a foreign branch but an import of a foreign branch.

To post a comment you must log in.
Revision history for this message
James Westby (james-w) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'merge_upstream.py'
2--- merge_upstream.py 2010-08-19 21:11:02 +0000
3+++ merge_upstream.py 2010-08-24 21:41:08 +0000
4@@ -35,6 +35,7 @@
5 # Prior to 0.1.15 the debian module was called debian_bundle
6 from debian_bundle.changelog import Version
7
8+from bzrlib.errors import InvalidRevisionId
9 from bzrlib.revisionspec import RevisionSpec
10
11 from bzrlib.plugins.builddeb.util import get_snapshot_revision
12@@ -43,6 +44,27 @@
13 TAG_PREFIX = "upstream-"
14
15
16+def extract_svn_revno(rev):
17+ """Extract the Subversion number of a revision from a revision.
18+
19+ :param rev: Revision object
20+ :return: Revision number, None if this was not a Subversion revision or
21+ if the revision number could not be determined (bzr-svn not available).
22+ """
23+ try:
24+ from bzrlib.plugins.svn import extract_svn_foreign_revid
25+ except ImportError:
26+ # No svn support
27+ return None
28+ else:
29+ try:
30+ (svn_uuid, branch_path, svn_revno) = extract_svn_foreign_revid(rev)
31+ except InvalidRevisionId:
32+ return None
33+ else:
34+ return svn_revno
35+
36+
37 def upstream_version_add_revision(upstream_branch, version_string, revid):
38 """Update the revision in a upstream version string.
39
40@@ -51,7 +73,7 @@
41 :param revid: Revision id of the revision
42 """
43 revno = upstream_branch.revision_id_to_revno(revid)
44-
45+
46 if "+bzr" in version_string:
47 return "%s+bzr%d" % (version_string[:version_string.rfind("+bzr")], revno)
48
49@@ -59,17 +81,18 @@
50 return "%s~bzr%d" % (version_string[:version_string.rfind("~bzr")], revno)
51
52 rev = upstream_branch.repository.get_revision(revid)
53- svn_revmeta = getattr(rev, "svn_meta", None)
54- if svn_revmeta is not None:
55- svn_revno = svn_revmeta.revnum
56-
57- if "+svn" in version_string:
58- return "%s+svn%d" % (version_string[:version_string.rfind("+svn")], svn_revno)
59- if "~svn" in version_string:
60- return "%s~svn%d" % (version_string[:version_string.rfind("~svn")], svn_revno)
61+ svn_revno = extract_svn_revno(rev)
62+
63+ # FIXME: Raise error if +svn/~svn is present and svn_revno is not set?
64+ if "+svn" in version_string and svn_revno:
65+ return "%s+svn%d" % (version_string[:version_string.rfind("+svn")], svn_revno)
66+ if "~svn" in version_string and svn_revno:
67+ return "%s~svn%d" % (version_string[:version_string.rfind("~svn")], svn_revno)
68+
69+ if svn_revno:
70 return "%s+svn%d" % (version_string, svn_revno)
71-
72- return "%s+bzr%d" % (version_string, revno)
73+ else:
74+ return "%s+bzr%d" % (version_string, revno)
75
76
77 def _upstream_branch_version(revhistory, reverse_tag_dict, package,
78@@ -122,7 +145,7 @@
79 if previous_revision is not None:
80 previous_revspec = RevisionSpec.from_string(previous_revision)
81 previous_revno, _ = previous_revspec.in_history(upstream_branch)
82- # Trim revision history - we don't care about any revisions
83+ # Trim revision history - we don't care about any revisions
84 # before the revision of the previous version
85 else:
86 previous_revno = 0
87
88=== modified file 'tests/test_merge_upstream.py'
89--- tests/test_merge_upstream.py 2010-08-19 21:11:02 +0000
90+++ tests/test_merge_upstream.py 2010-08-24 21:41:08 +0000
91@@ -49,14 +49,9 @@
92 return self.revnos[revid]
93
94 def get_revision(self, revid):
95- class MockSvnMeta(object):
96-
97- def __init__(self, svn_revno):
98- self.revnum = svn_revno
99-
100 rev = Revision(revid)
101 if revid in self.svn_revnos:
102- rev.svn_meta = MockSvnMeta(self.svn_revnos[revid])
103+ rev.foreign_revid = ("uuid", "bp", self.svn_revnos[revid])
104 return rev
105
106 def test_update_plus_rev(self):

Subscribers

People subscribed via source and target branches