Gentoo Archives: gentoo-catalyst

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