Merge lp:~jelmer/bzr-builddeb/upstream-parents-per-component into lp:bzr-builddeb

Proposed by Jelmer Vernooij
Status: Merged
Approved by: James Westby
Approved revision: 623
Merged at revision: 627
Proposed branch: lp:~jelmer/bzr-builddeb/upstream-parents-per-component
Merge into: lp:bzr-builddeb
Prerequisite: lp:~jelmer/bzr-builddeb/version-as-revisions
Diff against target: 357 lines (+65/-69)
7 files modified
cmds.py (+14/-10)
dh_make.py (+2/-2)
import_dsc.py (+17/-14)
tests/blackbox/test_merge_upstream.py (+1/-1)
tests/test_import_dsc.py (+6/-6)
tests/test_upstream.py (+13/-4)
upstream/pristinetar.py (+12/-32)
To merge this branch: bzr merge lp:~jelmer/bzr-builddeb/upstream-parents-per-component
Reviewer Review Type Date Requested Status
James Westby Approve
Review via email: mp+77070@code.launchpad.net

Description of the change

Pass parents for upstream revisions around per component.

To post a comment you must log in.
623. By Jelmer Vernooij

remove unused method

Revision history for this message
James Westby (james-w) wrote :

10 + for tversion, tcomponents in db.pristine_upstream_source.iter_versions():
11 + tagged_versions[Version(version)] = tcomponents

Just wanted to check that it is intentional that tversion isn't used in the loop.

Thanks,

