Merge lp:~james-w/pkgme-devportal/package-name-spaces into lp:pkgme-devportal

Proposed by James Westby
Status: Merged
Approved by: Jonathan Lange
Approved revision: 124
Merged at revision: 123
Proposed branch: lp:~james-w/pkgme-devportal/package-name-spaces
Merge into: lp:pkgme-devportal
Diff against target: 133 lines (+44/-7)
4 files modified
devportalbinary/acceptance/data/package_name_with_spaces/devportal-metadata.json (+4/-0)
devportalbinary/acceptance/tests/__init__.py (+18/-0)
devportalbinary/metadata.py (+9/-5)
devportalbinary/tests/test_metadata.py (+13/-2)
To merge this branch: bzr merge lp:~james-w/pkgme-devportal/package-name-spaces
Reviewer Review Type Date Requested Status
Jonathan Lange Approve
Review via email: mp+124701@code.launchpad.net

Commit message

Use the cleaned package name to avoid spaces etc. in filenames.

Description of the change

Hi,

This fixes a bug that John found where packages fail to build because
they have spaces in the paths.

We were using the raw PackageName produced by the backend, but pkgme
does some futzing with the package name to remove spaces and stuff.

We therefore "clean" the package name before we use it to ensure we
are using the final package name.

Thanks,

James

To post a comment you must log in.
Revision history for this message
Jonathan Lange (jml) wrote :

Thanks. Glad it's such a simple fix.

That said, I don't think this will fix bad filenames that come from get_extra_files_from_paths.

jml

review: Needs Fixing
123. By James Westby

Also fix the issue with get_extra_files_from_paths. Thanks jml.

124. By James Westby

Add an acceptance test for a package name with spaces.

Revision history for this message
Jonathan Lange (jml) wrote :

