Merge lp:~james-w/linaro-image-tools/obey-include-debs into lp:linaro-image-tools/11.11

Proposed by James Westby
Status: Superseded
Proposed branch: lp:~james-w/linaro-image-tools/obey-include-debs
Merge into: lp:linaro-image-tools/11.11
Prerequisite: lp:~james-w/linaro-image-tools/make-package-content-optional
Diff against target: 192 lines (+145/-3)
4 files modified
hwpack/builder.py (+5/-1)
hwpack/packages.py (+16/-2)
hwpack/tests/test_builder.py (+25/-0)
hwpack/tests/test_packages.py (+99/-0)
To merge this branch: bzr merge lp:~james-w/linaro-image-tools/obey-include-debs
Reviewer Review Type Date Requested Status
Linaro Infrastructure Pending
Review via email: mp+35357@code.launchpad.net

This proposal has been superseded by a proposal from 2010-09-14.

Description of the change

Hi,

Here's the followup branch that actually obeys the include-debs setting.

If we find that setting is true then we use a new method that just resolves
the versions and doesn't download the content, passing it to the same method
as before.

We tested that passing content=None FetchedPackages to that method in the
last branch, so this is just about plumbing the right bits together.

Thanks,

James

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

I had a good idea to make this simpler.

Thanks,

James

154. By James Westby

Use a parameter rather than a separate method.

The two are so close that we don't need two methods, and can just share most
of the code.

155. By James Westby

Merged make-package-content-optional into obey-include-debs.

156. By James Westby

Merged make-package-content-optional into obey-include-debs.

157. By James Westby

