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