James

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-09-26 23:48:23 +0000
3+++ cmds.py 2011-09-26 23:48:23 +0000
4@@ -955,19 +955,24 @@
5 if db.pristine_upstream_source.has_version(None, version):
6 raise BzrCommandError("Version %s is already present." % version)
7 tagged_versions = {}
8- for tag, tag_version, revid in db.pristine_upstream_source.iter_versions():
9- tagged_versions[Version(tag_version)] = revid
10+ for tversion, tcomponents in db.pristine_upstream_source.iter_versions():
11+ tagged_versions[Version(version)] = tcomponents
12 tag_order = sorted(tagged_versions.keys())
13 if tag_order:
14- parents = [tagged_versions[tag_order[-1]]]
15+ base_revisions = tagged_versions[tag_order[-1]]
16 else:
17- parents = []
18- if parents:
19+ base_revisions = {}
20+ if base_revisions:
21 if upstream is not None:
22 # See bug lp:309682
23- upstream.repository.fetch(branch.repository, parents[0])
24- db.extract_upstream_tree({ None: parents[0] }, tempdir)
25+ for parent in base_revisions.values():
26+ upstream.repository.fetch(branch.repository, parent)
27+ db.extract_upstream_tree(base_revisions, tempdir)
28+ parents = {}
29+ for name, base_revid in base_revisions.iteritems():
30+ parents[name] = [base_revid]
31 else:
32+ parents = {}
33 db._create_empty_upstream_tree(tempdir)
34 tree = db.branch.basis_tree()
35 tree.lock_read()
36@@ -1224,9 +1229,8 @@
37 dh_make.run_dh_make(tree, package_name, version, use_v3=v3)
38 finally:
39 tree.unlock()
40- note('Package prepared in %s'
41- % urlutils.unescape_for_display(tree.basedir,
42- self.outf.encoding))
43+ note('Package prepared in %s',
44+ urlutils.unescape_for_display(tree.basedir, self.outf.encoding))
45
46
47 class cmd_dep3_patch(Command):
48
49=== modified file 'dh_make.py'
50--- dh_make.py 2011-09-09 13:20:42 +0000
51+++ dh_make.py 2011-09-26 23:48:23 +0000
52@@ -79,9 +79,9 @@
53 def import_upstream(tarball, package_name, version, use_v3=False):
54 tree = _get_tree(package_name)
55 if tree.branch.last_revision() != mod_revision.NULL_REVISION:
56- parents = [tree.branch.last_revision()]
57+ parents = { None: [tree.branch.last_revision()] }
58 else:
59- parents = []
60+ parents = {}
61 tarball_filenames = _get_tarballs(tree, tarball,
62 package_name, version, use_v3=use_v3)
63 db = import_dsc.DistributionBranch(tree.branch, tree.branch, tree=tree,
64
65=== modified file 'import_dsc.py'
66--- import_dsc.py 2011-09-26 23:48:23 +0000
67+++ import_dsc.py 2011-09-26 23:48:23 +0000
68@@ -784,8 +784,8 @@
69 break
70 real_parents = [p[2] for p in parents]
71 if need_upstream_parent:
72- upstream_revids = self.pristine_upstream_source.version_as_revisions(package,
73- version.upstream_version, tarballs)
74+ upstream_revids = self.pristine_upstream_source.version_as_revisions(
75+ package, version.upstream_version, tarballs)
76 def key(a):
77 if a is None:
78 return None
79@@ -829,13 +829,14 @@
80 # TODO: this method needs a lot of work for when we will make
81 # the branches writeable by others.
82 assert isinstance(version, str)
83- mutter("Importing upstream version %s from %s with parents %s" \
84- % (version, upstream_part, str(upstream_parents)))
85+ mutter("Importing upstream version %s from %s with parents %r" \
86+ % (version, upstream_part, upstream_parents))
87 assert self.pristine_upstream_tree is not None, \
88 "Can't import upstream with no tree"
89 other_branches = self.get_other_branches()
90 ret = []
91 for (tarball, component, md5) in upstream_tarballs:
92+ parents = upstream_parents.get(component, [])
93 if upstream_revisions is not None:
94 revid = upstream_revisions[component]
95 else:
96@@ -850,7 +851,7 @@
97 self.pristine_upstream_branch.fetch(upstream_branch,
98 last_revision=revid)
99 upstream_branch.tags.merge_to(self.pristine_upstream_branch.tags)
100- upstream_parents.append(revid)
101+ parents.append(revid)
102 target_tree = self.pristine_upstream_branch.repository.revision_tree(
103 revid)
104 if file_ids_from is not None:
105@@ -861,8 +862,8 @@
106 else:
107 self_tree = self.branch.basis_tree()
108 self_tree.lock_read()
109- if len(upstream_parents) > 0:
110- parent_revid = upstream_parents[0]
111+ if len(parents) > 0:
112+ parent_revid = parents[0]
113 else:
114 parent_revid = NULL_REVISION
115 self.pristine_upstream_tree.pull(self.pristine_upstream_tree.branch,
116@@ -878,7 +879,7 @@
117 finally:
118 self_tree.unlock()
119 (tag, revid) = self.pristine_upstream_source.import_component_tarball(
120- package, version, self.pristine_upstream_tree, upstream_parents,
121+ package, version, self.pristine_upstream_tree, parents,
122 component, md5, tarball, author=author, timestamp=timestamp)
123 self.pristine_upstream_branch.generate_revision_history(revid)
124 ret.append((component, tag, revid))
125@@ -1086,7 +1087,8 @@
126 last_revision=pull_revid)
127 pull_branch.pristine_upstream_branch.tags.merge_to(
128 self.pristine_upstream_branch.tags)
129- return parents
130+ # FIXME: What about other versions ?
131+ return { None: parents }
132
133 def get_changelog_from_source(self, dir):
134 cl_filename = os.path.join(dir, "debian", "changelog")
135@@ -1384,11 +1386,12 @@
136 tarball_dir = self._extract_tarballs_to_tempdir(upstream_tarballs)
137 try:
138 # FIXME: should use upstream_parents()?
139- parents = []
140+ parents = { None: [] }
141 if self.pristine_upstream_branch.last_revision() != NULL_REVISION:
142- parents = [self.pristine_upstream_branch.last_revision()]
143+ parents = { None: [self.pristine_upstream_branch.last_revision()] }
144 for (component, tag, revid) in self.import_upstream(tarball_dir,
145- package, version, parents, upstream_tarballs=upstream_tarballs,
146+ package, version, parents,
147+ upstream_tarballs=upstream_tarballs,
148 upstream_branch=upstream_branch,
149 upstream_revisions=upstream_revisions):
150 self._fetch_upstream_to_branch(revid)
151@@ -1403,10 +1406,10 @@
152 # missing a proper history link and a criss-cross merge
153 # then recurses and finds no deeper ancestor.
154 # Use the previous upstream import as the from revision
155- if len(parents) == 0:
156+ if len(parents[None]) == 0:
157 from_revision = NULL_REVISION
158 else:
159- from_revision = parents[0]
160+ from_revision = parents[None][0]
161 conflicts = self.tree.merge_from_branch(
162 self.pristine_upstream_branch, merge_type=merge_type,
163 from_revision=from_revision)
164
165=== modified file 'tests/blackbox/test_merge_upstream.py'
166--- tests/blackbox/test_merge_upstream.py 2011-07-20 19:14:43 +0000
167+++ tests/blackbox/test_merge_upstream.py 2011-09-26 23:48:23 +0000
168@@ -98,7 +98,7 @@
169 [(self.tar.tarball, None, md5sum_filename(self.tar.tarball))],
170 "foo",
171 str(self.tar.version),
172- [tree.branch.last_revision()])
173+ { None: [tree.branch.last_revision()]} )
174 package_builder = SourcePackageBuilder("foo",
175 str(self.tar.version)+"-1")
176 package_builder.add_default_control()
177
178=== modified file 'tests/test_import_dsc.py'
179--- tests/test_import_dsc.py 2011-09-26 23:48:23 +0000
180+++ tests/test_import_dsc.py 2011-09-26 23:48:23 +0000
181@@ -787,7 +787,7 @@
182 element in contents]
183 self.build_tree_contents(contents)
184 self.db1.import_upstream(basedir, "package", version.upstream_version,
185- [], [(None, None, None)])
186+ {}, [(None, None, None)])
187 return version
188
189 def test_import_upstream(self):
190@@ -821,7 +821,7 @@
191 write_to_file(os.path.join(basedir, "README"), "Hi\n")
192 write_to_file(os.path.join(basedir, "BUGS"), "")
193 write_to_file(os.path.join(basedir, "COPYING"), "")
194- self.db1.import_upstream(basedir, "package", version1.upstream_version, [],
195+ self.db1.import_upstream(basedir, "package", version1.upstream_version, {},
196 [(None, None, None)])
197 basedir = name + "-" + str(version2.upstream_version)
198 os.mkdir(basedir)
199@@ -829,7 +829,7 @@
200 write_to_file(os.path.join(basedir, "BUGS"), "")
201 write_to_file(os.path.join(basedir, "NEWS"), "")
202 self.db1.import_upstream(basedir, "package", version2.upstream_version,
203- [self.up_tree1.branch.last_revision()], [(None, None, None)])
204+ { None: [self.up_tree1.branch.last_revision()] }, [(None, None, None)])
205 tree = self.up_tree1
206 branch = tree.branch
207 rh = branch.revision_history()
208@@ -862,7 +862,7 @@
209 tf.add(basedir)
210 finally:
211 tf.close()
212- self.db1.import_upstream(basedir, "package", version.upstream_version, [],
213+ self.db1.import_upstream(basedir, "package", version.upstream_version, {},
214 upstream_tarballs=[(os.path.abspath(tar_path), None, self.fake_md5_1)])
215 tree = self.up_tree1
216 branch = tree.branch
217@@ -891,7 +891,7 @@
218 finally:
219 tf.close()
220 self.db1.import_upstream(basedir, "package", version.upstream_version,
221- [], upstream_tarballs=[(os.path.abspath(tar_path), None, self.fake_md5_1)])
222+ {}, upstream_tarballs=[(os.path.abspath(tar_path), None, self.fake_md5_1)])
223 tree = self.up_tree1
224 branch = tree.branch
225 rh = branch.revision_history()
226@@ -940,7 +940,7 @@
227 finally:
228 f.close()
229 self.db1.import_upstream(basedir, "package", version.upstream_version,
230- [], upstream_tarballs=[(os.path.abspath(tar_path), None, self.fake_md5_1)])
231+ {}, upstream_tarballs=[(os.path.abspath(tar_path), None, self.fake_md5_1)])
232 tree = self.up_tree1
233 branch = tree.branch
234 rh = branch.revision_history()
235
236=== modified file 'tests/test_upstream.py'
237--- tests/test_upstream.py 2011-09-26 23:48:23 +0000
238+++ tests/test_upstream.py 2011-09-26 23:48:23 +0000
239@@ -25,7 +25,6 @@
240 from base64 import standard_b64encode
241
242 import bz2
243-import gzip
244 import os
245 import tarfile
246 import zipfile
247@@ -713,14 +712,24 @@
248 class TestUpstreamTagVersion(TestCase):
249
250 def test_simple_upstream(self):
251- self.assertEqual('2.1', upstream_tag_version('upstream-2.1'))
252+ self.assertEqual((None, '2.1'), upstream_tag_version('upstream-2.1'))
253
254 def test_distro_upstream(self):
255- self.assertEqual('2.1',
256+ self.assertEqual((None, '2.1'),
257 upstream_tag_version('upstream-debian-2.1'))
258
259 def test_git_upstream(self):
260- self.assertEqual('2.1', upstream_tag_version('upstream/2.1'))
261+ self.assertEqual((None, '2.1'), upstream_tag_version('upstream/2.1'))
262+
263+ def test_git_upstream_component(self):
264+ self.assertEqual(("lib", '2.1'), upstream_tag_version('upstream/2.1/lib'))
265+
266+ def test_simple_upstream_component(self):
267+ self.assertEqual(("lib", '2.1'), upstream_tag_version('upstream-2.1/lib'))
268+
269+ def test_distro_upstream_component(self):
270+ self.assertEqual(("lib", '2.1'),
271+ upstream_tag_version('upstream-debian-2.1/lib'))
272
273
274 class PristineTarSourceTests(TestCaseWithTransport):
275
276=== modified file 'upstream/pristinetar.py'
277--- upstream/pristinetar.py 2011-09-26 23:48:23 +0000
278+++ upstream/pristinetar.py 2011-09-26 23:48:23 +0000
279@@ -160,35 +160,6 @@
280 self.branch.tags.set_tag(tag_name, revid)
281 return tag_name, revid
282
283- def import_tarballs(self, package, version, tree, parent_ids, tarballs,
284- timestamp=None, author=None):
285- """Import the upstream tarballs.
286-
287- :param package: Package name
288- :param version: Package version
289- :param path: Path with tree to import
290- :param parent_ids: Parent revisions
291- :param tarballs: List of (path, component, md5)
292- :param timestamp: Optional timestamp for new commits
293- :param author: Optional author for new commitscopmone
294- :return: List of tuples with (component, tag, revid)
295- """
296- ret = []
297- component_paths = [cp for (_, cp, _) in tarballs if cp is not None]
298- for (tarball, component, md5) in tarballs:
299- if component is None:
300- exclude = component_paths
301- else:
302- exclude = []
303- (tag, revid) = self.import_component_tarball(
304- package, version, tree, parent_ids, component,
305- md5, tarball, author=author, timestamp=timestamp,
306- exclude=exclude)
307- ret.append((component, tag, revid))
308- # FIXME: Handle multiple components
309- tree.branch.generate_revision_history(revid)
310- return ret
311-
312 def import_component_tarball(self, package, version, tree, parent_ids,
313 component=None, md5=None, tarball=None, author=None, timestamp=None,
314 subdir=None, exclude=None):
315@@ -196,6 +167,7 @@
316
317 :param package: Package name
318 :param version: Upstream version
319+ :param parent_ids: Dictionary mapping component names to revision ids
320 :param component: Component name (None for base)
321 :param exclude: Exclude directories
322 """
323@@ -418,10 +390,13 @@
324
325 :return: Iterator over (tag_name, version, revid) tuples
326 """
327+ ret = {}
328 for tag_name, tag_revid in self.branch.tags.get_tag_dict().iteritems():
329 if not is_upstream_tag(tag_name):
330 continue
331- yield (tag_name, upstream_tag_version(tag_name), tag_revid)
332+ (component, version) = upstream_tag_version(tag_name)
333+ ret.setdefault(version, {})[component] = tag_revid
334+ return ret.iteritems()
335
336
337 def is_upstream_tag(tag):
338@@ -437,7 +412,7 @@
339 """Return the upstream version portion of an upstream tag name.
340
341 :param tag: The string name of the tag.
342- :return: The version portion of the tag.
343+ :return: tuple with version portion of the tag and component name
344 """
345 assert is_upstream_tag(tag), "Not an upstream tag: %s" % tag
346 if tag.startswith('upstream/'):
347@@ -448,4 +423,9 @@
348 tag = tag[len('debian-'):]
349 elif tag.startswith('ubuntu-'):
350 tag = tag[len('ubuntu-'):]
351- return tag
352+ if not '/' in tag:
353+ return (None, tag)
354+ (version, component) = tag.rsplit('/', 1)
355+ if component == "":
356+ component = None
357+ return (component, version)

Subscribers

People subscribed via source and target branches