3 Builder class for snapshots.
7 from catalyst_support import *
8 from generic_stage_target import *
10 class snapshot_target(generic_stage_target):
11 def __init__(self,myspec,addlargs):
12 self.required_values=["version_stamp","target"]
13 self.valid_values=["version_stamp","target"]
15 generic_target.__init__(self,myspec,addlargs)
17 self.settings["target_subpath"]="portage"
18 st=self.settings["storedir"]
19 self.settings["snapshot_path"]=normpath(st+"/snapshots/portage-"+self.settings["version_stamp"]\
21 self.settings["tmp_path"]=normpath(st+"/tmp/"+self.settings["target_subpath"])
24 x=normpath(self.settings["storedir"]+"/snapshots")
25 if not os.path.exists(x):
28 def mount_safety_check(self):
32 if self.settings.has_key("PURGEONLY"):
36 if self.settings.has_key("PURGE"):
40 print "Creating Portage tree snapshot "+self.settings["version_stamp"]+\
41 " from "+self.settings["portdir"]+"..."
43 mytmp=self.settings["tmp_path"]
44 if not os.path.exists(mytmp):
47 cmd("rsync -a --delete --exclude /packages/ --exclude /distfiles/ --exclude /local/ --exclude CVS/ --exclude .svn --filter=H_**/files/digest-* "+\
48 self.settings["portdir"]+"/ "+mytmp+"/portage/","Snapshot failure",env=self.env)
50 print "Compressing Portage snapshot tarball..."
51 cmd("tar cjf "+self.settings["snapshot_path"]+" -C "+mytmp+" portage",\
52 "Snapshot creation failure",env=self.env)
54 self.gen_contents_file(self.settings["snapshot_path"])
55 self.gen_digest_file(self.settings["snapshot_path"])
58 print "snapshot: complete!"
60 def kill_chroot_pids(self):
64 print "Cleaning up..."
67 myemp=self.settings["tmp_path"]
68 if os.path.isdir(myemp):
69 print "Emptying directory",myemp
71 stat the dir, delete the dir, recreate the dir and set
72 the proper perms and ownership
75 """ There's no easy way to change flags recursively in python """
76 if os.uname()[0] == "FreeBSD":
77 os.system("chflags -R noschg "+myemp)
79 os.makedirs(myemp,0755)
80 os.chown(myemp,mystat[ST_UID],mystat[ST_GID])
81 os.chmod(myemp,mystat[ST_MODE])
84 foo.update({"snapshot":snapshot_target})