# Copyright 2002-2008 Gentoo Foundation; Distributed under the GPL v2
# $Id: $
+ 06 Sep 2008; Andrew Gaffney <agaffney@gentoo.org> catalyst,
+ -modules/catalyst/spec.py, +modules/catalyst/util.py,
+ modules/catalyst_support.py:
+ Rename catalyst.spec to catalyst.util Move spec_dump() into spec class
+ Modify catalyst to use new spec class
+
06 Sep 2008; Andrew Gaffney <agaffney@gentoo.org> catalyst,
+modules/catalyst/__init__.py:
Add __init__.py file and import line
sys.path.append("./modules")
-from catalyst.spec import spec
+import catalyst
__maintainer__="Chris Gianelloni <wolf31o2@gentoo.org>"
__version__="2.0.6"
return targetmap
-def do_spec(myspecfile):
- try:
- addlargs=read_spec(myspecfile)
- except:
- sys.exit(1)
-
- return addlargs
-
def do_cli(cmdline):
try:
return arg_parse(cmdline)
addlargs={}
if myspecfile:
- addlargs.update(do_spec(myspecfile))
+ spec = catalyst.util.spec(myspecfile)
+ addlargs.update(spec.get_values())
if mycmdline:
addlargs.update(do_cli(mycmdline))
"item2" "item3" ordering is not, as the item strings are stored in a dictionary (hash).
"""
-def parse_spec(mylines):
- myspec = {}
- cur_array = []
- trailing_comment=re.compile("#.*$")
- white_space=re.compile("\s+")
- while len(mylines):
- myline = mylines.pop(0).strip()
-
- # Force the line to be clean
- # Remove Comments ( anything following # )
- myline = trailing_comment.sub("", myline)
-
- # Skip any blank lines
- if not myline: continue
-
- # Look for colon
- msearch = myline.find(':')
-
- # If semicolon found assume its a new key
- # This may cause problems if : are used for key values but works for now
- if msearch != -1:
- # Split on the first semicolon creating two strings in the array mobjs
- mobjs = myline.split(':', 1)
- mobjs[1] = mobjs[1].strip()
-
- # Check that this key doesn't exist already in the spec
- if myspec.has_key(mobjs[0]):
- raise Exception("You have a duplicate key (" + mobjs[0] + ") in your spec. Please fix it")
-
- # Start a new array using the first element of mobjs
- cur_array = [mobjs[0]]
- if mobjs[1]:
- # split on white space creating additional array elements
- subarray = white_space.split(mobjs[1])
- if subarray:
- if len(subarray)==1:
- # Store as a string if only one element is found.
- # this is to keep with original catalyst behavior
- # eventually this may go away if catalyst just works
- # with arrays.
- cur_array.append(subarray[0])
- else:
- cur_array += subarray
-
- # Else add on to the last key we were working on
- else:
- mobjs = white_space.split(myline)
- cur_array += mobjs
-
- # XXX: Do we really still need this "single value is a string" behavior?
- if len(cur_array) == 2:
- myspec[cur_array[0]] = cur_array[1]
- else:
- myspec[cur_array[0]] = cur_array[1:]
-
- for x in myspec.keys():
- # Delete empty key pairs
- if not myspec[x]:
- print "\n\tWARNING: No value set for key " + x + "...deleting"
- del myspec[x]
- return myspec
-
def parse_makeconf(mylines):
mymakeconf={}
pos=0
mymakeconf[mobj.group(1)]=clean_string
return mymakeconf
-def read_spec(myspecfile):
- try:
- myf=open(myspecfile,"r")
- except:
- raise CatalystError, "Could not open spec file "+myspecfile
- mylines=myf.readlines()
- myf.close()
- return parse_spec(mylines)
-
def read_makeconf(mymakeconffile):
if os.path.exists(mymakeconffile):
try:
if not myspec.has_key(x):
raise CatalystError, "Required argument \""+x+"\" not specified."
-def spec_dump(myspec):
- for x in myspec.keys():
- print x+": "+repr(myspec[x])
-
def touch(myfile):
try:
myf=open(myfile,"w")