3 The builder class for GRP (Gentoo Reference Platform) builds.
7 from catalyst_support import *
8 from generic_stage_target import *
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"]
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."
20 self.required_values.extend(["grp"])
21 if type(addlargs["grp"])==types.StringType:
22 addlargs["grp"]=[addlargs["grp"]]
24 if addlargs.has_key("grp/use"):
25 if type(addlargs["grp/use"])==types.StringType:
26 addlargs["grp/use"]=[addlargs["grp/use"]]
28 for x in addlargs["grp"]:
29 self.required_values.append("grp/"+x+"/packages")
30 self.required_values.append("grp/"+x+"/type")
32 generic_stage_target.__init__(self,spec,addlargs)
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..."
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"])
47 touch(self.settings["autoresume_path"]+"setup_target_path")
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"])
54 cmd("/bin/bash "+self.settings["controller_file"]+" run "+self.settings["grp/"+pkgset+"/type"]\
55 +" "+pkgset+" "+mypackages,env=self.env)
59 raise CatalystError,"GRP build aborting due to error."
62 generic_stage_target.set_use(self)
63 if self.settings.has_key("use"):
64 self.settings["use"].append("bindist")
66 self.settings["use"]=["bindist"]
69 self.mounts.append("/tmp/grp")
70 self.mountmap["/tmp/grp"]=self.settings["target_path"]
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')
82 files=os.listdir(destdir)
83 #ignore files starting with '.' using list comprehension
84 files=[filename for filename in files if filename[0] != '.']
86 if os.path.isfile(normpath(destdir+"/"+i)):
87 self.gen_contents_file(normpath(destdir+"/"+i))
88 self.gen_digest_file(normpath(destdir+"/"+i))
90 destdir=normpath(self.settings["target_path"]+"/"+pkgset)
91 print "Digesting files in the srcset....."
93 digests=glob.glob(destdir+'/*.DIGESTS')
98 files=os.listdir(destdir)
99 #ignore files starting with '.' using list comprehension
100 files=[filename for filename in files if filename[0] != '.']
102 if os.path.isfile(normpath(destdir+"/"+i)):
103 #self.gen_contents_file(normpath(destdir+"/"+i))
104 self.gen_digest_file(normpath(destdir+"/"+i))
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"]
113 foo.update({"grp":grp_target})