6 from catalyst_support import *
7 from generic_stage_target import *
9 class snapshot_target(generic_stage_target):
11 Builder class for snapshots.
13 def __init__(self,myspec,addlargs):
14 self.required_values=["version_stamp","target"]
15 self.valid_values=["version_stamp","target"]
17 generic_target.__init__(self,myspec,addlargs)
19 self.settings["target_subpath"]="portage"
20 st=self.settings["storedir"]
21 self.settings["snapshot_path"]=normpath(st+"/snapshots/portage-"+self.settings["version_stamp"]\
23 self.settings["tmp_path"]=normpath(st+"/tmp/"+self.settings["target_subpath"])
26 x=normpath(self.settings["storedir"]+"/snapshots")
27 if not os.path.exists(x):
30 def mount_safety_check(self):
34 if self.settings.has_key("PURGEONLY"):
38 if self.settings.has_key("PURGE"):
42 print "Creating Portage tree snapshot "+self.settings["version_stamp"]+\
43 " from "+self.settings["portdir"]+"..."
45 mytmp=self.settings["tmp_path"]
46 if not os.path.exists(mytmp):
49 cmd("rsync -a --delete --exclude /packages/ --exclude /distfiles/ --exclude /local/ --exclude CVS/ --exclude .svn --filter=H_**/files/digest-* "+\
50 self.settings["portdir"]+"/ "+mytmp+"/portage/","Snapshot failure",env=self.env)
52 print "Compressing Portage snapshot tarball..."
53 cmd("tar -I lbzip2 -cf "+self.settings["snapshot_path"]+" -C "+mytmp+" portage",\
54 "Snapshot creation failure",env=self.env)
56 self.gen_contents_file(self.settings["snapshot_path"])
57 self.gen_digest_file(self.settings["snapshot_path"])
60 print "snapshot: complete!"
62 def kill_chroot_pids(self):
66 print "Cleaning up..."
69 myemp=self.settings["tmp_path"]
70 if os.path.isdir(myemp):
71 print "Emptying directory",myemp
73 stat the dir, delete the dir, recreate the dir and set
74 the proper perms and ownership
77 """ There's no easy way to change flags recursively in python """
78 if os.uname()[0] == "FreeBSD":
79 os.system("chflags -R noschg "+myemp)
81 os.makedirs(myemp,0755)
82 os.chown(myemp,mystat[ST_UID],mystat[ST_GID])
83 os.chmod(myemp,mystat[ST_MODE])
86 foo.update({"snapshot":snapshot_target})