It helps if I update the ChangeLog properly.
[catalyst.git] / modules / snapshot_target.py
1
2 """
3 Builder class for snapshots.
4 """
5
6 import os
7 from catalyst_support import *
8 from generic_stage_target import *
9
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","portdir_overlay"]
14                 
15                 generic_target.__init__(self,myspec,addlargs)
16                 self.settings=myspec
17                 self.settings["target_subpath"]="portage"
18                 st=self.settings["storedir"]
19                 self.settings["snapshot_path"]=normpath(st+"/snapshots/portage-"+self.settings["version_stamp"]\
20                         +".tar.bz2")
21                 self.settings["tmp_path"]=normpath(st+"/tmp/"+self.settings["target_subpath"])
22                 if self.settings.has_key("portdir_overlay"):
23                         print "\nWarning!!!!"
24                         print "\tThis feature is deprecated no overlay will be added to the snapshot."
25                         print "\tIf you need an overlay feature please use portage_overlay in the other spec files"
26                         print "\tOtherwise add your files to the normal snapshot and redigest .. you should know what"
27                         print "\t\tto do."
28                         print "\tThis was removed due to digesting issues that are incompatible with portage."
29
30         def setup(self):
31                 x=normpath(self.settings["storedir"]+"/snapshots")
32                 if not os.path.exists(x):
33                         os.makedirs(x)
34         
35         def mount_safety_check(self):
36                 pass
37                 
38         def run(self):
39                 self.setup()
40                 print "Creating Portage tree snapshot "+self.settings["version_stamp"]+\
41                         " from "+self.settings["portdir"]+"..."
42                 
43                 mytmp=self.settings["tmp_path"]
44                 if not os.path.exists(mytmp):
45                         os.makedirs(mytmp)
46                 
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)
49                 
50                 print "Compressing Portage snapshot tarball..."
51                 cmd("tar cjf "+self.settings["snapshot_path"]+" -C "+mytmp+" portage",\
52                         "Snapshot creation failure",env=self.env)
53                 
54                 self.gen_contents_file(self.settings["snapshot_path"])
55                 self.gen_digest_file(self.settings["snapshot_path"])
56
57                 self.cleanup()
58                 print "snapshot: complete!"
59         
60         def kill_chroot_pids(self):
61                 pass
62
63         def cleanup(self):
64                 print "Cleaning up..."
65                         
66 def register(foo):
67         foo.update({"snapshot":snapshot_target})
68         return foo