Merge lp:~jelmer/bzr-builddeb/merge-upstream-revision into lp:bzr-builddeb

Proposed by Jelmer Vernooij
Status: Merged
Approved by: James Westby
Approved revision: 645
Merged at revision: 643
Proposed branch: lp:~jelmer/bzr-builddeb/merge-upstream-revision
Merge into: lp:bzr-builddeb
Diff against target: 160 lines (+65/-16)
5 files modified
cmds.py (+12/-4)
debian/changelog (+1/-1)
import_dsc.py (+7/-7)
tests/blackbox/test_merge_upstream.py (+34/-0)
upstream/branch.py (+11/-4)
To merge this branch: bzr merge lp:~jelmer/bzr-builddeb/merge-upstream-revision
Reviewer Review Type Date Requested Status
James Westby Approve
Review via email: mp+81868@code.launchpad.net

Description of the change

Fix the support for the -r argument to "bzr merge-upstream", when used without any arguments like --version.

In addition, allow merging upstream revisions that don't have a matching version in the primary upstream source.

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 'cmds.py'
2--- cmds.py 2011-10-08 21:45:17 +0000
3+++ cmds.py 2011-11-10 16:01:23 +0000
4@@ -733,7 +733,7 @@
5
6 if revision is not None:
7 if upstream_branch is None:
8- raise BzrCommandError("--revision can only be used with a"
9+ raise BzrCommandError("--revision can only be used with a "
10 "valid upstream branch")
11 if len(revision) > 1:
12 raise BzrCommandError("merge-upstream takes only a "
13@@ -747,7 +747,7 @@
14 if version is None and upstream_revisions is not None:
15 # Look up the version from the upstream revision
16 version = upstream_branch_source.get_version(package,
17- current_version, upstream_revisions)
18+ current_version, upstream_revisions[None])
19 elif version is None and primary_upstream_source is not None:
20 version = primary_upstream_source.get_latest_version(
21 package, current_version)
22@@ -774,8 +774,16 @@
23 (version, upstream_branch_source))
24 if need_upstream_tarball:
25 target_dir = tempfile.mkdtemp() # FIXME: Cleanup?
26- locations = primary_upstream_source.fetch_tarballs(
27- package, version, target_dir, components=[None])
28+ try:
29+ locations = primary_upstream_source.fetch_tarballs(
30+ package, version, target_dir, components=[None])
31+ except PackageVersionNotPresent:
32+ if upstream_revisions is not None:
33+ locations = upstream_branch_source.fetch_tarballs(
34+ package, version, target_dir, components=[None],
35+ revisions=upstream_revisions)
36+ else:
37+ raise
38 source_format = get_source_format(tree)
39 v3 = (source_format in [
40 FORMAT_3_0_QUILT, FORMAT_3_0_NATIVE])
41
42=== modified file 'debian/changelog'
43--- debian/changelog 2011-10-14 14:16:56 +0000
44+++ debian/changelog 2011-11-10 16:01:23 +0000
45@@ -21,7 +21,7 @@
46 * Support svn-buildpackage tag names to find upstream versions.
47 LP: #874263
48
49- -- Jelmer Vernooij <jelmer@debian.org> Fri, 14 Oct 2011 16:16:46 +0200
50+ -- Jelmer Vernooij <jelmer@debian.org> Thu, 10 Nov 2011 16:56:12 +0100
51
52 bzr-builddeb (2.7.9) unstable; urgency=low
53
54
55=== modified file 'import_dsc.py'
56--- import_dsc.py 2011-10-25 10:55:57 +0000
57+++ import_dsc.py 2011-11-10 16:01:23 +0000
58@@ -560,7 +560,6 @@
59 tarballs=upstream_tarballs):
60 return False
61
62-
63 up_branch = self.pristine_upstream_branch
64 up_branch.lock_read()
65 try:
66@@ -568,14 +567,15 @@
67 other_up_branch = branch.pristine_upstream_branch
68 other_up_branch.lock_read()
69 try:
70- pristine_upstream_revids = branch.pristine_upstream_source.version_as_revisions(package, version)
71- if pristine_upstream_revids.keys() != [None]:
72- raise MultipleUpstreamTarballsNotSupported()
73- pristine_upstream_revid = pristine_upstream_revids[None]
74 graph = other_up_branch.repository.get_graph(
75 up_branch.repository)
76- return graph.is_ancestor(up_branch.last_revision(),
77- pristine_upstream_revid)
78+ pristine_upstream_revids = branch.pristine_upstream_source.version_as_revisions(
79+ package, version, tarballs=upstream_tarballs)
80+ for (component, pristine_upstream_revid) in pristine_upstream_revids.iteritems():
81+ if not graph.is_ancestor(up_branch.last_revision(),
82+ pristine_upstream_revid):
83+ return False
84+ return True
85 finally:
86 other_up_branch.unlock()
87 finally:
88
89=== modified file 'tests/blackbox/test_merge_upstream.py'
90--- tests/blackbox/test_merge_upstream.py 2011-09-26 23:40:46 +0000
91+++ tests/blackbox/test_merge_upstream.py 2011-11-10 16:01:23 +0000
92@@ -187,6 +187,40 @@
93 os.path.abspath(rel2.tarball), changed_upstream.tree.basedir],
94 working_dir=package.tree.basedir)
95
96+ def test_upstream_branch_revision(self):
97+ # It is sufficient to just specify an upstream revision
98+ upstream = self.make_upstream()
99+ rel1 = self.release_upstream(upstream)
100+ package = self.import_upstream(rel1, upstream)
101+ changed_upstream = self.file_moved_replaced_upstream(upstream)
102+ rel2 = self.release_upstream(changed_upstream)
103+ package_path = package.tree.basedir
104+ os.mkdir(os.path.join(package_path, '.bzr-builddeb/'))
105+ f = open(os.path.join(package_path, '.bzr-builddeb/local.conf'), 'wb')
106+ try:
107+ f.write('[BUILDDEB]\nupstream-branch = %s\n' % changed_upstream.tree.basedir)
108+ finally:
109+ f.close()
110+
111+ (out, err) = self.run_bzr(
112+ ['merge-upstream', '-rrevid:%s' % changed_upstream.tree.last_revision()],
113+ working_dir=package.tree.basedir)
114+ self.assertEquals(out, "")
115+ self.assertContainsRe(err, "Using version string 8.")
116+
117+ def test_upstream_branch_revision_requires_upstream(self):
118+ # --revision requires a valid upstreambranch
119+ upstream = self.make_upstream()
120+ rel1 = self.release_upstream(upstream)
121+ package = self.import_upstream(rel1, upstream)
122+ changed_upstream = self.file_moved_replaced_upstream(upstream)
123+ rel2 = self.release_upstream(changed_upstream)
124+ (out, err) = self.run_bzr(['merge-upstream', '-r8'], working_dir=package.tree.basedir, retcode=3)
125+ self.assertEquals(out, "")
126+ self.assertEquals(err,
127+ "Using distribution unstable\n"
128+ "bzr: ERROR: --revision can only be used with a valid upstream branch\n")
129+
130 def test_hooks(self):
131 upstream = self.make_upstream()
132 rel1 = self.release_upstream(upstream)
133
134=== modified file 'upstream/branch.py'
135--- upstream/branch.py 2011-09-27 00:48:16 +0000
136+++ upstream/branch.py 2011-11-10 16:01:23 +0000
137@@ -264,12 +264,19 @@
138 finally:
139 self.upstream_branch.unlock()
140
141- def fetch_tarballs(self, package, version, target_dir, components=None):
142+ def fetch_tarballs(self, package, version, target_dir, components=None,
143+ revisions=None):
144+ if components is not None and components != [None]:
145+ # Multiple components are not supported
146+ raise PackageVersionNotPresent(package, version, self)
147 self.upstream_branch.lock_read()
148 try:
149- revid = self.version_as_revision(package, version)
150- if revid is None:
151- raise PackageVersionNotPresent(package, version, self)
152+ if revisions is not None:
153+ revid = revisions[None]
154+ else:
155+ revid = self.version_as_revision(package, version)
156+ if revid is None:
157+ raise PackageVersionNotPresent(package, version, self)
158 note("Exporting upstream branch revision %s to create the tarball",
159 revid)
160 target_filename = self._tarball_path(package, version, None, target_dir)

Subscribers

People subscribed via source and target branches