Merge lp:~jelmer/bzr-builddeb/mu-unicode-tarfile-version into lp:bzr-builddeb

Proposed by Jelmer Vernooij
Status: Merged
Merged at revision: 682
Proposed branch: lp:~jelmer/bzr-builddeb/mu-unicode-tarfile-version
Merge into: lp:bzr-builddeb
Diff against target: 217 lines (+84/-48)
4 files modified
cmds.py (+59/-42)
debian/changelog (+3/-1)
tests/test_upstream.py (+14/-1)
upstream/__init__.py (+8/-4)
To merge this branch: bzr merge lp:~jelmer/bzr-builddeb/mu-unicode-tarfile-version
Reviewer Review Type Date Requested Status
James Westby Approve
Review via email: mp+87535@code.launchpad.net

Description of the change

Make sure to only return bytestrings for upstream versions in TarfileSource, rather than unicode strings.

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 2012-01-02 18:01:36 +0000
3+++ cmds.py 2012-01-04 21:22:35 +0000
4@@ -82,6 +82,48 @@
5 type=str)
6
7
8+def _get_changelog_info(tree, last_version=None, package=None, distribution=None):
9+ from bzrlib.plugins.builddeb.util import (
10+ find_changelog,
11+ find_last_distribution,
12+ lookup_distribution,
13+ )
14+ from bzrlib.plugins.builddeb.errors import (
15+ MissingChangelogError,
16+ )
17+ current_version = last_version
18+ try:
19+ (changelog, top_level) = find_changelog(tree, False, max_blocks=2)
20+ if last_version is None:
21+ current_version = changelog.version.upstream_version
22+ if package is None:
23+ package = changelog.package
24+ if distribution is None:
25+ distribution = find_last_distribution(changelog)
26+ if distribution is not None:
27+ note(gettext("Using distribution %s") % distribution)
28+ except MissingChangelogError:
29+ top_level = False
30+ changelog = None
31+ if distribution is None:
32+ note("No distribution specified, and no changelog, "
33+ "assuming 'debian'")
34+ distribution = "debian"
35+ if package is None:
36+ raise BzrCommandError("You did not specify --package, and "
37+ "there is no changelog from which to determine the "
38+ "package name, which is needed to know the name to "
39+ "give the .orig.tar.gz. Please specify --package.")
40+ distribution = distribution.lower()
41+ distribution_name = lookup_distribution(distribution)
42+ if distribution_name is None:
43+ raise BzrCommandError(gettext("Unknown target distribution: %s") \
44+ % distribution)
45+ return (current_version, package, distribution, distribution_name,
46+ changelog, top_level)
47+
48+
49+
50 class cmd_builddeb(Command):
51 """Builds a Debian package from a branch.
52
53@@ -633,46 +675,6 @@
54 return self._fetch_tarball(package, version, orig_dir,
55 locations, v3)
56
57- def _get_changelog_info(self, tree, last_version, package, distribution):
58- from bzrlib.plugins.builddeb.util import (
59- find_changelog,
60- find_last_distribution,
61- lookup_distribution,
62- )
63- from bzrlib.plugins.builddeb.errors import (
64- MissingChangelogError,
65- )
66- current_version = last_version
67- try:
68- (changelog, top_level) = find_changelog(tree, False, max_blocks=2)
69- if last_version is None:
70- current_version = changelog.version.upstream_version
71- if package is None:
72- package = changelog.package
73- if distribution is None:
74- distribution = find_last_distribution(changelog)
75- if distribution is not None:
76- note(gettext("Using distribution %s") % distribution)
77- except MissingChangelogError:
78- top_level = False
79- changelog = None
80- if distribution is None:
81- note("No distribution specified, and no changelog, "
82- "assuming 'debian'")
83- distribution = "debian"
84- if package is None:
85- raise BzrCommandError("You did not specify --package, and "
86- "there is no changelog from which to determine the "
87- "package name, which is needed to know the name to "
88- "give the .orig.tar.gz. Please specify --package.")
89- distribution = distribution.lower()
90- distribution_name = lookup_distribution(distribution)
91- if distribution_name is None:
92- raise BzrCommandError(gettext("Unknown target distribution: %s") \
93- % distribution)
94- return (current_version, package, distribution, distribution_name,
95- changelog, top_level)
96-
97 def run(self, location=None, upstream_branch=None, version=None,
98 distribution=None, package=None,
99 directory=".", revision=None, merge_type=None,
100@@ -710,7 +712,7 @@
101 "command.")
102 config = debuild_config(tree, tree)
103 (current_version, package, distribution, distribution_name,
104- changelog, top_level) = self._get_changelog_info(tree, last_version,
105+ changelog, top_level) = _get_changelog_info(tree, last_version,
106 package, distribution)
107 contains_upstream_source = tree_contains_upstream_source(tree)
108 if changelog is None:
109@@ -1160,10 +1162,25 @@
110 from bzrlib.plugins.builddeb.hooks import run_hook
111 from bzrlib.plugins.builddeb.util import (
112 find_changelog,
113+ guess_build_type,
114+ tree_contains_upstream_source,
115 )
116 t = WorkingTree.open_containing('.')[0]
117+ self.add_cleanup(t.lock_read().unlock)
118 config = debuild_config(t, t)
119- if config.build_type != BUILD_TYPE_MERGE:
120+ (current_version, package, distribution, distribution_name,
121+ changelog, top_level) = _get_changelog_info(t)
122+ contains_upstream_source = tree_contains_upstream_source(t)
123+ if changelog is None:
124+ changelog_version = None
125+ else:
126+ changelog_version = changelog.version
127+ build_type = config.build_type
128+ if build_type is None:
129+ build_type = guess_build_type(t, changelog_version,
130+ contains_upstream_source)
131+
132+ if build_type != BUILD_TYPE_MERGE:
133 raise BzrCommandError(gettext("This command only works for merge "
134 "mode packages. See /usr/share/doc/bzr-builddeb"
135 "/user_manual/merge.html for more information."))
136
137=== modified file 'debian/changelog'
138--- debian/changelog 2012-01-02 18:01:36 +0000
139+++ debian/changelog 2012-01-04 21:22:35 +0000
140@@ -5,8 +5,10 @@
141 commands like 'bzr bash-completion'. LP: #903650
142 * Provide merge-package functionality as a hook for 'bzr merge'.
143 LP: #486075, LP: #910900
144+ * Cope with unicode strings being specified to TarfileSource. Based on
145+ patch by Gediminas Paulauskas. LP: #911262
146
147- -- Jelmer Vernooij <jelmer@debian.org> Mon, 02 Jan 2012 17:57:33 +0100
148+ -- Jelmer Vernooij <jelmer@debian.org> Wed, 04 Jan 2012 22:14:07 +0100
149
150 bzr-builddeb (2.8.0) unstable; urgency=low
151
152
153=== modified file 'tests/test_upstream.py'
154--- tests/test_upstream.py 2011-11-30 15:32:08 +0000
155+++ tests/test_upstream.py 2012-01-04 21:22:35 +0000
156@@ -858,7 +858,20 @@
157
158 def test_version(self):
159 source = TarfileSource("foo-1.0.tar.gz", "1.0")
160- self.assertEquals("1.0", source.get_latest_version("foo", "0.9"))
161+ self.assertEquals(
162+ "1.0", source.get_latest_version("foo", "0.9"))
163+
164+ def test_version_unicode(self):
165+ source = TarfileSource(u"foo-1.0.tar.gz", u"1.0")
166+ latest_version = source.get_latest_version("foo", "0.9")
167+ self.assertEquals("1.0", latest_version)
168+ self.assertIsInstance(latest_version, str)
169+
170+ def test_version_unicode_not_specified(self):
171+ source = TarfileSource(u"foo-1.0.tar.gz")
172+ latest_version = source.get_latest_version("foo", "0.9")
173+ self.assertEquals("1.0", latest_version)
174+ self.assertIsInstance(latest_version, str)
175
176 def test_get_latest_version_parses(self):
177 source = TarfileSource("foo-1.0.tar.gz")
178
179=== modified file 'upstream/__init__.py'
180--- upstream/__init__.py 2011-12-02 22:26:26 +0000
181+++ upstream/__init__.py 2012-01-04 21:22:35 +0000
182@@ -509,11 +509,11 @@
183 # Debian style tarball
184 m = re.match(packagename+"_(.*).orig", basename)
185 if m:
186- return m.group(1)
187+ return str(m.group(1))
188 # Traditional, PACKAGE-VERSION.tar.gz
189 m = re.match(packagename+"-(.*)", basename)
190 if m:
191- return m.group(1)
192+ return str(m.group(1))
193 return None
194
195
196@@ -522,7 +522,10 @@
197
198 def __init__(self, path, version=None):
199 self.path = path
200- self.version = version
201+ if version is not None:
202+ self.version = str(version)
203+ else:
204+ self.version = None
205
206 def fetch_tarballs(self, package, version, target_dir, components=None):
207 if version != self.version:
208@@ -534,7 +537,8 @@
209 def get_latest_version(self, package, version):
210 if self.version is not None:
211 return self.version
212- return extract_tarball_version(self.path, package)
213+ self.version = extract_tarball_version(self.path, package)
214+ return self.version
215
216
217 class LaunchpadReleaseFileSource(UpstreamSource):

Subscribers

People subscribed via source and target branches