Replace content on master with content from catalyst_2
[catalyst.git] / modules / grp_target.py
1
2 """
3 The builder class for GRP (Gentoo Reference Platform) builds.
4 """
5
6 import os,types,glob
7 from catalyst_support import *
8 from generic_stage_target import *
9
10 class grp_target(generic_stage_target):
11         def __init__(self,spec,addlargs):
12                 self.required_values=["version_stamp","target","subarch",\
13                         "rel_type","profile","snapshot","source_subpath"]
14                 
15                 self.valid_values=self.required_values[:]
16                 self.valid_values.extend(["grp/use"])
17                 if not addlargs.has_key("grp"):
18                         raise CatalystError,"Required value \"grp\" not specified in spec."
19                 
20                 self.required_values.extend(["grp"])
21                 if type(addlargs["grp"])==types.StringType:
22                         addlargs["grp"]=[addlargs["grp"]]
23                 
24                 if addlargs.has_key("grp/use"):
25                     if type(addlargs["grp/use"])==types.StringType:
26                             addlargs["grp/use"]=[addlargs["grp/use"]]
27                         
28                 for x in addlargs["grp"]:
29                         self.required_values.append("grp/"+x+"/packages")
30                         self.required_values.append("grp/"+x+"/type")
31                         
32                 generic_stage_target.__init__(self,spec,addlargs)
33
34         def set_target_path(self):
35                 self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+"/")
36                 if self.settings.has_key("AUTORESUME") \
37                         and os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
38                         print "Resume point detected, skipping target path setup operation..."
39                 else:
40                         # first clean up any existing target stuff
41                         #if os.path.isdir(self.settings["target_path"]):
42                                 #cmd("rm -rf "+self.settings["target_path"],
43                                 #"Could not remove existing directory: "+self.settings["target_path"],env=self.env)
44                         if not os.path.exists(self.settings["target_path"]):
45                                 os.makedirs(self.settings["target_path"])
46
47                         touch(self.settings["autoresume_path"]+"setup_target_path")
48
49         def run_local(self):
50                 for pkgset in self.settings["grp"]:
51                         # example call: "grp.sh run pkgset cd1 xmms vim sys-apps/gleep"
52                         mypackages=list_bashify(self.settings["grp/"+pkgset+"/packages"])
53                         try:
54                                 cmd("/bin/bash "+self.settings["controller_file"]+" run "+self.settings["grp/"+pkgset+"/type"]\
55                                         +" "+pkgset+" "+mypackages,env=self.env)
56                         
57                         except CatalystError:
58                                 self.unbind()
59                                 raise CatalystError,"GRP build aborting due to error."
60
61         def set_use(self):
62             generic_stage_target.set_use(self)
63             if self.settings.has_key("use"):
64                 self.settings["use"].append("bindist")
65             else:
66                 self.settings["use"]=["bindist"]
67
68         def set_mounts(self):
69             self.mounts.append("/tmp/grp")
70             self.mountmap["/tmp/grp"]=self.settings["target_path"]
71         
72         def generate_digests(self):
73                 for pkgset in self.settings["grp"]:
74                         if self.settings["grp/"+pkgset+"/type"] == "pkgset":
75                                 destdir=normpath(self.settings["target_path"]+"/"+pkgset+"/All")
76                                 print "Digesting files in the pkgset....."                      
77                                 digests=glob.glob(destdir+'/*.DIGESTS')
78                                 for i in digests:
79                                         if os.path.exists(i):
80                                                 os.remove(i)
81
82                                 files=os.listdir(destdir)
83                                 #ignore files starting with '.' using list comprehension
84                                 files=[filename for filename in files if filename[0] != '.']
85                                 for i in files:
86                                         if os.path.isfile(normpath(destdir+"/"+i)):
87                                                 self.gen_contents_file(normpath(destdir+"/"+i))
88                                                 self.gen_digest_file(normpath(destdir+"/"+i))
89                         else:
90                                 destdir=normpath(self.settings["target_path"]+"/"+pkgset)
91                                 print "Digesting files in the srcset....."                      
92                         
93                                 digests=glob.glob(destdir+'/*.DIGESTS')
94                                 for i in digests:
95                                         if os.path.exists(i):
96                                                 os.remove(i)
97
98                                 files=os.listdir(destdir)
99                                 #ignore files starting with '.' using list comprehension
100                                 files=[filename for filename in files if filename[0] != '.']
101                                 for i in files:
102                                         if os.path.isfile(normpath(destdir+"/"+i)):
103                                                 #self.gen_contents_file(normpath(destdir+"/"+i))
104                                                 self.gen_digest_file(normpath(destdir+"/"+i))
105
106         def set_action_sequence(self):
107             self.settings["action_sequence"]=["unpack","unpack_snapshot",\
108                                             "config_profile_link","setup_confdir","portage_overlay","bind","chroot_setup",\
109                                             "setup_environment","run_local","unbind",\
110                                             "generate_digests","clear_autoresume"]
111
112 def register(foo):
113         foo.update({"grp":grp_target})
114         return foo