1 |
commit: 50ba8aadf5f7096e9079eafec9182d526956cd49 |
2 |
Author: Matt Turner <mattst88 <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sun Jan 24 02:43:47 2021 +0000 |
4 |
Commit: Matt Turner <mattst88 <AT> gentoo <DOT> org> |
5 |
CommitDate: Thu Jan 28 02:06:46 2021 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/catalyst.git/commit/?id=50ba8aad |
7 |
|
8 |
catalyst: Clean up exception handling |
9 |
|
10 |
Use 'raise from' where sensible, but a lot of the CatalystErrors are |
11 |
just trading one CatalystError for another, so remove them. |
12 |
|
13 |
Signed-off-by: Matt Turner <mattst88 <AT> gentoo.org> |
14 |
|
15 |
catalyst/base/stagebase.py | 110 ++++++++++++++------------------------ |
16 |
catalyst/main.py | 4 +- |
17 |
catalyst/support.py | 4 +- |
18 |
catalyst/targets/livecd_stage2.py | 4 +- |
19 |
catalyst/targets/netboot.py | 33 ++++-------- |
20 |
catalyst/targets/snapshot.py | 2 +- |
21 |
6 files changed, 57 insertions(+), 100 deletions(-) |
22 |
|
23 |
diff --git a/catalyst/base/stagebase.py b/catalyst/base/stagebase.py |
24 |
index 28ff8fd2..46cb1fda 100644 |
25 |
--- a/catalyst/base/stagebase.py |
26 |
+++ b/catalyst/base/stagebase.py |
27 |
@@ -906,7 +906,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
28 |
fstype=fstype, options=options) |
29 |
cxt.mount() |
30 |
except Exception as e: |
31 |
- raise CatalystError(f"Couldn't mount: {source}, {e}") |
32 |
+ raise CatalystError(f"Couldn't mount: {source}, {e}") from e |
33 |
|
34 |
def chroot_setup(self): |
35 |
self.makeconf = read_makeconf(normpath(self.settings["chroot_path"] + |
36 |
@@ -978,7 +978,7 @@ class StageBase(TargetBase, ClearBase, GenBase): |
37 |
except OSError as e: |
38 |
raise CatalystError('Could not write %s: %s' % ( |
39 |
normpath(self.settings["chroot_path"] + |
40 |
- self.settings["make_conf"]), e)) |
41 |
+ self.settings["make_conf"]), e)) from e |
42 |
self.resume.enable("chroot_setup") |
43 |
|
44 |
def write_make_conf(self, setup=True): |
45 |
@@ -1206,13 +1206,11 @@ class StageBase(TargetBase, ClearBase, GenBase): |
46 |
# operations, so we get easy glob handling. |
47 |
log.notice('%s: removing %s', self.settings["spec_prefix"], x) |
48 |
clear_path(self.settings["stage_path"] + x) |
49 |
- try: |
50 |
- if os.path.exists(self.settings["controller_file"]): |
51 |
- cmd([self.settings['controller_file'], 'clean'], |
52 |
- env=self.env) |
53 |
- self.resume.enable("remove") |
54 |
- except: |
55 |
- raise |
56 |
+ |
57 |
+ if os.path.exists(self.settings["controller_file"]): |
58 |
+ cmd([self.settings['controller_file'], 'clean'], |
59 |
+ env=self.env) |
60 |
+ self.resume.enable("remove") |
61 |
|
62 |
def preclean(self): |
63 |
if "autoresume" in self.settings["options"] \ |
64 |
@@ -1278,19 +1276,14 @@ class StageBase(TargetBase, ClearBase, GenBase): |
65 |
log.notice('Resume point detected, skipping run_local operation...') |
66 |
return |
67 |
|
68 |
- try: |
69 |
- if os.path.exists(self.settings["controller_file"]): |
70 |
- log.info('run_local() starting controller script...') |
71 |
- cmd([self.settings['controller_file'], 'run'], |
72 |
- env=self.env) |
73 |
- self.resume.enable("run_local") |
74 |
- else: |
75 |
- log.info('run_local() no controller_file found... %s', |
76 |
- self.settings['controller_file']) |
77 |
- |
78 |
- except CatalystError: |
79 |
- raise CatalystError("Stage build aborting due to error.", |
80 |
- print_traceback=False) |
81 |
+ if os.path.exists(self.settings["controller_file"]): |
82 |
+ log.info('run_local() starting controller script...') |
83 |
+ cmd([self.settings['controller_file'], 'run'], |
84 |
+ env=self.env) |
85 |
+ self.resume.enable("run_local") |
86 |
+ else: |
87 |
+ log.info('run_local() no controller_file found... %s', |
88 |
+ self.settings['controller_file']) |
89 |
|
90 |
def setup_environment(self): |
91 |
log.debug('setup_environment(); settings = %r', self.settings) |
92 |
@@ -1382,13 +1375,10 @@ class StageBase(TargetBase, ClearBase, GenBase): |
93 |
[self.settings[self.settings["spec_prefix"] + "/unmerge"]] |
94 |
|
95 |
# Before cleaning, unmerge stuff |
96 |
- try: |
97 |
- cmd([self.settings['controller_file'], 'unmerge'] + |
98 |
- self.settings[self.settings['spec_prefix'] + '/unmerge'], |
99 |
- env=self.env) |
100 |
- log.info('unmerge shell script') |
101 |
- except CatalystError: |
102 |
- raise |
103 |
+ cmd([self.settings['controller_file'], 'unmerge'] + |
104 |
+ self.settings[self.settings['spec_prefix'] + '/unmerge'], |
105 |
+ env=self.env) |
106 |
+ log.info('unmerge shell script') |
107 |
self.resume.enable("unmerge") |
108 |
|
109 |
def target_setup(self): |
110 |
@@ -1457,14 +1447,9 @@ class StageBase(TargetBase, ClearBase, GenBase): |
111 |
command.append(self.settings[target_pkgs]) |
112 |
else: |
113 |
command.extend(self.settings[target_pkgs]) |
114 |
- try: |
115 |
- cmd(command, env=self.env) |
116 |
- fileutils.touch(build_packages_resume) |
117 |
- self.resume.enable("build_packages") |
118 |
- except CatalystError: |
119 |
- raise CatalystError( |
120 |
- self.settings["spec_prefix"] + |
121 |
- "build aborting due to error.") |
122 |
+ cmd(command, env=self.env) |
123 |
+ fileutils.touch(build_packages_resume) |
124 |
+ self.resume.enable("build_packages") |
125 |
|
126 |
def build_kernel(self): |
127 |
'''Build all configured kernels''' |
128 |
@@ -1475,19 +1460,14 @@ class StageBase(TargetBase, ClearBase, GenBase): |
129 |
return |
130 |
|
131 |
if "boot/kernel" in self.settings: |
132 |
- try: |
133 |
- mynames = self.settings["boot/kernel"] |
134 |
- if isinstance(mynames, str): |
135 |
- mynames = [mynames] |
136 |
- # Execute the script that sets up the kernel build environment |
137 |
- cmd([self.settings['controller_file'], 'pre-kmerge'], env=self.env) |
138 |
- for kname in [sanitize_name(name) for name in mynames]: |
139 |
- self._build_kernel(kname=kname) |
140 |
- self.resume.enable("build_kernel") |
141 |
- except CatalystError: |
142 |
- raise CatalystError( |
143 |
- "build aborting due to kernel build error.", |
144 |
- print_traceback=True) |
145 |
+ mynames = self.settings["boot/kernel"] |
146 |
+ if isinstance(mynames, str): |
147 |
+ mynames = [mynames] |
148 |
+ # Execute the script that sets up the kernel build environment |
149 |
+ cmd([self.settings['controller_file'], 'pre-kmerge'], env=self.env) |
150 |
+ for kname in [sanitize_name(name) for name in mynames]: |
151 |
+ self._build_kernel(kname=kname) |
152 |
+ self.resume.enable("build_kernel") |
153 |
|
154 |
def _build_kernel(self, kname): |
155 |
"Build a single configured kernel by name" |
156 |
@@ -1531,12 +1511,8 @@ class StageBase(TargetBase, ClearBase, GenBase): |
157 |
raise CatalystError("Can't find kernel config: %s" % |
158 |
self.settings[key]) |
159 |
|
160 |
- try: |
161 |
- shutil.copy(self.settings[key], |
162 |
- self.settings['chroot_path'] + '/var/tmp/' + kname + '.config') |
163 |
- |
164 |
- except IOError: |
165 |
- raise |
166 |
+ shutil.copy(self.settings[key], |
167 |
+ self.settings['chroot_path'] + '/var/tmp/' + kname + '.config') |
168 |
|
169 |
def _copy_initramfs_overlay(self, kname): |
170 |
key = 'boot/kernel/' + kname + '/initramfs_overlay' |
171 |
@@ -1560,13 +1536,10 @@ class StageBase(TargetBase, ClearBase, GenBase): |
172 |
'Resume point detected, skipping bootloader operation...') |
173 |
return |
174 |
|
175 |
- try: |
176 |
- cmd([self.settings['controller_file'], 'bootloader', |
177 |
- self.settings['target_path'].rstrip('/')], |
178 |
- env=self.env) |
179 |
- self.resume.enable("bootloader") |
180 |
- except CatalystError: |
181 |
- raise CatalystError("Script aborting due to error.") |
182 |
+ cmd([self.settings['controller_file'], 'bootloader', |
183 |
+ self.settings['target_path'].rstrip('/')], |
184 |
+ env=self.env) |
185 |
+ self.resume.enable("bootloader") |
186 |
|
187 |
def livecd_update(self): |
188 |
if "autoresume" in self.settings["options"] \ |
189 |
@@ -1575,14 +1548,9 @@ class StageBase(TargetBase, ClearBase, GenBase): |
190 |
'Resume point detected, skipping build_packages operation...') |
191 |
return |
192 |
|
193 |
- try: |
194 |
- cmd([self.settings['controller_file'], 'livecd-update'], |
195 |
- env=self.env) |
196 |
- self.resume.enable("livecd_update") |
197 |
- |
198 |
- except CatalystError: |
199 |
- raise CatalystError( |
200 |
- "build aborting due to livecd_update error.") |
201 |
+ cmd([self.settings['controller_file'], 'livecd-update'], |
202 |
+ env=self.env) |
203 |
+ self.resume.enable("livecd_update") |
204 |
|
205 |
@staticmethod |
206 |
def _debug_pause_(): |
207 |
|
208 |
diff --git a/catalyst/main.py b/catalyst/main.py |
209 |
index b0d9015f..0de1040f 100644 |
210 |
--- a/catalyst/main.py |
211 |
+++ b/catalyst/main.py |
212 |
@@ -77,10 +77,10 @@ def build_target(addlargs): |
213 |
target = addlargs["target"].replace('-', '_') |
214 |
module = import_module(target) |
215 |
target = getattr(module, target)(conf_values, addlargs) |
216 |
- except AttributeError: |
217 |
+ except AttributeError as e: |
218 |
raise CatalystError( |
219 |
"Target \"%s\" not available." % target, |
220 |
- print_traceback=True) |
221 |
+ print_traceback=True) from e |
222 |
except CatalystError: |
223 |
return False |
224 |
return target.run() |
225 |
|
226 |
diff --git a/catalyst/support.py b/catalyst/support.py |
227 |
index fa652987..fc50fa34 100644 |
228 |
--- a/catalyst/support.py |
229 |
+++ b/catalyst/support.py |
230 |
@@ -140,9 +140,9 @@ def read_makeconf(mymakeconffile): |
231 |
if os.path.exists(mymakeconffile): |
232 |
try: |
233 |
return read_bash_dict(mymakeconffile, sourcing_command="source") |
234 |
- except Exception: |
235 |
+ except Exception as e: |
236 |
raise CatalystError("Could not parse make.conf file " + |
237 |
- mymakeconffile, print_traceback=True) |
238 |
+ mymakeconffile, print_traceback=True) from e |
239 |
else: |
240 |
makeconf = {} |
241 |
return makeconf |
242 |
|
243 |
diff --git a/catalyst/targets/livecd_stage2.py b/catalyst/targets/livecd_stage2.py |
244 |
index e90e9f53..ff4ea62a 100644 |
245 |
--- a/catalyst/targets/livecd_stage2.py |
246 |
+++ b/catalyst/targets/livecd_stage2.py |
247 |
@@ -79,11 +79,11 @@ class livecd_stage2(StageBase): |
248 |
"livecd/modblacklist"].split() |
249 |
for x in self.settings["livecd/modblacklist"]: |
250 |
myf.write("\nblacklist "+x) |
251 |
- except: |
252 |
+ except Exception as e: |
253 |
raise CatalystError("Couldn't open " + |
254 |
self.settings["chroot_path"] + |
255 |
"/etc/modprobe.d/blacklist.conf.", |
256 |
- print_traceback=True) |
257 |
+ print_traceback=True) from e |
258 |
|
259 |
def set_action_sequence(self): |
260 |
self.build_sequence.extend([ |
261 |
|
262 |
diff --git a/catalyst/targets/netboot.py b/catalyst/targets/netboot.py |
263 |
index a2a9fcb3..38d0cb45 100644 |
264 |
--- a/catalyst/targets/netboot.py |
265 |
+++ b/catalyst/targets/netboot.py |
266 |
@@ -30,17 +30,14 @@ class netboot(StageBase): |
267 |
]) |
268 |
|
269 |
def __init__(self, spec, addlargs): |
270 |
- try: |
271 |
- if "netboot/packages" in addlargs: |
272 |
- if isinstance(addlargs['netboot/packages'], str): |
273 |
- loopy = [addlargs["netboot/packages"]] |
274 |
- else: |
275 |
- loopy = addlargs["netboot/packages"] |
276 |
+ if "netboot/packages" in addlargs: |
277 |
+ if isinstance(addlargs['netboot/packages'], str): |
278 |
+ loopy = [addlargs["netboot/packages"]] |
279 |
+ else: |
280 |
+ loopy = addlargs["netboot/packages"] |
281 |
|
282 |
- for x in loopy: |
283 |
- self.valid_values |= {"netboot/packages/"+x+"/files"} |
284 |
- except: |
285 |
- raise CatalystError("configuration error in netboot/packages.") |
286 |
+ for x in loopy: |
287 |
+ self.valid_values |= {"netboot/packages/"+x+"/files"} |
288 |
|
289 |
StageBase.__init__(self, spec, addlargs) |
290 |
self.settings["merge_path"] = normpath("/tmp/image/") |
291 |
@@ -89,12 +86,8 @@ class netboot(StageBase): |
292 |
else: |
293 |
myfiles.append(self.settings["netboot/extra_files"]) |
294 |
|
295 |
- try: |
296 |
- cmd([self.settings['controller_file'], 'image'] + |
297 |
- myfiles, env=self.env) |
298 |
- except CatalystError: |
299 |
- raise CatalystError("Failed to copy files to image!", |
300 |
- print_traceback=True) |
301 |
+ cmd([self.settings['controller_file'], 'image'] + |
302 |
+ myfiles, env=self.env) |
303 |
|
304 |
self.resume.enable("copy_files_to_image") |
305 |
|
306 |
@@ -116,12 +109,8 @@ class netboot(StageBase): |
307 |
# we're done, move the kernels to builds/* |
308 |
# no auto resume here as we always want the |
309 |
# freshest images moved |
310 |
- try: |
311 |
- cmd([self.settings['controller_file'], 'final'], env=self.env) |
312 |
- log.notice('Netboot Build Finished!') |
313 |
- except CatalystError: |
314 |
- raise CatalystError("Failed to move kernel images!", |
315 |
- print_traceback=True) |
316 |
+ cmd([self.settings['controller_file'], 'final'], env=self.env) |
317 |
+ log.notice('Netboot Build Finished!') |
318 |
|
319 |
def remove(self): |
320 |
if "autoresume" in self.settings["options"] \ |
321 |
|
322 |
diff --git a/catalyst/targets/snapshot.py b/catalyst/targets/snapshot.py |
323 |
index 7732312c..6b727600 100644 |
324 |
--- a/catalyst/targets/snapshot.py |
325 |
+++ b/catalyst/targets/snapshot.py |
326 |
@@ -73,7 +73,7 @@ class snapshot(TargetBase): |
327 |
except subprocess.CalledProcessError as e: |
328 |
raise CatalystError(f'{e.cmd} failed with return code' |
329 |
f'{e.returncode}\n' |
330 |
- f'{e.output}\n') |
331 |
+ f'{e.output}\n') from e |
332 |
|
333 |
def run(self): |
334 |
if self.settings['snapshot_treeish'] == 'stable': |