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 = { |