Merge lp:~jelmer/bzr-builddeb/fetch-tarball into lp:bzr-builddeb

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: 501
Merged at revision: 497
Proposed branch: lp:~jelmer/bzr-builddeb/fetch-tarball
Merge into: lp:bzr-builddeb
Prerequisite: lp:~jelmer/bzr-builddeb/get-export-upstream-revision-version
Diff against target: 339 lines (+79/-44)
4 files modified
cmds.py (+1/-1)
merge_upstream.py (+0/-1)
tests/test_upstream.py (+45/-16)
upstream.py (+33/-26)
To merge this branch: bzr merge lp:~jelmer/bzr-builddeb/fetch-tarball
Reviewer Review Type Date Requested Status
James Westby Approve
Review via email: mp+47209@code.launchpad.net

Description of the change

Another refactoring branch. The main change this makes is to rename get_specific_version to fetch_tarball and to make the new method return the path to the tarball (instead of not specifying the behaviour).

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

Tests.

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-01-24 03:08:28 +0000
3+++ cmds.py 2011-01-24 03:08:28 +0000
4@@ -563,7 +563,7 @@
5 tarball_filename = os.path.join(orig_dir, dest_name)
6 upstream = UpstreamBranchSource(upstream_branch,
7 {version: upstream_revision})
8- upstream.get_specific_version(package, version, orig_dir)
9+ upstream.fetch_tarball(package, version, orig_dir)
10 return tarball_filename
11
12 def _fetch_tarball(self, package, version, orig_dir, location, v3):
13
14=== modified file 'merge_upstream.py'
15--- merge_upstream.py 2011-01-17 22:18:44 +0000
16+++ merge_upstream.py 2011-01-24 03:08:28 +0000
17@@ -26,7 +26,6 @@
18 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 #
20
21-import itertools
22 import subprocess
23
24 try:
25
26=== modified file 'tests/test_upstream.py'
27--- tests/test_upstream.py 2010-03-04 14:26:13 +0000
28+++ tests/test_upstream.py 2011-01-24 03:08:28 +0000
29@@ -20,18 +20,24 @@
30 # We have a bit of a problem with testing the actual uscan etc. integration,
31 # so just mock them.
32
33+"""Tests for the upstream module."""
34+
35+
36+import os
37+
38 from bzrlib.tests import (
39- TestCase,
40- TestCaseWithTransport,
41- )
42+ TestCase,
43+ TestCaseWithTransport,
44+ )
45 from bzrlib.plugins.builddeb.errors import (
46- PackageVersionNotPresent,
47- )
48+ PackageVersionNotPresent,
49+ )
50 from bzrlib.plugins.builddeb.upstream import (
51- AptSource,
52- StackedUpstreamSource,
53- UScanSource,
54- )
55+ AptSource,
56+ StackedUpstreamSource,
57+ UpstreamBranchSource,
58+ UScanSource,
59+ )
60
61
62 class MockSources(object):
63@@ -103,7 +109,7 @@
64 apt_pkg = MockAptPkg(sources)
65 src = AptSource()
66 src._run_apt_source = caller.call
67- self.assertRaises(PackageVersionNotPresent, src.get_specific_version,
68+ self.assertRaises(PackageVersionNotPresent, src.fetch_tarball,
69 "apackage", "0.2", "target", _apt_pkg=apt_pkg)
70 self.assertEqual(1, apt_pkg.init_called_times)
71 self.assertEqual(1, apt_pkg.get_pkg_source_records_called_times)
72@@ -118,7 +124,7 @@
73 apt_pkg = MockAptPkg(sources)
74 src = AptSource()
75 src._run_apt_source = caller.call
76- self.assertRaises(PackageVersionNotPresent, src.get_specific_version,
77+ self.assertRaises(PackageVersionNotPresent, src.fetch_tarball,
78 "apackage", "0.2", "target", _apt_pkg=apt_pkg)
79 self.assertEqual(1, apt_pkg.init_called_times)
80 self.assertEqual(1, apt_pkg.get_pkg_source_records_called_times)
81@@ -133,7 +139,7 @@
82 apt_pkg = MockAptPkg(sources)
83 src = AptSource()
84 src._run_apt_source = caller.call
85- src.get_specific_version("apackage", "0.2", "target",
86+ src.fetch_tarball("apackage", "0.2", "target",
87 _apt_pkg=apt_pkg)
88 self.assertEqual(1, apt_pkg.init_called_times)
89 self.assertEqual(1, apt_pkg.get_pkg_source_records_called_times)
90@@ -152,7 +158,7 @@
91 apt_pkg = MockAptPkg(sources)
92 src = AptSource()
93 src._run_apt_source = caller.call
94- self.assertRaises(PackageVersionNotPresent, src.get_specific_version,
95+ self.assertRaises(PackageVersionNotPresent, src.fetch_tarball,
96 "apackage", "0.2", "target",
97 _apt_pkg=apt_pkg)
98 self.assertEqual(1, apt_pkg.init_called_times)
99@@ -173,7 +179,7 @@
100 self._succeed = succeed
101 self._specific_versions = []
102
103- def get_specific_version(self, package, version, target_dir):
104+ def fetch_tarball(self, package, version, target_dir):
105 self._specific_versions.append((package, version, target_dir))
106 if not self._succeed:
107 raise PackageVersionNotPresent(package, version, self)
108@@ -189,7 +195,7 @@
109 b = RecordingSource(True)
110 c = RecordingSource(False)
111 stack = StackedUpstreamSource([a, b, c])
112- stack.get_specific_version("mypkg", "1.0", "bla")
113+ stack.fetch_tarball("mypkg", "1.0", "bla")
114 self.assertEquals([("mypkg", "1.0", "bla")], b._specific_versions)
115 self.assertEquals([("mypkg", "1.0", "bla")], a._specific_versions)
116 self.assertEquals([], c._specific_versions)
117@@ -205,7 +211,7 @@
118 b = RecordingSource(False)
119 stack = StackedUpstreamSource([a, b])
120 self.assertRaises(PackageVersionNotPresent,
121- stack.get_specific_version, "pkg", "1.0", "bla")
122+ stack.fetch_tarball, "pkg", "1.0", "bla")
123 self.assertEquals([("pkg", "1.0", "bla")], b._specific_versions)
124 self.assertEquals([("pkg", "1.0", "bla")], a._specific_versions)
125
126@@ -233,3 +239,26 @@
127 self.assertEquals(None, src._export_watchfile())
128 self.tree.smart_add(['debian/watch'])
129 self.assertTrue(src._export_watchfile() is not None)
130+
131+
132+class UpstreamBranchSourceTests(TestCaseWithTransport):
133+
134+ def setUp(self):
135+ super(UpstreamBranchSourceTests, self).setUp()
136+ self.tree = self.make_branch_and_tree('.')
137+
138+ def test_fetch_tarball(self):
139+ self.tree.commit("msg")
140+ self.tree.branch.tags.set_tag("1.0", self.tree.branch.last_revision())
141+ source = UpstreamBranchSource(self.tree.branch,
142+ {"1.0": self.tree.branch.last_revision()})
143+ os.mkdir("mydir")
144+ self.assertEquals("mydir/foo_1.0.orig.tar.gz",
145+ source.fetch_tarball("foo", "1.0", "mydir"))
146+ self.failUnlessExists("mydir/foo_1.0.orig.tar.gz")
147+
148+ def test_fetch_tarball_not_found(self):
149+ source = UpstreamBranchSource(self.tree.branch)
150+ self.tree.commit("msg")
151+ self.assertRaises(PackageVersionNotPresent,
152+ source.fetch_tarball, "foo", "1.0", "mydir")
153
154=== modified file 'upstream.py'
155--- upstream.py 2010-05-28 20:45:50 +0000
156+++ upstream.py 2011-01-24 03:08:28 +0000
157@@ -62,14 +62,15 @@
158 """
159 raise NotImplementedError(self.get_latest_version)
160
161- def get_specific_version(self, package, version, target_dir):
162+ def fetch_tarball(self, package, version, target_dir):
163 """Fetch the source tarball for a particular version.
164
165 :param package: Name of the package
166 :param version: Version string of the version to fetch
167 :param target_dir: Directory in which to store the tarball
168+ :return: Path of the fetched tarball
169 """
170- raise NotImplementedError(self.get_specific_version)
171+ raise NotImplementedError(self.fetch_tarball)
172
173 def _tarball_path(self, package, version, target_dir, format=None):
174 return os.path.join(target_dir, tarball_name(package, version,
175@@ -83,7 +84,7 @@
176 self.branch = branch
177 self.tree = tree
178
179- def get_specific_version(self, package, version, target_dir):
180+ def fetch_tarball(self, package, version, target_dir):
181 db = DistributionBranch(self.branch, None, tree=self.tree)
182 if not db.has_upstream_version_in_packaging_branch(version):
183 raise PackageVersionNotPresent(package, version, self)
184@@ -102,12 +103,13 @@
185 raise PackageVersionNotPresent(package, version, self)
186 except PerFileTimestampsNotSupported:
187 raise PackageVersionNotPresent(package, version, self)
188+ return target_filename
189
190
191 class AptSource(UpstreamSource):
192 """Upstream source that uses apt-source."""
193
194- def get_specific_version(self, package, upstream_version, target_dir,
195+ def fetch_tarball(self, package, upstream_version, target_dir,
196 _apt_pkg=None):
197 if _apt_pkg is None:
198 import apt_pkg
199@@ -138,7 +140,7 @@
200 version = get_fn(sources, 'version', 'Version')
201 if upstream_version == Version(version).upstream_version:
202 if self._run_apt_source(package, version, target_dir):
203- return
204+ return self._tarball_path(package, version, target_dir)
205 break
206 note("apt could not find the needed tarball.")
207 raise PackageVersionNotPresent(package, upstream_version, self)
208@@ -158,7 +160,7 @@
209
210 class UpstreamBranchSource(UpstreamSource):
211 """Upstream source that uses the upstream branch.
212-
213+
214 :ivar upstream_branch: Branch with upstream sources
215 :ivar upstream_version_map: Map from version strings to revids
216 """
217@@ -179,7 +181,7 @@
218 revspec).as_revision_id(self.upstream_branch)
219 return None
220
221- def get_specific_version(self, package, version, target_dir):
222+ def fetch_tarball(self, package, version, target_dir):
223 self.upstream_branch.lock_read()
224 try:
225 revid = self._get_revision_id(version)
226@@ -193,6 +195,11 @@
227 export(rev_tree, target_filename, 'tgz', tarball_base)
228 finally:
229 self.upstream_branch.unlock()
230+ return target_filename
231+
232+ def __repr__(self):
233+ return "<%s for %r>" % (self.__class__.__name__,
234+ self.upstream_branch.base)
235
236
237 class GetOrigSourceSource(UpstreamSource):
238@@ -216,11 +223,11 @@
239 if os.path.exists(fetched_tarball):
240 repack_tarball(fetched_tarball, desired_tarball_name,
241 target_dir=target_dir, force_gz=False)
242- return True
243+ return fetched_tarball
244 note("get-orig-source did not create %s", desired_tarball_name)
245- return False
246+ return None
247
248- def get_specific_version(self, package, version, target_dir):
249+ def fetch_tarball(self, package, version, target_dir):
250 if self.larstiq:
251 rules_name = 'rules'
252 else:
253@@ -238,10 +245,11 @@
254 os.mkdir(export_dir)
255 export_dir = os.path.join(export_dir, "debian")
256 export(self.tree, export_dir, format="dir")
257- if not self._get_orig_source(base_export_dir,
258- desired_tarball_names, target_dir):
259+ tarball_path = self._get_orig_source(base_export_dir,
260+ desired_tarball_names, target_dir)
261+ if tarball_path is None:
262 raise PackageVersionNotPresent(package, version, self)
263- return
264+ return tarball_path
265 finally:
266 shutil.rmtree(tmpdir)
267 note("No debian/rules file to try and use for a get-orig-source rule")
268@@ -285,7 +293,7 @@
269 tmp.close()
270 return tempfilename
271
272- def get_specific_version(self, package, version, target_dir):
273+ def fetch_tarball(self, package, version, target_dir):
274 tempfilename = self._export_watchfile()
275 if tempfilename is None:
276 raise PackageVersionNotPresent(package, version, self)
277@@ -295,9 +303,7 @@
278 raise PackageVersionNotPresent(package, version, self)
279 finally:
280 os.unlink(tempfilename)
281-
282- def get_latest_version(self, package, version, target_dir):
283- pass
284+ return self._tarball_path(package, version, target_dir)
285
286
287 class SelfSplitSource(UpstreamSource):
288@@ -320,16 +326,17 @@
289 finally:
290 shutil.rmtree(tmpdir)
291
292- def get_specific_version(self, package, version, target_dir):
293+ def fetch_tarball(self, package, version, target_dir):
294 note("Using the current branch without the 'debian' directory "
295 "to create the tarball")
296- self._split(package, version,
297- self._tarball_path(package, version, target_dir))
298+ tarball_path = self._tarball_path(package, version, target_dir)
299+ self._split(package, version, tarball_path)
300+ return tarball_path
301
302
303 class StackedUpstreamSource(UpstreamSource):
304 """An upstream source that checks a list of other upstream sources.
305-
306+
307 The first source that can provide a tarball, wins.
308 """
309
310@@ -339,10 +346,10 @@
311 def __repr__(self):
312 return "%s(%r)" % (self.__class__.__name__, self._sources)
313
314- def get_specific_version(self, package, version, target_dir):
315+ def fetch_tarball(self, package, version, target_dir):
316 for source in self._sources:
317 try:
318- return source.get_specific_version(package, version, target_dir)
319+ return source.fetch_tarball(package, version, target_dir)
320 except PackageVersionNotPresent:
321 pass
322 raise PackageVersionNotPresent(package, version, self)
323@@ -410,13 +417,13 @@
324 if not os.path.exists(self.store_dir):
325 os.makedirs(self.store_dir)
326 try:
327- self.source.get_specific_version(self.package,
328+ self.source.fetch_tarball(self.package,
329 self.version.upstream_version, self.store_dir)
330 except PackageVersionNotPresent:
331 raise MissingUpstreamTarball(self._tarball_names()[0])
332 else:
333- note("Using the upstream tarball that is present in "
334- "%s" % self.store_dir)
335+ note("Using the upstream tarball that is present in %s" %
336+ self.store_dir)
337 path = self.provide_from_store_dir(target_dir)
338 assert path is not None
339 return path

Subscribers

People subscribed via source and target branches