Merge trunk.

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'hwpack/builder.py'
2--- hwpack/builder.py 2010-09-03 15:14:32 +0000
3+++ hwpack/builder.py 2010-09-14 02:18:48 +0000
4@@ -36,7 +36,11 @@
5 fetcher = PackageFetcher(
6 sources.values(), architecture=architecture)
7 with fetcher:
8- packages = fetcher.fetch_packages(self.config.packages)
9+ if self.config.include_debs:
10+ method = fetcher.fetch_packages
11+ else:
12+ method = fetcher.get_versions
13+ packages = method(self.config.packages)
14 hwpack.add_packages(packages)
15 with open(hwpack.filename(), 'w') as f:
16 hwpack.to_file(f)
17
18=== modified file 'hwpack/packages.py'
19--- hwpack/packages.py 2010-09-14 02:18:48 +0000
20+++ hwpack/packages.py 2010-09-14 02:18:48 +0000
21@@ -359,6 +359,21 @@
22 self.cleanup()
23 return False
24
25+ def _get_candidates(self, packages):
26+ results = []
27+ for package in packages:
28+ candidate = self.cache.cache[package].candidate
29+ yield candidate
30+
31+ def get_versions(self, packages):
32+ results = []
33+ for candidate in self._get_candidates(packages):
34+ base = os.path.basename(candidate.filename)
35+ result_package = FetchedPackage.from_apt(
36+ candidate, base)
37+ results.append(result_package)
38+ return results
39+
40 def fetch_packages(self, packages):
41 """Fetch the files for the given list of package names.
42
43@@ -371,8 +386,7 @@
44 be found.
45 """
46 results = []
47- for package in packages:
48- candidate = self.cache.cache[package].candidate
49+ for candidate in self._get_candidates(packages):
50 base = os.path.basename(candidate.filename)
51 destfile = os.path.join(self.cache.tempdir, base)
52 acq = apt_pkg.Acquire(DummyProgress())
53
54=== modified file 'hwpack/tests/test_builder.py'
55--- hwpack/tests/test_builder.py 2010-09-02 21:31:22 +0000
56+++ hwpack/tests/test_builder.py 2010-09-14 02:18:48 +0000
57@@ -72,3 +72,28 @@
58 IsHardwarePack(
59 metadata, [available_package],
60 {source_id: source.sources_entry}))
61+
62+ def test_obeys_include_debs(self):
63+ hwpack_name = "ahwpack"
64+ hwpack_version = "1.0"
65+ architecture = "armel"
66+ package_name = "foo"
67+ source_id = "ubuntu"
68+ available_package = DummyFetchedPackage(
69+ package_name, "1.1", architecture=architecture)
70+ source = self.useFixture(AptSourceFixture([available_package]))
71+ config = self.useFixture(ConfigFileFixture(
72+ '[hwpack]\nname=%s\npackages=%s\narchitectures=%s\n'
73+ 'include-debs=no\n\n[%s]\nsources-entry=%s\n'
74+ % (hwpack_name, package_name, architecture,
75+ source_id, source.sources_entry)))
76+ builder = HardwarePackBuilder(config.filename, hwpack_version)
77+ builder.build()
78+ metadata = Metadata(hwpack_name, hwpack_version, architecture)
79+ self.assertThat(
80+ "hwpack_%s_%s_%s.tar.gz" % (hwpack_name, hwpack_version,
81+ architecture),
82+ IsHardwarePack(
83+ metadata, [available_package],
84+ {source_id: source.sources_entry},
85+ packages_without_content=[available_package]))
86
87=== modified file 'hwpack/tests/test_packages.py'
88--- hwpack/tests/test_packages.py 2010-09-14 02:18:48 +0000
89+++ hwpack/tests/test_packages.py 2010-09-14 02:18:48 +0000
90@@ -653,3 +653,102 @@
91 fetcher = self.get_fetcher([source])
92 self.assertEqual(
93 wanted_package, fetcher.fetch_packages(["foo"])[0])
94+
95+ def test_get_versions_not_found_because_no_sources(self):
96+ fetcher = self.get_fetcher([])
97+ self.assertRaises(KeyError, fetcher.get_versions, ["nothere"])
98+
99+ def test_get_versions_not_found_because_not_in_sources(self):
100+ available_package = DummyFetchedPackage("foo", "1.0")
101+ source = self.useFixture(AptSourceFixture([available_package]))
102+ fetcher = self.get_fetcher([source])
103+ self.assertRaises(KeyError, fetcher.get_versions, ["nothere"])
104+
105+ def test_get_versions_not_found_one_of_two_missing(self):
106+ available_package = DummyFetchedPackage("foo", "1.0")
107+ source = self.useFixture(AptSourceFixture([available_package]))
108+ fetcher = self.get_fetcher([source])
109+ self.assertRaises(
110+ KeyError, fetcher.get_versions, ["foo", "nothere"])
111+
112+ def test_get_versions_fetches_no_packages(self):
113+ available_package = DummyFetchedPackage("foo", "1.0")
114+ source = self.useFixture(AptSourceFixture([available_package]))
115+ fetcher = self.get_fetcher([source])
116+ self.assertEqual(0, len(fetcher.get_versions([])))
117+
118+ def test_get_versions_fetches_single_package(self):
119+ available_package = DummyFetchedPackage("foo", "1.0")
120+ source = self.useFixture(AptSourceFixture([available_package]))
121+ fetcher = self.get_fetcher([source])
122+ self.assertEqual(1, len(fetcher.get_versions(["foo"])))
123+
124+ def test_get_versions_fetches_correct_package(self):
125+ available_package = DummyFetchedPackage("foo", "1.0")
126+ source = self.useFixture(AptSourceFixture([available_package]))
127+ fetcher = self.get_fetcher([source])
128+ package_info = fetcher.get_versions(["foo"])[0]
129+ self.assertEqual(available_package.name, package_info.name)
130+ self.assertEqual(available_package.version, package_info.version)
131+
132+ def test_get_versions_fetches_multiple_packages(self):
133+ available_packages = [
134+ DummyFetchedPackage("bar", "1.0"),
135+ DummyFetchedPackage("foo", "1.0"),
136+ ]
137+ source = self.useFixture(AptSourceFixture(available_packages))
138+ fetcher = self.get_fetcher([source])
139+ self.assertEqual(2, len(fetcher.get_versions(["foo", "bar"])))
140+
141+ def test_get_versions_fetches_multiple_packages_correctly(self):
142+ available_packages = [
143+ DummyFetchedPackage("foo", "1.0"),
144+ DummyFetchedPackage("bar", "1.0"),
145+ ]
146+ source = self.useFixture(AptSourceFixture(available_packages))
147+ fetcher = self.get_fetcher([source])
148+ fetched = fetcher.get_versions(["foo", "bar"])
149+ self.assertEqual(available_packages[0].name, fetched[0].name)
150+ self.assertEqual(available_packages[0].version, fetched[0].version)
151+ self.assertEqual(available_packages[1].name, fetched[1].name)
152+ self.assertEqual(available_packages[1].version, fetched[1].version)
153+
154+ def test_get_versions_fetches_newest(self):
155+ available_packages = [
156+ DummyFetchedPackage("bar", "1.0"),
157+ DummyFetchedPackage("bar", "1.1"),
158+ ]
159+ source = self.useFixture(AptSourceFixture(available_packages))
160+ fetcher = self.get_fetcher([source])
161+ fetched = fetcher.get_versions(["bar"])
162+ self.assertEqual(available_packages[1].name, fetched[0].name)
163+ self.assertEqual(available_packages[1].version, fetched[0].version)
164+
165+ def test_get_versions_fetches_newest_from_multiple_sources(self):
166+ old_source_packages = [DummyFetchedPackage("bar", "1.0")]
167+ new_source_packages = [DummyFetchedPackage("bar", "1.1")]
168+ old_source = self.useFixture(AptSourceFixture(old_source_packages))
169+ new_source = self.useFixture(AptSourceFixture(new_source_packages))
170+ fetcher = self.get_fetcher([old_source, new_source])
171+ fetched = fetcher.get_versions(["bar"])
172+ self.assertEqual(new_source_packages[0].name, fetched[0].name)
173+ self.assertEqual(new_source_packages[0].version, fetched[0].version)
174+
175+ def test_get_versions_fetches_from_correct_architecture(self):
176+ wanted_package = DummyFetchedPackage(
177+ "foo", "1.0", architecture="arch1")
178+ unwanted_package = DummyFetchedPackage(
179+ "foo", "1.1", architecture="arch2")
180+ source = self.useFixture(
181+ AptSourceFixture([wanted_package, unwanted_package]))
182+ fetcher = self.get_fetcher([source], architecture="arch1")
183+ package_info = fetcher.get_versions(['foo'])[0]
184+ self.assertEqual(wanted_package.name, package_info.name)
185+ self.assertEqual(wanted_package.version, package_info.version)
186+
187+ def test_get_versions_doesnt_set_content(self):
188+ available_package = DummyFetchedPackage("foo", "1.0")
189+ source = self.useFixture(AptSourceFixture([available_package]))
190+ fetcher = self.get_fetcher([source])
191+ package_info = fetcher.get_versions(["foo"])[0]
192+ self.assertIs(None, package_info.content)

Subscribers

People subscribed via source and target branches