2 Gentoo Reference Platform (GRP) target
4 # NOTE: That^^ docstring has influence catalyst-spec(5) man page generation.
7 from catalyst_support import *
8 from generic_stage_target import *
10 class grp_target(generic_stage_target):
12 The builder class for GRP (Gentoo Reference Platform) builds.
14 def __init__(self,spec,addlargs):
15 self.required_values=["version_stamp","target","subarch",\
16 "rel_type","profile","snapshot","source_subpath"]
18 self.valid_values=self.required_values[:]
19 self.valid_values.extend(["grp/use"])
20 if not addlargs.has_key("grp"):
21 raise CatalystError,"Required value \"grp\" not specified in spec."
23 self.required_values.extend(["grp"])
24 if type(addlargs["grp"])==types.StringType:
25 addlargs["grp"]=[addlargs["grp"]]
27 if addlargs.has_key("grp/use"):
28 if type(addlargs["grp/use"])==types.StringType:
29 addlargs["grp/use"]=[addlargs["grp/use"]]
31 for x in addlargs["grp"]:
32 self.required_values.append("grp/"+x+"/packages")
33 self.required_values.append("grp/"+x+"/type")
35 generic_stage_target.__init__(self,spec,addlargs)
37 def set_target_path(self):
38 self.settings["target_path"]=normpath(self.settings["storedir"]+"/builds/"+self.settings["target_subpath"]+"/")
39 if self.settings.has_key("AUTORESUME") \
40 and os.path.exists(self.settings["autoresume_path"]+"setup_target_path"):
41 print "Resume point detected, skipping target path setup operation..."
43 # first clean up any existing target stuff
44 #if os.path.isdir(self.settings["target_path"]):
45 #cmd("rm -rf "+self.settings["target_path"],
46 #"Could not remove existing directory: "+self.settings["target_path"],env=self.env)
47 if not os.path.exists(self.settings["target_path"]):
48 os.makedirs(self.settings["target_path"])
50 touch(self.settings["autoresume_path"]+"setup_target_path")
53 for pkgset in self.settings["grp"]:
54 # example call: "grp.sh run pkgset cd1 xmms vim sys-apps/gleep"
55 mypackages=list_bashify(self.settings["grp/"+pkgset+"/packages"])
57 cmd("/bin/bash "+self.settings["controller_file"]+" run "+self.settings["grp/"+pkgset+"/type"]\
58 +" "+pkgset+" "+mypackages,env=self.env)
62 raise CatalystError,"GRP build aborting due to error."
65 generic_stage_target.set_use(self)
66 if self.settings.has_key("use"):
67 self.settings["use"].append("bindist")
69 self.settings["use"]=["bindist"]
72 self.mounts.append("/tmp/grp")
73 self.mountmap["/tmp/grp"]=self.settings["target_path"]
75 def generate_digests(self):
76 for pkgset in self.settings["grp"]:
77 if self.settings["grp/"+pkgset+"/type"] == "pkgset":
78 destdir=normpath(self.settings["target_path"]+"/"+pkgset+"/All")
79 print "Digesting files in the pkgset....."
80 digests=glob.glob(destdir+'/*.DIGESTS')
85 files=os.listdir(destdir)
86 #ignore files starting with '.' using list comprehension
87 files=[filename for filename in files if filename[0] != '.']
89 if os.path.isfile(normpath(destdir+"/"+i)):
90 self.gen_contents_file(normpath(destdir+"/"+i))
91 self.gen_digest_file(normpath(destdir+"/"+i))
93 destdir=normpath(self.settings["target_path"]+"/"+pkgset)
94 print "Digesting files in the srcset....."
96 digests=glob.glob(destdir+'/*.DIGESTS')
101 files=os.listdir(destdir)
102 #ignore files starting with '.' using list comprehension
103 files=[filename for filename in files if filename[0] != '.']
105 if os.path.isfile(normpath(destdir+"/"+i)):
106 #self.gen_contents_file(normpath(destdir+"/"+i))
107 self.gen_digest_file(normpath(destdir+"/"+i))
109 def set_action_sequence(self):
110 self.settings["action_sequence"]=["unpack","unpack_snapshot",\
111 "config_profile_link","setup_confdir","portage_overlay","bind","chroot_setup",\
112 "setup_environment","run_local","unbind",\
113 "generate_digests","clear_autoresume"]
116 foo.update({"grp":grp_target})