Merge lp:~cjwatson/launchpad-buildd/control-dbgsym-via-env into lp:launchpad-buildd

Proposed by Colin Watson
Status: Merged
Merged at revision: 208
Proposed branch: lp:~cjwatson/launchpad-buildd/control-dbgsym-via-env
Merge into: lp:launchpad-buildd
Diff against target: 223 lines (+82/-16)
4 files modified
debian/changelog (+2/-0)
lpbuildd/binarypackage.py (+5/-2)
lpbuildd/tests/test_binarypackage.py (+74/-13)
sbuild-package (+1/-1)
To merge this branch: bzr merge lp:~cjwatson/launchpad-buildd/control-dbgsym-via-env
Reviewer Review Type Date Requested Status
William Grant code Approve
Review via email: mp+312356@code.launchpad.net

Commit message

lpbuildd.binarypackage: Pass DEB_BUILD_OPTIONS=noautodbgsym if we have not been told to build debug symbols (LP: #1623256).

To post a comment you must log in.
Revision history for this message
William Grant (wgrant) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/changelog'
--- debian/changelog 2016-11-30 10:20:32 +0000
+++ debian/changelog 2016-12-02 14:30:11 +0000
@@ -2,6 +2,8 @@
22
3 * buildsnap: Grant access to the proxy during the build phase as well as3 * buildsnap: Grant access to the proxy during the build phase as well as
4 during the pull phase (LP: #1642281).4 during the pull phase (LP: #1642281).
5 * lpbuildd.binarypackage: Pass DEB_BUILD_OPTIONS=noautodbgsym if we have
6 not been told to build debug symbols (LP: #1623256).
57
6 -- Colin Watson <cjwatson@ubuntu.com> Fri, 04 Nov 2016 10:47:41 +00008 -- Colin Watson <cjwatson@ubuntu.com> Fri, 04 Nov 2016 10:47:41 +0000
79
810
=== modified file 'lpbuildd/binarypackage.py'
--- lpbuildd/binarypackage.py 2016-02-18 14:44:09 +0000
+++ lpbuildd/binarypackage.py 2016-12-02 14:30:11 +0000
@@ -1,4 +1,4 @@
1# Copyright 2009, 2010 Canonical Ltd. This software is licensed under the1# Copyright 2009-2016 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).2# GNU Affero General Public License version 3 (see the file LICENSE).
33
4from __future__ import absolute_import4from __future__ import absolute_import
@@ -145,7 +145,10 @@
145 if self.arch_indep:145 if self.arch_indep:
146 args.append("-A")146 args.append("-A")
147 args.append(self._dscfile)147 args.append(self._dscfile)
148 self.runSubProcess(self._sbuildpath, args)148 env = dict(os.environ)
149 if not self.build_debug_symbols:
150 env["DEB_BUILD_OPTIONS"] = "noautodbgsym"
151 self.runSubProcess(self._sbuildpath, args, env=env)
149152
150 def getAvailablePackages(self):153 def getAvailablePackages(self):
151 """Return the available binary packages in the chroot.154 """Return the available binary packages in the chroot.
152155
=== modified file 'lpbuildd/tests/test_binarypackage.py'
--- lpbuildd/tests/test_binarypackage.py 2015-08-04 20:57:12 +0000
+++ lpbuildd/tests/test_binarypackage.py 2016-12-02 14:30:11 +0000
@@ -1,4 +1,4 @@
1# Copyright 2013 Canonical Ltd. This software is licensed under the1# Copyright 2013-2016 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).2# GNU Affero General Public License version 3 (see the file LICENSE).
33
4__metaclass__ = type4__metaclass__ = type
@@ -11,10 +11,12 @@
11from debian.deb822 import PkgRelation11from debian.deb822 import PkgRelation
12from testtools import TestCase12from testtools import TestCase
13from testtools.matchers import (13from testtools.matchers import (
14 Contains,
14 ContainsDict,15 ContainsDict,
15 Equals,16 Equals,
16 Is,17 Is,
17 MatchesListwise,18 MatchesListwise,
19 Not,
18 )20 )
19from twisted.internet.task import Clock21from twisted.internet.task import Clock
2022
@@ -48,8 +50,8 @@
48 self.iterators = []50 self.iterators = []
49 self.arch_indep = False51 self.arch_indep = False
5052
51 def runSubProcess(self, path, command, iterate=None):53 def runSubProcess(self, path, command, iterate=None, env=None):
52 self.commands.append([path]+command)54 self.commands.append(([path] + command, env))
53 if iterate is None:55 if iterate is None:
54 iterate = self.iterate56 iterate = self.iterate
55 self.iterators.append(iterate)57 self.iterators.append(iterate)
@@ -111,12 +113,14 @@
111 self.buildid, 'i386', 'warty', '-c', 'chroot:autobuild',113 self.buildid, 'i386', 'warty', '-c', 'chroot:autobuild',
112 '--arch=i386', '--dist=warty', '--purge=never', '--nolog',114 '--arch=i386', '--dist=warty', '--purge=never', '--nolog',
113 'foo_1.dsc',115 'foo_1.dsc',
114 ], True)116 ], final=True)
115 self.assertFalse(self.slave.wasCalled('chrootFail'))117 self.assertFalse(self.slave.wasCalled('chrootFail'))
116118
117 def assertState(self, state, command, final):119 def assertState(self, state, command, env_matcher=None, final=False):
118 self.assertEqual(state, self.getState())120 self.assertEqual(state, self.getState())
119 self.assertEqual(command, self.buildmanager.commands[-1])121 self.assertEqual(command, self.buildmanager.commands[-1][0])
122 if env_matcher is not None:
123 self.assertThat(self.buildmanager.commands[-1][1], env_matcher)
120 if final:124 if final:
121 self.assertEqual(125 self.assertEqual(
122 self.buildmanager.iterate, self.buildmanager.iterators[-1])126 self.buildmanager.iterate, self.buildmanager.iterators[-1])
@@ -130,14 +134,14 @@
130 self.assertState(134 self.assertState(
131 BinaryPackageBuildState.SBUILD,135 BinaryPackageBuildState.SBUILD,
132 ['sharepath/slavebin/scan-for-processes', 'scan-for-processes',136 ['sharepath/slavebin/scan-for-processes', 'scan-for-processes',
133 self.buildid], False)137 self.buildid], final=False)
134138
135 def assertUnmountsSanely(self):139 def assertUnmountsSanely(self):
136 self.buildmanager.iterateReap(self.getState(), 0)140 self.buildmanager.iterateReap(self.getState(), 0)
137 self.assertState(141 self.assertState(
138 BinaryPackageBuildState.UMOUNT,142 BinaryPackageBuildState.UMOUNT,
139 ['sharepath/slavebin/umount-chroot', 'umount-chroot',143 ['sharepath/slavebin/umount-chroot', 'umount-chroot',
140 self.buildid], True)144 self.buildid], final=True)
141145
142 def test_iterate(self):146 def test_iterate(self):
143 # The build manager iterates a normal build from start to finish.147 # The build manager iterates a normal build from start to finish.
@@ -161,6 +165,63 @@
161 self.assertUnmountsSanely()165 self.assertUnmountsSanely()
162 self.assertFalse(self.slave.wasCalled('buildFail'))166 self.assertFalse(self.slave.wasCalled('buildFail'))
163167
168 def test_with_debug_symbols(self):
169 # A build with debug symbols sets up /CurrentlyBuilding
170 # appropriately, and does not pass DEB_BUILD_OPTIONS.
171 self.buildmanager.initiate(
172 {'foo_1.dsc': ''}, 'chroot.tar.gz',
173 {'distribution': 'ubuntu', 'suite': 'warty',
174 'ogrecomponent': 'main', 'archive_purpose': 'PRIMARY',
175 'build_debug_symbols': True})
176 os.makedirs(self.chrootdir)
177 self.buildmanager._state = BinaryPackageBuildState.UPDATE
178 self.buildmanager.iterate(0)
179 self.assertState(
180 BinaryPackageBuildState.SBUILD,
181 ['sharepath/slavebin/sbuild-package', 'sbuild-package',
182 self.buildid, 'i386', 'warty', '-c', 'chroot:autobuild',
183 '--arch=i386', '--dist=warty', '--purge=never', '--nolog',
184 'foo_1.dsc'],
185 env_matcher=Not(Contains('DEB_BUILD_OPTIONS')), final=True)
186 self.assertFalse(self.slave.wasCalled('chrootFail'))
187 with open(os.path.join(self.chrootdir, 'CurrentlyBuilding')) as cb:
188 self.assertEqual(dedent("""\
189 Package: foo
190 Component: main
191 Suite: warty
192 Purpose: PRIMARY
193 Build-Debug-Symbols: yes
194 """), cb.read())
195
196 def test_without_debug_symbols(self):
197 # A build with debug symbols sets up /CurrentlyBuilding
198 # appropriately, and passes DEB_BUILD_OPTIONS=noautodbgsym.
199 self.buildmanager.initiate(
200 {'foo_1.dsc': ''}, 'chroot.tar.gz',
201 {'distribution': 'ubuntu', 'suite': 'warty',
202 'ogrecomponent': 'main', 'archive_purpose': 'PRIMARY',
203 'build_debug_symbols': False})
204 os.makedirs(self.chrootdir)
205 self.buildmanager._state = BinaryPackageBuildState.UPDATE
206 self.buildmanager.iterate(0)
207 self.assertState(
208 BinaryPackageBuildState.SBUILD,
209 ['sharepath/slavebin/sbuild-package', 'sbuild-package',
210 self.buildid, 'i386', 'warty', '-c', 'chroot:autobuild',
211 '--arch=i386', '--dist=warty', '--purge=never', '--nolog',
212 'foo_1.dsc'],
213 env_matcher=ContainsDict(
214 {'DEB_BUILD_OPTIONS': Equals('noautodbgsym')}),
215 final=True)
216 self.assertFalse(self.slave.wasCalled('chrootFail'))
217 with open(os.path.join(self.chrootdir, 'CurrentlyBuilding')) as cb:
218 self.assertEqual(dedent("""\
219 Package: foo
220 Component: main
221 Suite: warty
222 Purpose: PRIMARY
223 """), cb.read())
224
164 def test_abort_sbuild(self):225 def test_abort_sbuild(self):
165 # Aborting sbuild kills processes in the chroot.226 # Aborting sbuild kills processes in the chroot.
166 self.startBuild()227 self.startBuild()
@@ -170,7 +231,7 @@
170 self.assertState(231 self.assertState(
171 BinaryPackageBuildState.SBUILD,232 BinaryPackageBuildState.SBUILD,
172 ['sharepath/slavebin/scan-for-processes', 'scan-for-processes',233 ['sharepath/slavebin/scan-for-processes', 'scan-for-processes',
173 self.buildid], False)234 self.buildid], final=False)
174 self.assertFalse(self.slave.wasCalled('buildFail'))235 self.assertFalse(self.slave.wasCalled('buildFail'))
175236
176 # If reaping completes successfully, the build manager returns237 # If reaping completes successfully, the build manager returns
@@ -189,7 +250,7 @@
189 self.assertState(250 self.assertState(
190 BinaryPackageBuildState.SBUILD,251 BinaryPackageBuildState.SBUILD,
191 ['sharepath/slavebin/scan-for-processes', 'scan-for-processes',252 ['sharepath/slavebin/scan-for-processes', 'scan-for-processes',
192 self.buildid], False)253 self.buildid], final=False)
193 self.assertFalse(self.slave.wasCalled('builderFail'))254 self.assertFalse(self.slave.wasCalled('builderFail'))
194 reap_subprocess = self.buildmanager._subprocess255 reap_subprocess = self.buildmanager._subprocess
195256
@@ -213,7 +274,7 @@
213 self.assertState(274 self.assertState(
214 BinaryPackageBuildState.UMOUNT,275 BinaryPackageBuildState.UMOUNT,
215 ['sharepath/slavebin/umount-chroot', 'umount-chroot',276 ['sharepath/slavebin/umount-chroot', 'umount-chroot',
216 self.buildid], True)277 self.buildid], final=True)
217278
218 def test_abort_between_subprocesses(self):279 def test_abort_between_subprocesses(self):
219 # If a build is aborted between subprocesses, the build manager280 # If a build is aborted between subprocesses, the build manager
@@ -227,13 +288,13 @@
227 self.assertState(288 self.assertState(
228 BinaryPackageBuildState.INIT,289 BinaryPackageBuildState.INIT,
229 ['sharepath/slavebin/scan-for-processes', 'scan-for-processes',290 ['sharepath/slavebin/scan-for-processes', 'scan-for-processes',
230 self.buildid], False)291 self.buildid], final=False)
231292
232 self.buildmanager.iterate(0)293 self.buildmanager.iterate(0)
233 self.assertState(294 self.assertState(
234 BinaryPackageBuildState.CLEANUP,295 BinaryPackageBuildState.CLEANUP,
235 ['sharepath/slavebin/remove-build', 'remove-build', self.buildid],296 ['sharepath/slavebin/remove-build', 'remove-build', self.buildid],
236 True)297 final=True)
237 self.assertFalse(self.slave.wasCalled('builderFail'))298 self.assertFalse(self.slave.wasCalled('builderFail'))
238299
239 def test_missing_changes(self):300 def test_missing_changes(self):
240301
=== modified file 'sbuild-package'
--- sbuild-package 2016-03-03 16:33:19 +0000
+++ sbuild-package 2016-12-02 14:30:11 +0000
@@ -67,7 +67,7 @@
67echo "Initiating build $BUILDID with $NR_PROCESSORS jobs across $ACTUAL_NR_PROCESSORS processor cores."67echo "Initiating build $BUILDID with $NR_PROCESSORS jobs across $ACTUAL_NR_PROCESSORS processor cores."
6868
69if [ $NR_PROCESSORS -gt 1 ]; then69if [ $NR_PROCESSORS -gt 1 ]; then
70 export DEB_BUILD_OPTIONS=parallel=$NR_PROCESSORS70 export DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS:+$DEB_BUILD_OPTIONS }parallel=$NR_PROCESSORS"
71fi71fi
7272
73cd "$HOME/build-$BUILDID"73cd "$HOME/build-$BUILDID"

Subscribers

People subscribed via source and target branches

to all changes: