Gentoo Archives: gentoo-commits

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