Thanks.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added directory 'devportalbinary/acceptance/data/package_name_with_spaces'
2=== added file 'devportalbinary/acceptance/data/package_name_with_spaces/devportal-metadata.json'
3--- devportalbinary/acceptance/data/package_name_with_spaces/devportal-metadata.json 1970-01-01 00:00:00 +0000
4+++ devportalbinary/acceptance/data/package_name_with_spaces/devportal-metadata.json 2012-09-17 16:22:21 +0000
5@@ -0,0 +1,4 @@
6+{
7+ "suggested_package_name": "The Jabberwocky",
8+ "description": "The Jabberwocky, by Lewis Carroll"
9+}
10
11=== added file 'devportalbinary/acceptance/data/package_name_with_spaces/jabberwocky.pdf'
12Binary files devportalbinary/acceptance/data/package_name_with_spaces/jabberwocky.pdf 1970-01-01 00:00:00 +0000 and devportalbinary/acceptance/data/package_name_with_spaces/jabberwocky.pdf 2012-09-17 16:22:21 +0000 differ
13=== modified file 'devportalbinary/acceptance/tests/__init__.py'
14--- devportalbinary/acceptance/tests/__init__.py 2012-09-12 18:08:24 +0000
15+++ devportalbinary/acceptance/tests/__init__.py 2012-09-17 16:22:21 +0000
16@@ -1,5 +1,6 @@
17 import os
18 import shutil
19+import subprocess
20
21 from fixtures import Fixture, MonkeyPatch, TempDir
22 from testtools import TestCase
23@@ -48,6 +49,15 @@
24 build_source_package(test_data.path, sign=False)
25
26
27+def build_binary_package(path):
28+ proc = subprocess.Popen(["debuild", "-uc", "-us"], cwd=path,
29+ stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
30+ out, err = proc.communicate()
31+ if proc.returncode != 0:
32+ raise AssertionError(
33+ "Building binary package from %s failed: %s" % (path, out))
34+
35+
36 class AcceptanceTests(TestCase):
37
38 def assertErrorsOutWith(self, test_data, error_message):
39@@ -145,6 +155,14 @@
40 test_data,
41 "Text will never be implemented: You can't package a text file")
42
43+ def test_package_name_with_spaces(self):
44+ test_data = self.useFixture(TestData("package_name_with_spaces"))
45+ run_pkgme(test_data)
46+ # Build the binary package, as that's usually where errors with
47+ # spaces in paths show up.
48+ build_binary_package(test_data.path)
49+ self.assertThat(test_data.path, HasFileTree({'debian/control': {}}))
50+
51
52 def test_suite():
53 import unittest
54
55=== modified file 'devportalbinary/metadata.py'
56--- devportalbinary/metadata.py 2012-09-12 18:19:35 +0000
57+++ devportalbinary/metadata.py 2012-09-17 16:22:21 +0000
58@@ -402,9 +402,8 @@
59 'debian/%s.lintian-overrides' % (package_name,) : lintian_override_content,
60 }
61
62- def get_extra_files_from_paths(self):
63+ def get_extra_files_from_paths(self, package_name):
64 """Get extra, binary files for the package."""
65- package_name = self._calculate_info_element(PackageName)
66 extra_files = self._get_extra_icon_files_from_paths(package_name)
67 return extra_files
68
69@@ -538,7 +537,6 @@
70 Distribution,
71 ExplicitCopyright,
72 ExtraControlBinaryFields,
73- ExtraFilesFromPaths,
74 ExtraTargets,
75 Maintainer,
76 Section,
77@@ -552,9 +550,15 @@
78 value = self._calculate_info_element(element)
79 if value:
80 info[element] = value
81- # Special-case ExtraFiles since it needs PackageName.
82+ # Special-case ExtraFiles and ExtraFilesFromPaths since they need
83+ # PackageName.
84+ package_name = PackageName.clean(info[PackageName])
85 info[ExtraFiles] = self._calculate_info_element(
86- ExtraFiles, info[PackageName])
87+ ExtraFiles, package_name)
88+ extra_files_from_paths = self._calculate_info_element(
89+ ExtraFilesFromPaths, package_name)
90+ if extra_files_from_paths:
91+ info[ExtraFilesFromPaths] = extra_files_from_paths
92 return info
93
94 @classmethod
95
96=== modified file 'devportalbinary/tests/test_metadata.py'
97--- devportalbinary/tests/test_metadata.py 2012-09-12 18:19:35 +0000
98+++ devportalbinary/tests/test_metadata.py 2012-09-17 16:22:21 +0000
99@@ -351,14 +351,16 @@
100 backend._get_extra_icon_files_from_paths(package_name))
101
102 def test_get_extra_files_from_paths_in_info_if_icons(self):
103- metadata = self.make_metadata()
104+ package_name = self.getUniqueString()
105+ metadata = self.make_metadata(package_name=package_name)
106 metadata[MetadataBackend.ICONS] = {
107 '48x48': '/foo/bar.png',
108 '128x128': '/baz/qux.png',
109 }
110 backend = self.make_backend(metadata=metadata)
111 self.assertEqual(
112- backend.get_extra_files_from_paths(),
113+ backend.get_extra_files_from_paths(
114+ PackageName.clean(package_name)),
115 backend.get_info()[ExtraFilesFromPaths])
116
117 def test_get_extra_files_from_paths_lintian_override(self):
118@@ -369,6 +371,15 @@
119 'debian/%s.lintian-overrides' % package_name,
120 backend.get_extra_files(package_name))
121
122+ def test_get_info_uses_cleaned_package_name(self):
123+ application_name = 'foo bar'
124+ expected_package_name = 'foobar'
125+ metadata = self.make_metadata(package_name=application_name)
126+ backend = self.make_backend(metadata=metadata)
127+ self.assertIn(
128+ 'debian/%s.lintian-overrides' % expected_package_name,
129+ backend.get_info()[ExtraFiles])
130+
131 def test_license_field_not_in_mapping(self):
132 metadata = self.make_metadata()
133 license = 'not-standard-license-that-is-not-mapped'

Subscribers

People subscribed via source and target branches