Gentoo Archives: gentoo-commits

From: Brian Dolbec <dolsen@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/catalyst:master commit in: catalyst/, catalyst/targets/
Date: Thu, 26 Feb 2015 04:12:08
Message-Id: 1420091885.d4bc8e3c5ba7bca5656ea597e3ad013a4e61c8b5.dolsen@gentoo
1 commit: d4bc8e3c5ba7bca5656ea597e3ad013a4e61c8b5
2 Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
3 AuthorDate: Sun Jan 20 08:10:03 2013 +0000
4 Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
5 CommitDate: Thu Jan 1 05:58:05 2015 +0000
6 URL: http://sources.gentoo.org/gitweb/?p=proj/catalyst.git;a=commit;h=d4bc8e3c
7
8 Begin splitting up generic_stage_target into smaller code blocks.
9
10 This so snapshot_target does not need to import it since most of it was
11 not used or initialized properly.
12
13 ---
14 catalyst/defaults.py | 2 +-
15 catalyst/targets/clearbase.py | 115 ++++++++++++++
16 catalyst/targets/genbase.py | 58 +++++++
17 catalyst/targets/generic_stage_target.py | 167 +++------------------
18 catalyst/targets/snapshot_target.py | 16 +-
19 .../targets/{generic_target.py => targetbase.py} | 6 +-
20 6 files changed, 208 insertions(+), 156 deletions(-)
21
22 diff --git a/catalyst/defaults.py b/catalyst/defaults.py
23 index b36eff7..f6b2163 100644
24 --- a/catalyst/defaults.py
25 +++ b/catalyst/defaults.py
26 @@ -1,7 +1,7 @@
27
28
29 # these should never be touched
30 -required_build_targets = ["generic_target", "generic_stage_target"]
31 +required_build_targets = ["targetbase", "generic_stage_target"]
32
33 # new build types should be added here
34 valid_build_targets = ["stage1_target", "stage2_target", "stage3_target",
35
36 diff --git a/catalyst/targets/clearbase.py b/catalyst/targets/clearbase.py
37 new file mode 100644
38 index 0000000..8519acc
39 --- /dev/null
40 +++ b/catalyst/targets/clearbase.py
41 @@ -0,0 +1,115 @@
42 +
43 +import os
44 +import shutil
45 +from stat import ST_UID, ST_GID, ST_MODE
46 +
47 +
48 +from catalyst.support import cmd, countdown
49 +
50 +
51 +class ClearBase(object):
52 + """
53 + This class does all of clearing after task completion
54 + """
55 + def __init__(self, myspec):
56 + self.settings = myspec
57 +
58 +
59 +
60 + def clear_autoresume(self):
61 + """ Clean resume points since they are no longer needed """
62 + if "autoresume" in self.settings["options"]:
63 + print "Removing AutoResume Points: ..."
64 + myemp=self.settings["autoresume_path"]
65 + if os.path.isdir(myemp):
66 + if "autoresume" in self.settings["options"]:
67 + print "Emptying directory",myemp
68 + """
69 + stat the dir, delete the dir, recreate the dir and set
70 + the proper perms and ownership
71 + """
72 + mystat=os.stat(myemp)
73 + if os.uname()[0] == "FreeBSD":
74 + cmd("chflags -R noschg "+myemp,\
75 + "Could not remove immutable flag for file "\
76 + +myemp)
77 + #cmd("rm -rf "+myemp, "Could not remove existing file: "+myemp,env-self.env)
78 + shutil.rmtree(myemp)
79 + os.makedirs(myemp,0755)
80 + os.chown(myemp,mystat[ST_UID],mystat[ST_GID])
81 + os.chmod(myemp,mystat[ST_MODE])
82 +
83 +
84 + def clear_chroot(self):
85 + myemp=self.settings["chroot_path"]
86 + if os.path.isdir(myemp):
87 + print "Emptying directory",myemp
88 + """
89 + stat the dir, delete the dir, recreate the dir and set
90 + the proper perms and ownership
91 + """
92 + mystat=os.stat(myemp)
93 + #cmd("rm -rf "+myemp, "Could not remove existing file: "+myemp,env=self.env)
94 + """ There's no easy way to change flags recursively in python """
95 + if os.uname()[0] == "FreeBSD":
96 + os.system("chflags -R noschg "+myemp)
97 + shutil.rmtree(myemp)
98 + os.makedirs(myemp,0755)
99 + os.chown(myemp,mystat[ST_UID],mystat[ST_GID])
100 + os.chmod(myemp,mystat[ST_MODE])
101 +
102 +
103 + def clear_packages(self):
104 + if "pkgcache" in self.settings["options"]:
105 + print "purging the pkgcache ..."
106 +
107 + myemp=self.settings["pkgcache_path"]
108 + if os.path.isdir(myemp):
109 + print "Emptying directory",myemp
110 + """
111 + stat the dir, delete the dir, recreate the dir and set
112 + the proper perms and ownership
113 + """
114 + mystat=os.stat(myemp)
115 + #cmd("rm -rf "+myemp, "Could not remove existing file: "+myemp,env=self.env)
116 + shutil.rmtree(myemp)
117 + os.makedirs(myemp,0755)
118 + os.chown(myemp,mystat[ST_UID],mystat[ST_GID])
119 + os.chmod(myemp,mystat[ST_MODE])
120 +
121 +
122 + def clear_kerncache(self):
123 + if "kerncache" in self.settings["options"]:
124 + print "purging the kerncache ..."
125 +
126 + myemp=self.settings["kerncache_path"]
127 + if os.path.isdir(myemp):
128 + print "Emptying directory",myemp
129 + """
130 + stat the dir, delete the dir, recreate the dir and set
131 + the proper perms and ownership
132 + """
133 + mystat=os.stat(myemp)
134 + #cmd("rm -rf "+myemp, "Could not remove existing file: "+myemp,env=self.env)
135 + shutil.rmtree(myemp)
136 + os.makedirs(myemp,0755)
137 + os.chown(myemp,mystat[ST_UID],mystat[ST_GID])
138 + os.chmod(myemp,mystat[ST_MODE])
139 +
140 +
141 + def purge(self):
142 + countdown(10,"Purging Caches ...")
143 + if any(k in self.settings["options"] for k in ("purge","purgeonly","purgetmponly")):
144 + print "clearing autoresume ..."
145 + self.clear_autoresume()
146 +
147 + print "clearing chroot ..."
148 + self.clear_chroot()
149 +
150 + if "PURGETMPONLY" not in self.settings:
151 + print "clearing package cache ..."
152 + self.clear_packages()
153 +
154 + print "clearing kerncache ..."
155 + self.clear_kerncache()
156 +
157
158 diff --git a/catalyst/targets/genbase.py b/catalyst/targets/genbase.py
159 new file mode 100644
160 index 0000000..e818781
161 --- /dev/null
162 +++ b/catalyst/targets/genbase.py
163 @@ -0,0 +1,58 @@
164 +
165 +
166 +import os
167 +
168 +
169 +class GenBase(object):
170 + """
171 + This class does generation of the contents and digests files.
172 + """
173 + def __init__(self,myspec):
174 + self.settings = myspec
175 +
176 +
177 + def gen_contents_file(self,file):
178 + if os.path.exists(file+".CONTENTS"):
179 + os.remove(file+".CONTENTS")
180 + if "contents" in self.settings:
181 + contents_map = self.settings["contents_map"]
182 + if os.path.exists(file):
183 + myf=open(file+".CONTENTS","w")
184 + keys={}
185 + for i in self.settings["contents"].split():
186 + keys[i]=1
187 + array=keys.keys()
188 + array.sort()
189 + for j in array:
190 + contents = contents_map.generate_contents(file, j,
191 + verbose="VERBOSE" in self.settings)
192 + if contents:
193 + myf.write(contents)
194 + myf.close()
195 +
196 + def gen_digest_file(self,file):
197 + if os.path.exists(file+".DIGESTS"):
198 + os.remove(file+".DIGESTS")
199 + if "digests" in self.settings:
200 + hash_map = self.settings["hash_map"]
201 + if os.path.exists(file):
202 + myf=open(file+".DIGESTS","w")
203 + keys={}
204 + for i in self.settings["digests"].split():
205 + keys[i]=1
206 + array=keys.keys()
207 + array.sort()
208 + for f in [file, file+'.CONTENTS']:
209 + if os.path.exists(f):
210 + if "all" in array:
211 + for k in list(hash_map.hash_map):
212 + hash = hash_map.generate_hash(f,hash_=k,
213 + verbose = "VERBOSE" in self.settings)
214 + myf.write(hash)
215 + else:
216 + for j in array:
217 + hash = hash_map.generate_hash(f,hash_=j,
218 + verbose = "VERBOSE" in self.settings)
219 + myf.write(hash)
220 + myf.close()
221 +
222
223 diff --git a/catalyst/targets/generic_stage_target.py b/catalyst/targets/generic_stage_target.py
224 index 0b506e2..c6b8dcc 100644
225 --- a/catalyst/targets/generic_stage_target.py
226 +++ b/catalyst/targets/generic_stage_target.py
227 @@ -1,17 +1,26 @@
228 -import os,string,imp,types,shutil
229 -from catalyst.support import *
230 -from generic_target import *
231 -from stat import *
232 -from catalyst.lock import LockDir
233
234 -from catalyst.defaults import (SOURCE_MOUNT_DEFAULTS, TARGET_MOUNT_DEFAULTS,
235 - PORT_LOGDIR_CLEAN)
236 +import os
237 +import string
238 +import imp
239 +import types
240 +import shutil
241 +import sys
242 +from stat import ST_UID, ST_GID, ST_MODE
243
244 # for convienience
245 pjoin = os.path.join
246
247 +from catalyst.defaults import (SOURCE_MOUNT_DEFAULTS, TARGET_MOUNT_DEFAULTS,
248 + PORT_LOGDIR_CLEAN)
249 +from catalyst.support import (CatalystError, msg, file_locate, normpath,
250 + touch, cmd, warn, list_bashify, read_makeconf, read_from_clst, ismount)
251 +from catalyst.targets.targetbase import TargetBase
252 +from catalyst.targets.clearbase import ClearBase
253 +from catalyst.targets.genbase import GenBase
254 +from catalyst.lock import LockDir
255 +
256
257 -class generic_stage_target(generic_target):
258 +class generic_stage_target(TargetBase, ClearBase, GenBase):
259 """
260 This class does all of the chroot setup, copying of files, etc. It is
261 the driver class for pretty much everything that Catalyst does.
262 @@ -26,7 +35,9 @@ class generic_stage_target(generic_target):
263 "distcc_hosts","makeopts","pkgcache_path","kerncache_path"])
264
265 self.set_valid_build_kernel_vars(addlargs)
266 - generic_target.__init__(self,myspec,addlargs)
267 + TargetBase.__init__(self, myspec, addlargs)
268 + GenBase.__init__(self, myspec)
269 + ClearBase.__init__(self, myspec)
270
271 """
272 The semantics of subarchmap and machinemap changed a bit in 2.0.3 to
273 @@ -1616,142 +1627,4 @@ class generic_stage_target(generic_target):
274 self.unbind()
275 raise CatalystError,"build aborting due to livecd_update error."
276
277 - def clear_chroot(self):
278 - myemp=self.settings["chroot_path"]
279 - if os.path.isdir(myemp):
280 - print "Emptying directory",myemp
281 - """
282 - stat the dir, delete the dir, recreate the dir and set
283 - the proper perms and ownership
284 - """
285 - mystat=os.stat(myemp)
286 - #cmd("rm -rf "+myemp, "Could not remove existing file: "+myemp,env=self.env)
287 - """ There's no easy way to change flags recursively in python """
288 - if os.uname()[0] == "FreeBSD":
289 - os.system("chflags -R noschg "+myemp)
290 - shutil.rmtree(myemp)
291 - os.makedirs(myemp,0755)
292 - os.chown(myemp,mystat[ST_UID],mystat[ST_GID])
293 - os.chmod(myemp,mystat[ST_MODE])
294 -
295 - def clear_packages(self):
296 - if "pkgcache" in self.settings["options"]:
297 - print "purging the pkgcache ..."
298 -
299 - myemp=self.settings["pkgcache_path"]
300 - if os.path.isdir(myemp):
301 - print "Emptying directory",myemp
302 - """
303 - stat the dir, delete the dir, recreate the dir and set
304 - the proper perms and ownership
305 - """
306 - mystat=os.stat(myemp)
307 - #cmd("rm -rf "+myemp, "Could not remove existing file: "+myemp,env=self.env)
308 - shutil.rmtree(myemp)
309 - os.makedirs(myemp,0755)
310 - os.chown(myemp,mystat[ST_UID],mystat[ST_GID])
311 - os.chmod(myemp,mystat[ST_MODE])
312 -
313 - def clear_kerncache(self):
314 - if "kerncache" in self.settings["options"]:
315 - print "purging the kerncache ..."
316 -
317 - myemp=self.settings["kerncache_path"]
318 - if os.path.isdir(myemp):
319 - print "Emptying directory",myemp
320 - """
321 - stat the dir, delete the dir, recreate the dir and set
322 - the proper perms and ownership
323 - """
324 - mystat=os.stat(myemp)
325 - #cmd("rm -rf "+myemp, "Could not remove existing file: "+myemp,env=self.env)
326 - shutil.rmtree(myemp)
327 - os.makedirs(myemp,0755)
328 - os.chown(myemp,mystat[ST_UID],mystat[ST_GID])
329 - os.chmod(myemp,mystat[ST_MODE])
330 -
331 - def clear_autoresume(self):
332 - """ Clean resume points since they are no longer needed """
333 - if "autoresume" in self.settings["options"]:
334 - print "Removing AutoResume Points: ..."
335 - myemp=self.settings["autoresume_path"]
336 - if os.path.isdir(myemp):
337 - if "autoresume" in self.settings["options"]:
338 - print "Emptying directory",myemp
339 - """
340 - stat the dir, delete the dir, recreate the dir and set
341 - the proper perms and ownership
342 - """
343 - mystat=os.stat(myemp)
344 - if os.uname()[0] == "FreeBSD":
345 - cmd("chflags -R noschg "+myemp,\
346 - "Could not remove immutable flag for file "\
347 - +myemp)
348 - #cmd("rm -rf "+myemp, "Could not remove existing file: "+myemp,env-self.env)
349 - shutil.rmtree(myemp)
350 - os.makedirs(myemp,0755)
351 - os.chown(myemp,mystat[ST_UID],mystat[ST_GID])
352 - os.chmod(myemp,mystat[ST_MODE])
353 -
354 - def gen_contents_file(self,file):
355 - if os.path.exists(file+".CONTENTS"):
356 - os.remove(file+".CONTENTS")
357 - if "contents" in self.settings:
358 - contents_map = self.settings["contents_map"]
359 - if os.path.exists(file):
360 - myf=open(file+".CONTENTS","w")
361 - keys={}
362 - for i in self.settings["contents"].split():
363 - keys[i]=1
364 - array=keys.keys()
365 - array.sort()
366 - for j in array:
367 - contents = contents_map.generate_contents(file, j,
368 - verbose="VERBOSE" in self.settings)
369 - if contents:
370 - myf.write(contents)
371 - myf.close()
372 -
373 - def gen_digest_file(self,file):
374 - if os.path.exists(file+".DIGESTS"):
375 - os.remove(file+".DIGESTS")
376 - if "digests" in self.settings:
377 - hash_map = self.settings["hash_map"]
378 - if os.path.exists(file):
379 - myf=open(file+".DIGESTS","w")
380 - keys={}
381 - for i in self.settings["digests"].split():
382 - keys[i]=1
383 - array=keys.keys()
384 - array.sort()
385 - for f in [file, file+'.CONTENTS']:
386 - if os.path.exists(f):
387 - if "all" in array:
388 - for k in list(hash_map.hash_map):
389 - hash = hash_map.generate_hash(f, hash_ = k,
390 - verbose = "VERBOSE" in self.settings)
391 - myf.write(hash)
392 - else:
393 - for j in array:
394 - hash = hash_map.generate_hash(f, hash_ = j,
395 - verbose = "VERBOSE" in self.settings)
396 - myf.write(hash)
397 - myf.close()
398 -
399 - def purge(self):
400 - countdown(10,"Purging Caches ...")
401 - if any(k in self.settings["options"] for k in ("purge","purgeonly","purgetmponly")):
402 - print "clearing autoresume ..."
403 - self.clear_autoresume()
404 -
405 - print "clearing chroot ..."
406 - self.clear_chroot()
407 -
408 - if "PURGETMPONLY" not in self.settings:
409 - print "clearing package cache ..."
410 - self.clear_packages()
411 -
412 - print "clearing kerncache ..."
413 - self.clear_kerncache()
414 -
415 # vim: ts=4 sw=4 sta et sts=4 ai
416
417 diff --git a/catalyst/targets/snapshot_target.py b/catalyst/targets/snapshot_target.py
418 index 50133ec..3289bbd 100644
419 --- a/catalyst/targets/snapshot_target.py
420 +++ b/catalyst/targets/snapshot_target.py
421 @@ -3,10 +3,15 @@ Snapshot target
422 """
423
424 import os
425 -from catalyst.support import *
426 -from generic_stage_target import *
427 +import shutil
428 +from stat import ST_UID, ST_GID, ST_MODE
429
430 -class snapshot_target(generic_stage_target):
431 +
432 +from catalyst.support import normpath, cmd
433 +from catalyst.targets.targetbase import TargetBase
434 +from catalyst.targets.genbase import GenBase
435 +
436 +class snapshot_target(TargetBase, GenBase):
437 """
438 Builder class for snapshots.
439 """
440 @@ -14,8 +19,9 @@ class snapshot_target(generic_stage_target):
441 self.required_values=["version_stamp","target"]
442 self.valid_values=["version_stamp","target"]
443
444 - generic_target.__init__(self,myspec,addlargs)
445 - self.settings=myspec
446 + TargetBase.__init__(self, myspec, addlargs)
447 + GenBase.__init__(self,myspec)
448 + #self.settings=myspec
449 self.settings["target_subpath"]="portage"
450 st=self.settings["storedir"]
451 self.settings["snapshot_path"] = normpath(st + "/snapshots/"
452
453 diff --git a/catalyst/targets/generic_target.py b/catalyst/targets/targetbase.py
454 similarity index 64%
455 rename from catalyst/targets/generic_target.py
456 rename to catalyst/targets/targetbase.py
457 index 382f1c7..e0c03df 100644
458 --- a/catalyst/targets/generic_target.py
459 +++ b/catalyst/targets/targetbase.py
460 @@ -2,11 +2,11 @@ import os
461
462 from catalyst.support import *
463
464 -class generic_target:
465 +class TargetBase(object):
466 """
467 - The toplevel class for generic_stage_target. This is about as generic as we get.
468 + The toplevel class for all targets. This is about as generic as we get.
469 """
470 - def __init__(self,myspec,addlargs):
471 + def __init__(self, myspec, addlargs):
472 addl_arg_parse(myspec,addlargs,self.required_values,self.valid_values)
473 self.settings=myspec
474 self.env = {