<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>etc/fslayouts/hollow.conf</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -8,7 +8,7 @@ build: funtoo
 
 [section portage]
 
-stable: 
+stable:
 name: portage
 MAKEOPTS: -j2
 USE:</diff>
      <filename>etc/builds/funtoo.conf</filename>
    </modified>
    <modified>
      <diff>@@ -8,7 +8,7 @@ build: gentoo
 
 [section portage]
 
-stable: 
+stable:
 name: portage-$[target/version]
 MAKEOPTS: -j6
 USE:
@@ -20,7 +20,7 @@ profile: default/linux/$[target/arch]/2008.0
 [section emerge]
 
 options:
-packages: 
+packages:
 
 [section snapshot]
 </diff>
      <filename>etc/builds/gentoo.conf</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 # This file defines the mirror filesystem layout used by funtoo.org, and the
-# default mirror filesystem layout for Metro. 
+# default mirror filesystem layout for Metro.
 #
 # In Metro lingo, a &quot;mirror&quot; is a location on disk that holds all the stuff
 # that Metro needs as well as all the stuff it creates. So this means that this
@@ -22,8 +22,8 @@ link/dest: $[portage/name]-$[target/version].tar.bz2
 
 [when target/type is stage]
 
-source: $[]/$[source/build]/$[source/subarch]/$[source/build]-$[source/subarch]-$[source/version]/$[source/name].tar.bz2 
-target: $[]/$[target/build]/$[target/subarch]/$[target/build]-$[target/subarch]-$[target/version]/$[target/name].tar.bz2 
+source: $[]/$[source/build]/$[source/subarch]/$[source/build]-$[source/subarch]-$[source/version]/$[source/name].tar.bz2
+target: $[]/$[target/build]/$[target/subarch]/$[target/build]-$[target/subarch]-$[target/version]/$[target/name].tar.bz2
 
 # &quot;current&quot; symlink:
 link: $[]/$[target/build]/$[target/subarch]/$[target/name/current].tar.bz2
@@ -33,11 +33,11 @@ link/dest: $[target/build]-$[target/subarch]-$[target/version]/$[target/name].ta
 
 control: $[]/$[target/build]/$[target/subarch]/.control
 
-# OPENVZ 
+# OPENVZ
 
 [when target/type is openvz]
 
-source: $[]/$[source/build]/$[source/subarch]/$[source/build]-$[source/subarch]-$[source/version]/$[source/name].tar.bz2 
+source: $[]/$[source/build]/$[source/subarch]/$[source/build]-$[source/subarch]-$[source/version]/$[source/name].tar.bz2
 target: $[]/$[target/build]/$[target/subarch]/$[target/build]-$[target/subarch]-$[target/version]/openvz/$[target/name].tar.gz
 
 # VSERVER
@@ -47,13 +47,13 @@ target: $[]/$[target/build]/$[target/subarch]/$[target/build]-$[target/subarch]-
 source: $[]/$[source/build]/$[source/subarch]/$[source/build]-$[source/subarch]-$[source/version]/$[source/name].tar.bz2
 target: $[]/$[target/build]/$[target/subarch]/$[target/build]-$[target/subarch]-$[target/version]/vserver/$[target/name].tar.bz2
 
-# STAGE 
+# STAGE
 
 [section source when target/type is stage]
 
 name: $[source]-$[source/subarch]-$[source/version]
 
-# SNAPSHOT 
+# SNAPSHOT
 
 [section target when target/type is snapshot git-snapshot]
 </diff>
      <filename>etc/fslayouts/funtoo.conf</filename>
    </modified>
    <modified>
      <diff>@@ -6,8 +6,8 @@ log=/var/tmp/cache/probe/probe.log
 SANDBOX_ON=0
 #PORTAGE_DEBUG=1
 if [ &quot;$EBUILD_PHASE&quot; != &quot;depend&quot; ]
-then 
-	echo -n &quot;$PF:$EBUILD_PHASE: &quot; &gt;&gt; $log 
+then
+	echo -n &quot;$PF:$EBUILD_PHASE: &quot; &gt;&gt; $log
 	if [ -e ${ROOT}etc/shadow ]
 	then
 		ls -l ${ROOT}etc/shadow 2&gt;&amp;1 &gt;&gt; $log</diff>
      <filename>features/probe.conf</filename>
    </modified>
    <modified>
      <diff>@@ -25,7 +25,7 @@ def usage():
 
  -h, --help			Print this message
  -V, --version			Display version information
- 
+
  -d, --debug			Enable debug mode
  -v, --verbose			Verbose mode
 
@@ -48,20 +48,20 @@ def version():
 	print __license__
 
 def find_target(settings):
-	&quot;&quot;&quot; 
-	
+	&quot;&quot;&quot;
+
 	Use the &quot;metro/class&quot; setting in our metadata to initialize the proper class defined in the modules/targets.py module.
-	
+
 	The targets.__dict__ dictionary contains all the objects in the targets module. We look inside it to see if the class
 	defined in &quot;metro/class&quot; exists in there and is a class. If not, we raise an exception.
-	
+
 	&quot;&quot;&quot;
 	if not targets.__dict__.has_key(settings[&quot;metro/class&quot;]):
 		raise MetroError, &quot;Metro class &quot;+settings[&quot;metro/class&quot;]+&quot; not defined in modules/targets.py.&quot;
 	if type(targets.__dict__[settings[&quot;metro/class&quot;]]) != types.ClassType:
 		raise MetroError, &quot;Metro class &quot;+settings[&quot;metro/class&quot;]+&quot; does not appear to be a class.&quot;
 	return targets.__dict__[settings[&quot;metro/class&quot;]](settings)
-	
+
 debug=False
 
 def initSettings(args,extraargs={}):
@@ -71,7 +71,7 @@ def initSettings(args,extraargs={}):
 		settings.collect(&quot;/etc/metro/metro.conf&quot;,None)
 	else:
 		print &quot;Warning: /etc/metro/metro.conf not found.&quot;
-	
+
 	# parse command-line supplied configuration files and spec files in the order they were specified
 
 	apos = 0
@@ -89,9 +89,9 @@ def initSettings(args,extraargs={}):
 	for arg in extraargs.keys():
 		settings[arg]=extraargs[arg]
 	settings.runCollector()
-	return settings	
+	return settings
+
 
-	
 def main():
 	if os.getuid() != 0:
 		print __app__ + &quot;: This script requires root privileges to operate.&quot;
@@ -108,7 +108,7 @@ def main():
 	except getopt.GetoptError:
 		usage()
 		sys.exit(2)
-	
+
 	# defaults for commandline opts
 	verbose=False
 	myopts=[]
@@ -176,16 +176,16 @@ def main():
 
 		print &quot;Multi-mode: running target %s&quot; % targetname
 		settings = initSettings(args,{&quot;target&quot;:targetname})
-		
+
 		# Step 7c: find and run target
-		
+
 		target = find_target(settings)
 		print __app__+&quot;: running target \&quot;&quot;+settings[&quot;target&quot;]+&quot;\&quot;.&quot;
 		target.run()
 		print __app__+&quot;: complete.&quot;
 
 
-try:		
+try:
 	main()
 except MetroError,arg:
 	print __app__+&quot;:&quot;,arg</diff>
      <filename>metro</filename>
    </modified>
    <modified>
      <diff>@@ -15,7 +15,7 @@ class MetroError(Exception):
 			return self.message
 		else:
 			return &quot;(no message)&quot;
-	
+
 try:
         import resource
         max_fd_limit=resource.getrlimit(RLIMIT_NOFILE)
@@ -55,7 +55,7 @@ def cleanup(pids,block_exceptions=True):
                 except IndexError:      pass
 
 verbosity=1
-		
+
 def warn(msg):
 	print &quot;!!! metro: &quot;+msg
 
@@ -127,19 +127,19 @@ def spawn(mycommand,env={},raw_exit_code=False,opt_name=None,fd_pipes=None,retur
 	Can either have a tuple, or a string passed in.  If uid/gid/groups/umask specified, it changes
 	the forked process to said value.  If path_lookup is on, a non-absolute command will be converted
 	to an absolute command, otherwise it returns None.
-	
+
 	selinux_context is the desired context, dependant on selinux being available.
 	opt_name controls the name the processor goes by.
 	fd_pipes controls which file descriptor numbers are left open in the forked process- it's a dict of
 	current fd's raw fd #, desired #.
-	
+
 	func_call is a boolean for specifying to execute a python function- use spawn_func instead.
 	raise_signals is questionable.  Basically throw an exception if signal'd.  No exception is thrown
 	if raw_input is on.
-	
+
 	logfile overloads the specified fd's to write to a tee process which logs to logfile
 	returnpid returns the relevant pids (a list, including the logging process if logfile is on).
-	
+
 	non-returnpid calls to spawn will block till the process has exited, returning the exitcode/signal
 	raw_exit_code controls whether the actual waitpid result is returned, or intrepretted.&quot;&quot;&quot;
 
@@ -165,7 +165,7 @@ def spawn(mycommand,env={},raw_exit_code=False,opt_name=None,fd_pipes=None,retur
 			if raw_exit_code:
 				return retval
 			return process_exit_code(retval)
-		
+
 		if fd_pipes == None:
 			fd_pipes={}
 			fd_pipes[0] = 0
@@ -198,7 +198,7 @@ def spawn(mycommand,env={},raw_exit_code=False,opt_name=None,fd_pipes=None,retur
 			for x in k:
 				trg_fd.append(x)
 				src_fd.append(fd_pipes[x])
-	
+
 			# run through said list dup'ing descriptors so that they won't be waxed
 			# by other dup calls.
 			for x in range(0,len(trg_fd)):
@@ -221,7 +221,7 @@ def spawn(mycommand,env={},raw_exit_code=False,opt_name=None,fd_pipes=None,retur
 					os.dup2(src_fd[x], trg_fd[x])
 		else:
 			trg_fd=[0,1,2]
-		
+
 		# wax all open descriptors that weren't requested be left open.
 		for x in range(0,max_fd_limit):
 			if x not in trg_fd:</diff>
      <filename>modules/catalyst_support.py</filename>
    </modified>
    <modified>
      <diff>@@ -8,10 +8,10 @@ class FlexDataError(Exception):
 			print
 			print &quot;Metro Parser: &quot;+message
 			print
-	
+
 class collection:
 	&quot;&quot;&quot; The collection class holds our parser.
-	
+
 	__init__() contains several important variable definitions.
 
 	self.immutable - if set to true, the parser will throw a warning if a variable is redefined. Otherwise it will not.
@@ -60,7 +60,7 @@ class collection:
 			if self.conditionTrue(cond):
 				truekeys.append(cond)
 			if len(truekeys) &gt; 1:
-				raise FlexDataError, &quot;Multiple true conditions exist for %s: conditions: %s&quot; % (varname, repr(truekeys)) 
+				raise FlexDataError, &quot;Multiple true conditions exist for %s: conditions: %s&quot; % (varname, repr(truekeys))
 		if len(truekeys) == 1:
 			return self.conditionals[varname][truekeys[0]]
 		elif len(truekeys) == 0:
@@ -68,7 +68,7 @@ class collection:
 		else:
 			#shouldn't get here
 			raise FlexDataError
-			
+
 
 	def expand(self,myvar,options={}):
 		if myvar[-1] == &quot;?&quot;:
@@ -103,7 +103,7 @@ class collection:
 			return self.expandString(myvar=myvar,options=options)
 
 	def expandString(self,string=None,myvar=None,stack=[],options={}):
-		# Expand all variables in a basic value, ie. a string 
+		# Expand all variables in a basic value, ie. a string
 		if string == None:
 			if myvar[-1] == &quot;?&quot;:
 				boolean = True
@@ -130,13 +130,13 @@ class collection:
 						raise KeyError, &quot;Variable &quot;+repr(myvar)+&quot; not found.&quot;
 				elif boolean:
 					string = &quot;yes&quot;
-			
+
 		if type(string) != types.StringType:
 			if len(stack) &gt;=1:
 				raise FlexDataError(&quot;expandString received non-string when expanding &quot;+repr(myvar)+&quot; ( stack = &quot;+repr(stack)+&quot;)&quot;)
 			else:
 				raise FlexDataError(&quot;expandString received non-string: %s&quot; % repr(string) )
-		
+
 		mysplit = string.strip().split(&quot; &quot;)
 
 		if len(mysplit) == 2 and mysplit[0] == &quot;&lt;&lt;&quot;:
@@ -206,14 +206,14 @@ class collection:
 					newex = self.expandString(self.raw[varname],varname,newstack,options=newoptions)
 					if newex == &quot;&quot; and zapmode==True:
 						# when expandMulti gets None, it won't add this line so we won't get a blank line even
-						return None 
+						return None
 					else:
 						ex += newex
 				else:
 					# self.raw[varname] can be a list .. if it's a string and blank, we treat it as undefined.
 					if type(self.raw[varname]) == types.StringType and self.raw[varname].strip() == &quot;&quot;:
 						ex += &quot;no&quot;
-					else: 
+					else:
 						ex += &quot;yes&quot;
 			elif self.conditionals.has_key(varname):
 				expandme = self.get_condition_for(varname)
@@ -232,7 +232,7 @@ class collection:
 					return None
 				if (&quot;lax&quot; in newoptions.keys()) or (len(stack) and self.laxvars.has_key(stack[-1]) and self.laxvars[stack[-1]]):
 					# record variables that we attempted to expand but were blank, so we can inform the user of possible bugs
-					if boolean: 
+					if boolean:
 						ex += &quot;no&quot;
 					else:
 						self.blanks[varname] = True
@@ -264,7 +264,7 @@ class collection:
 		# any future expansions will get our &quot;new&quot; options, but we don't want to pollute our current options by modifying
 		# options...
 		newoptions=options.copy()
-		# detect and properly handle $[[foo:lax]] 
+		# detect and properly handle $[[foo:lax]]
 		if len(myvarsplit) == 2:
 			if myvarsplit[1] == &quot;lax&quot;:
 				newoptions[&quot;lax&quot;] = True
@@ -312,7 +312,7 @@ class collection:
 				exec mycode in { &quot;os&quot;: os }, mylocals
 				newlines.append(sys.stdout.getvalue())
 				sys.stdout = sys.__stdout__
-			else:	
+			else:
 				newline = self.expandString(string=multi[pos],options=newoptions)
 				if newline != None:
 					newlines.append(newline)
@@ -370,7 +370,7 @@ class collection:
 				continue
 
 	def parseline(self,filename,openfile=None,dups=False):
-		
+
 		# parseline() will parse a line and return None on EOF, return [] on a blank line with no data, or will
 		# return a list of string elements if there is data on the line, split along whitespace: [ &quot;foo:&quot;, &quot;bar&quot;, &quot;oni&quot; ]
 		# parseline() will also remove &quot;# comments&quot; from a line as appropriate
@@ -398,7 +398,7 @@ class collection:
 				mysplit=mysplit[0:spos]
 				break
 			spos += 1
-		
+
 		if len(mysplit) == 0:
 			return []
 
@@ -511,8 +511,8 @@ class collection:
 				if not dups and self.raw.has_key(mykey):
 					raise FlexDataError,&quot;Error - \&quot;&quot;+mykey+&quot;\&quot; already defined. Value: %s. New line: %s.&quot; % ( repr(self.raw[mykey]), curline[:-1] )
 				self.raw[mykey] = myvalue
-		return mysplit	
-	
+		return mysplit
+
 	def collect(self,filename,origfile):
 		if not os.path.isabs(filename):
 			# relative path - use origfile (the file the collect annotation appeared in) to figure out what we are relative to
@@ -584,7 +584,7 @@ class collection:
 	def runCollector(self):
 		# BUG? we may need to have an expandString option that will disable the ability to go to the evaluated dict,
 		# because as we parse new files, we have new data and some &quot;lax&quot; evals may evaluate correctly now.
-	
+
 		# BUG: detect if we are trying to collect a single file multiple times. :)
 
 		# contfails means &quot;continuous expansion failures&quot; - if we get to the point where we are not making progress,
@@ -599,7 +599,7 @@ class collection:
 				cond = self.collectorcond[myitem]
 				if self.conditionOnConditional(cond):
 					raise FlexDataError,&quot;Collect annotation %s has conditional %s that references a conditional variable, which is not allowed.&quot; % (myitem, cond)
-				# is the condition true?: 
+				# is the condition true?:
 				if not self.conditionTrue(cond):
 					contfails += 1
 					self.collector = self.collector[1:] + [self.collector[0]]
@@ -637,6 +637,6 @@ if __name__ == &quot;__main__&quot;:
 	coll = collection(debug=False)
 	for arg in sys.argv[1:]:
 		coll.collect(arg)
-	coll.runCollector()	
+	coll.runCollector()
 	sys.exit(0)
 </diff>
      <filename>modules/flexdata.py</filename>
    </modified>
    <modified>
      <diff>@@ -14,7 +14,7 @@ class ExpandError(Exception):
 			out += &quot;\n&quot;
 			for el in els:
 				out += &quot;\tfile '%s', line %i: '%s'\n&quot; % ( el.filename, el.lineno, el.rawvalue )
-		print out	
+		print out
 
 class ParseError(Exception):
 	def __init__(self, message, type=&quot;&quot; ):
@@ -56,7 +56,7 @@ class conditionAtom:
 		newatom = conditionAtom(condition)
 		newatom.sibling = self
 		return newatom
-	
+
 	def negateAndRefine(self,condition):
 		if self == cgNone:
 			raise ParseError(&quot;Attempt to negate the ANY condition (which would always be false)&quot;)
@@ -70,13 +70,13 @@ class conditionAtom:
 			raise ParseError(&quot;Attempt to negate the ANY condition (which should always be false)&quot;)
 		newatom = conditionAtom()
 		newatom.parent = self
-		newatom.parentNegated = True	
+		newatom.parentNegated = True
 		return newatom
 
 	def __repr__(self):
 		if self.condition == None:
 			return &quot;ANY&quot;
-		out=repr(self.condition) 
+		out=repr(self.condition)
 		if self.parent:
 			if self.parent.negated:
 				out += &quot;AND NOT ( &quot;+repr(self.parent)+&quot; ) &quot;
@@ -102,7 +102,7 @@ class metroNameSpace:
 	def __init__(self):
 		self.elements={}
 		# Structure of self.elements is:
-		# {&quot;varname&quot; : [ element-object(contains value):condition-group ] 
+		# {&quot;varname&quot; : [ element-object(contains value):condition-group ]
 	def __getitem__(self,val):
 		return self.elements[val]
 	def add(self,element,cg):
@@ -119,10 +119,10 @@ class metroNameSpace:
 		#
 		# foo: bar
 		# foo: bar
-		# 
+		#
 		# we will check for dupes on evaluation, where the above values will throw an exception due to having
 		# multiple definitions.
-		self.elements[elname].append([element, cg])	
+		self.elements[elname].append([element, cg])
 	def debugDump(self):
 		keys=self.elements.keys()
 		keys.sort()
@@ -130,7 +130,7 @@ class metroNameSpace:
 			print key+&quot;:&quot;
 			for el, cond in self.elements[key]:
 				print &quot;\t&quot;+repr(el)+&quot;: &quot;+repr(cond)
-	
+
 	def expand(self,name,stack=[],mods=[]):
 		if not self.elements.has_key(name):
 			if &quot;lax&quot; in mods:
@@ -140,7 +140,7 @@ class metroNameSpace:
 			else:
 				raise ExpandError(name+&quot; not found&quot;)
 		eclist = self.elements[name]
-		ectrue = [] 
+		ectrue = []
 		for el, cond in eclist:
 			if cond.isTrue():
 				ectrue.append([el,cond])
@@ -175,8 +175,8 @@ class metroNameSpace:
 					else:
 						# $[foo/bar/oni]
 						expandme = substr[2:-1]
-						
-				
+
+
 					# handle modifiers
 					if expandme[-4:] == &quot;:zap&quot;:
 						mods.append(&quot;zap&quot;)
@@ -186,7 +186,7 @@ class metroNameSpace:
 						expandme = expandme[:-4]
 
 					# handle ? at end - this code allows $[foo:lax?] and $[bar:zap?]
-					
+
 					if expandme[-1] == &quot;?&quot;:
 						if self.elements.has_key(expandme[:-1]):
 							newstr += &quot;yes&quot;
@@ -219,7 +219,7 @@ class metroParsedFile:
 		self.collection = collection
 
 		self.parse()
-	
+
 	def name(self):
 		return self.filename
 
@@ -232,7 +232,7 @@ class metroParsedFile:
 		global lineno
 		global curline
 		global filename
-		
+
 		filename = self.filename
 		lineno = 0
 		prevlineno = 0
@@ -248,7 +248,7 @@ class metroParsedFile:
 		except:
 			raise ParseError(&quot;can't open file&quot;)
 		section = &quot;&quot;
-		while 1:	
+		while 1:
 			try:
 				curline = myfile.next()[:-1]
 				lineno += 1
@@ -260,16 +260,16 @@ class metroParsedFile:
 
 			if len(mysplit) == 1 and mysplit[0] == '':
 				continue
-			
+
 			# 2. Detect comments and truncate mysplit appropriately
-			
+
 			spos = 0
 			while spos &lt; len(mysplit):
 				if len(mysplit[spos]) and mysplit[spos][0] == &quot;#&quot;:
 					mysplit=mysplit[0:spos]
 					break
 				spos += 1
-			
+
 			# 3. If the line just included comments, move on to next line
 
 			if len(mysplit) == 0:
@@ -278,16 +278,16 @@ class metroParsedFile:
 			# 4. Identify and parse elements
 
 			if len(mysplit) == 2 and mysplit[0][-1] == &quot;:&quot; and mysplit[1] == &quot;[&quot;:
-				
+
 				# We have found a multi-line element. We will grab all the lines of this element and create a new multiLineElement object,
 				# and add it to the namespace.
-				
+
 				prevlineno = lineno
 				varname = mysplit[0][0:-1]
 				mylines = []
 				while 1:
 					try:
-						curline = myfile.next() 	
+						curline = myfile.next()
 						lineno += 1
 						mysplit = curline[:-1].strip().split(&quot; &quot;)
 						if len(mysplit) == 1 and mysplit[0] == &quot;]&quot;:
@@ -323,7 +323,7 @@ class metroParsedFile:
 				elif insidesplit[0] == &quot;collect&quot;:
 					# Collect annotation
 					if len(insidesplit)==2:
-						self.collection.queue(insidesplit[1])	
+						self.collection.queue(insidesplit[1])
 					elif len(insidesplit)&gt;3 and insidesplit[2] == &quot;when&quot;:
 						# special case: Conditional collect annotation
 						if self.cg != cgNone:
@@ -348,7 +348,7 @@ class metroParsedFile:
 				else:
 					raise ParseError(&quot;invalid annotation&quot;)
 			elif mysplit[0][-1] == &quot;:&quot;:
-				
+
 				# We have found a single-line element. We will create a corresponding singleLineElement object and add it
 				# to the namespace.
 				varname=mysplit[0][0:-1]
@@ -370,16 +370,16 @@ class element:
 				self.varname = self.varname[:-1]
 		else:
 			self.varname = varname
-		
+
 		self.rawvalue = rawvalue
-		
+
 		self.filename = filename
 		self.lineno = lineno
 		self.section = section
-	
+
 	def name(self):
 		return self.varname
-	
+
 	def __repr__(self):
 		return repr(self.rawvalue)
 </diff>
      <filename>modules/flexdata2.py</filename>
    </modified>
    <modified>
      <diff>@@ -14,7 +14,7 @@ class ExpandError(Exception):
 			out += &quot;\n&quot;
 			for el in els:
 				out += &quot;\tfile '%s', line %i: '%s'\n&quot; % ( el.filename, el.lineno, el.rawvalue )
-		print out	
+		print out
 
 class ParseError(Exception):
 	def __init__(self, message, type=&quot;&quot; ):
@@ -56,7 +56,7 @@ class conditionAtom:
 		newatom = conditionAtom(condition)
 		newatom.sibling = self
 		return newatom
-	
+
 	def negateAndRefine(self,condition):
 		if self == cgNone:
 			raise ParseError(&quot;Attempt to negate the ANY condition (which would always be false)&quot;)
@@ -70,13 +70,13 @@ class conditionAtom:
 			raise ParseError(&quot;Attempt to negate the ANY condition (which should always be false)&quot;)
 		newatom = conditionAtom()
 		newatom.parent = self
-		newatom.parentNegated = True	
+		newatom.parentNegated = True
 		return newatom
 
 	def __repr__(self):
 		if self.condition == None:
 			return &quot;ANY&quot;
-		out=repr(self.condition) 
+		out=repr(self.condition)
 		if self.parent:
 			if self.parent.negated:
 				out += &quot;AND NOT ( &quot;+repr(self.parent)+&quot; ) &quot;
@@ -102,7 +102,7 @@ class nameSpace:
 	def __init__(self):
 		self.elements={}
 		# Structure of self.elements is:
-		# {&quot;varname&quot; : [ element-object, element-object ] 
+		# {&quot;varname&quot; : [ element-object, element-object ]
 	def __getitem__(self,val):
 		return self.elements[val]
 	def add(self,element,cg):
@@ -119,10 +119,10 @@ class nameSpace:
 		#
 		# foo: bar
 		# foo: bar
-		# 
+		#
 		# we will check for dupes on evaluation, where the above values will throw an exception due to having
 		# multiple definitions.
-		self.elements[elname].append(element)	
+		self.elements[elname].append(element)
 	def debugDump(self):
 		keys=self.elements.keys()
 		keys.sort()
@@ -136,7 +136,7 @@ class nameSpace:
 		if not self.elements.has_key(name):
 			return None
 		eclist = self.elements[name]
-		ectrue = [] 
+		ectrue = []
 		for el in elist:
 			if cond.isTrue():
 				ectrue.append([el,cond])
@@ -161,7 +161,7 @@ class metroParsedFile:
 		self.collection = collection
 
 		self.parse()
-	
+
 	def name(self):
 		return self.filename
 
@@ -174,7 +174,7 @@ class metroParsedFile:
 		global lineno
 		global curline
 		global filename
-		
+
 		filename = self.filename
 		lineno = 0
 		prevlineno = 0
@@ -190,7 +190,7 @@ class metroParsedFile:
 		except:
 			raise ParseError(&quot;can't open file&quot;)
 		section = &quot;&quot;
-		while 1:	
+		while 1:
 			try:
 				curline = myfile.next()[:-1]
 				lineno += 1
@@ -202,16 +202,16 @@ class metroParsedFile:
 
 			if len(mysplit) == 1 and mysplit[0] == '':
 				continue
-			
+
 			# 2. Detect comments and truncate mysplit appropriately
-			
+
 			spos = 0
 			while spos &lt; len(mysplit):
 				if len(mysplit[spos]) and mysplit[spos][0] == &quot;#&quot;:
 					mysplit=mysplit[0:spos]
 					break
 				spos += 1
-			
+
 			# 3. If the line just included comments, move on to next line
 
 			if len(mysplit) == 0:
@@ -220,16 +220,16 @@ class metroParsedFile:
 			# 4. Identify and parse elements
 
 			if len(mysplit) == 2 and mysplit[0][-1] == &quot;:&quot; and mysplit[1] == &quot;[&quot;:
-				
+
 				# We have found a multi-line element. We will grab all the lines of this element and create a new multiLineElement object,
 				# and add it to the namespace.
-				
+
 				prevlineno = lineno
 				varname = mysplit[0][0:-1]
 				mylines = []
 				while 1:
 					try:
-						curline = myfile.next() 	
+						curline = myfile.next()
 						lineno += 1
 						mysplit = curline[:-1].strip().split(&quot; &quot;)
 						if len(mysplit) == 1 and mysplit[0] == &quot;]&quot;:
@@ -265,7 +265,7 @@ class metroParsedFile:
 				elif insidesplit[0] == &quot;collect&quot;:
 					# Collect annotation
 					if len(insidesplit)==2:
-						self.collection.queue(insidesplit[1])	
+						self.collection.queue(insidesplit[1])
 					elif len(insidesplit)&gt;3 and insidesplit[2] == &quot;when&quot;:
 						# special case: Conditional collect annotation
 						if self.cg != cgNone:
@@ -290,7 +290,7 @@ class metroParsedFile:
 				else:
 					raise ParseError(&quot;invalid annotation&quot;)
 			elif mysplit[0][-1] == &quot;:&quot;:
-				
+
 				# We have found a single-line element. We will create a corresponding singleLineElement object and add it
 				# to the namespace.
 				varname=mysplit[0][0:-1]
@@ -329,7 +329,7 @@ class stringLiteral():
 			if substr[0:2] != &quot;$[&quot;:
 				newstr += substr
 				continue
-				
+
 			# we're expanding something...
 			if substr in [ &quot;$[]&quot;, &quot;$[:]&quot;]:
 				# $[] or $[:]
@@ -343,7 +343,7 @@ class stringLiteral():
 					expandme = parent.section + &quot;/&quot; substr[2:-1]
 				else:
 					expandme = substr[2:-1]
-		
+
 			# handle modifiers
 			if expandme[-4:] == &quot;:zap&quot;:
 				mods.append(&quot;zap&quot;)
@@ -365,12 +365,12 @@ class stringLiteral():
 			newstack = stack[:]
 			newstack.append(self.parent)
 			newel = self.parent.namespace.find(expandme,strict=False)
-			
-			
+
+
 			for otherel in stack:
 				if otherel.varname == newel.varname:
 					raise ExpandError(&quot;recursive reference of '%s'&quot; % el.varname ,els=[el])
-			
+
 			if newel == None:
 				if &quot;lax&quot; in mods:
 					newstr += &quot;(lax-not-found-%s)&quot; % expandme
@@ -396,13 +396,13 @@ class element:
 		self.varname = varname
 		self.namespace = namespace
 		self.condition = condition
-	
+
 	def name(self):
 		if self.section != &quot;&quot;:
 			return self.section + &quot;/&quot; + self.varname
 		else:
 			return self.varname
-	
+
 	def __repr__(self):
 		return repr(self.rawvalue)
 </diff>
      <filename>modules/flexdata3.py</filename>
    </modified>
    <modified>
      <diff>@@ -43,7 +43,7 @@ class target:
 		if not os.path.exists(outdir):
 			os.makedirs(outdir)
 		outfd = open(outfile,&quot;w&quot;)
-		
+
 		for x in self.settings[key]:
 			outfd.write(x+&quot;\n&quot;)
 
@@ -99,7 +99,7 @@ class target:
 			# This creates the directory we want.
 			self.cmd(bin[&quot;install&quot;]+&quot; -d -m 0700 -g root -o root &quot;+path)
 			# The 0700 perms prevent Metro-generated /tmp directories from being abused by others -
-			# because they are world-writeable, they could be used by malicious local users to 
+			# because they are world-writeable, they could be used by malicious local users to
 			# inject arbitrary data/executables into a Metro build.
 	def cmd(self,mycmd,myexc=&quot;&quot;,badval=None):
 		print &quot;Executing \&quot;&quot;+mycmd+&quot;\&quot;...&quot;
@@ -131,7 +131,7 @@ class chroot(target):
 				# not a pid directory
 				continue
 			if mylink[0:len(cdir)] == cdir:
-				pids.append([pid,mylink])	
+				pids.append([pid,mylink])
 		return pids
 
 	def kill_chroot_pids(self):
@@ -152,18 +152,18 @@ class chroot(target):
 
 		self.mounts=[ &quot;/proc&quot; ]
 		self.mountmap={&quot;/proc&quot;:&quot;/proc&quot; }
-		
+
 		# CCACHE SUPPORT FOR CHROOTS
 
 		if not self.settings.has_key(&quot;metro/class&quot;):
 			return
-	
+
 		skey=&quot;metro/options/&quot;+self.settings[&quot;metro/class&quot;]
 
 		# enable ccache and pkgcache support - all we do in python is bind-mount the right directory to the right place.
 
-		for key, name, dest in [ 
-				[ &quot;path/cache/compiler&quot;, &quot;cache/compiler&quot;, &quot;/var/tmp/cache/compiler&quot; ] , 
+		for key, name, dest in [
+				[ &quot;path/cache/compiler&quot;, &quot;cache/compiler&quot;, &quot;/var/tmp/cache/compiler&quot; ] ,
 				[ &quot;path/cache/package&quot;, &quot;cache/package&quot;, &quot;/var/tmp/cache/package&quot; ] ,
 				[ &quot;path/cache/probe&quot;, &quot;probe&quot;, &quot;/var/tmp/cache/probe&quot; ] ]:
 			if self.settings.has_key(skey) and name in self.settings[skey].split():
@@ -176,19 +176,19 @@ class chroot(target):
 
 	def bind(self):
 		&quot;&quot;&quot; Perform bind mounts &quot;&quot;&quot;
-		for x in self.mounts: 
+		for x in self.mounts:
 			if not os.path.exists(self.settings[&quot;path/work&quot;]+x):
 				os.makedirs(self.settings[&quot;path/work&quot;]+x,0755)
-			
+
 			if not os.path.exists(self.mountmap[x]):
 				os.makedirs(self.mountmap[x],0755)
-			
+
 			src=self.mountmap[x]
 			print &quot;Mounting %s to %s...&quot; % (src, x)
 			if os.system(bin[&quot;mount&quot;]+&quot; --bind &quot;+src+&quot; &quot;+self.settings[&quot;path/work&quot;]+x) != 0:
 				self.unbind()
 				raise MetroError,&quot;Couldn't bind mount &quot;+src
-			    
+
 	def unbind(self,attempt=0):
 		myprefix = self.settings[&quot;path/work&quot;]
 		mounts = self.getActiveMounts()
@@ -199,7 +199,7 @@ class chroot(target):
 			while mpos &lt; len(mounts):
 				self.cmd(&quot;umount &quot;+mounts[mpos],badval=10)
 				if not ismount(mounts[mpos]):
-					del mounts[mpos]	
+					del mounts[mpos]
 					progress += 1
 				else:
 					mpos += 1
@@ -276,17 +276,17 @@ class chroot(target):
 			self.kill_chroot_pids()
 			self.checkMounts()
 			raise
-			
+
 		self.runScript(&quot;steps/capture&quot;)
 		if self.settings.has_key(&quot;trigger/ok/run&quot;):
 			self.runScript(&quot;trigger/ok/run&quot;)
-		self.cleanPath()		
+		self.cleanPath()
 
 
 class snapshot(target):
 	def __init__(self,settings):
 		target.__init__(self,settings)
-	
+
 	def run(self):
 		if self.targetExists(&quot;path/mirror/snapshot&quot;):
 			if self.settings.has_key(&quot;trigger/ok/run&quot;):</diff>
      <filename>modules/targets.py</filename>
    </modified>
    <modified>
      <diff>@@ -46,10 +46,10 @@ then
 	VERS=$3
 else
 	VERS=`date +%Y.%m.%d`
-fi 
+fi
 
 SUBARCH=&quot;$1&quot;
-if [ &quot;${SUBARCH:0:1}&quot; = &quot;~&quot; ] 
+if [ &quot;${SUBARCH:0:1}&quot; = &quot;~&quot; ]
 then
 	BUILD=&quot;~funtoo&quot;
 	# strip ~ from subarch, as Metro doesn't work this way anymore.
@@ -64,14 +64,14 @@ cat &lt;&lt; EOF
   PLEASE NOTE:
   ============
 
-  As of Metro 1.3.0, the metro command itself can perform all the 
-  functionality of this script. 
-  
+  As of Metro 1.3.0, the metro command itself can perform all the
+  functionality of this script.
+
   You can perform the same actions as the command above by calling
   Metro as follows:
 
   $mycmd
-  
+
   The build will continue in 10 seconds...
 
 EOF</diff>
      <filename>scripts/build.sh</filename>
    </modified>
    <modified>
      <diff>@@ -17,7 +17,7 @@ do_help() {
   by Daniel Robbins (drobbins@funtoo.org)
 
   Usage: $0 build arch [ full|freshen|quick [date] ]
-  Examples: 
+  Examples:
   	# $0 funtoo amd64
 	# $0 ~funtoo core2 freshen
 	# $0 gentoo pentium4 full 2009.01.03
@@ -50,6 +50,6 @@ then
 	VERS=$4
 else
 	VERS=`date +%Y.%m.%d`
-fi 
+fi
 
 exec /usr/bin/metro multi: yes metro/build: $BUILD target/subarch: $SUBARCH target/version: $VERS multi/mode: $MODE</diff>
      <filename>scripts/ezbuild.sh</filename>
    </modified>
    <modified>
      <diff>@@ -6,5 +6,5 @@ arch: x86
 
 CFLAGS: -mtune=generic -O2 -pipe
 CHOST: i686-pc-linux-gnu
-HOSTUSE: 
+HOSTUSE:
 </diff>
      <filename>subarch/generic32.spec</filename>
    </modified>
    <modified>
      <diff>@@ -6,4 +6,4 @@ arch: x86
 
 CFLAGS: -O2 -march=i686 -pipe
 CHOST: i686-pc-linux-gnu
-HOSTUSE: 
+HOSTUSE:</diff>
      <filename>subarch/i686.spec</filename>
    </modified>
    <modified>
      <diff>@@ -6,5 +6,5 @@ arch: x86
 
 CFLAGS: -march=native -O2 -pipe
 CHOST: i686-pc-linux-gnu
-HOSTUSE: 
+HOSTUSE:
 </diff>
      <filename>subarch/native32.spec</filename>
    </modified>
    <modified>
      <diff>@@ -6,4 +6,4 @@ arch: x86
 
 CFLAGS: -O2 -mtune=i686 -pipe
 CHOST: i486-pc-linux-gnu
-HOSTUSE: 
+HOSTUSE:</diff>
      <filename>subarch/x86.spec</filename>
    </modified>
    <modified>
      <diff>@@ -59,7 +59,7 @@ tar cf $tarout portage || die &quot;couldn't create git archive&quot;
 if [ -e /usr/bin/pbzip2 ]
 then
 	echo &quot;Compressing $tarout using pbzip2...&quot;
-	pbzip2 -p4 $tarout || die &quot;Git pbzip2 failure&quot; 
+	pbzip2 -p4 $tarout || die &quot;Git pbzip2 failure&quot;
 else
 	echo &quot;Compressing $tarout using bzip2...&quot;
 	bzip2 $tarout || die &quot;Git bzip2 failure&quot;</diff>
      <filename>targets/gentoo/git-snapshot.spec</filename>
    </modified>
    <modified>
      <diff>@@ -24,7 +24,7 @@ chroot: $[path/work]
 
 unpack: [
 #!/bin/bash
-[ ! -d $[path/chroot] ] &amp;&amp; install -d $[path/chroot] 
+[ ! -d $[path/chroot] ] &amp;&amp; install -d $[path/chroot]
 [ ! -d $[path/chroot]/tmp ] &amp;&amp; install -d $[path/chroot]/tmp --mode=1777 || exit 2
 if [ -e /usr/bin/pbzip2 ]
 then
@@ -54,7 +54,7 @@ then
 	install -d $outdir || &quot;Output path $outdir does not exist&quot;
 fi
 echo &quot;Creating $[path/mirror/target]...&quot;
-tar czpf $[path/mirror/target] -C $[path/chroot] . 
+tar czpf $[path/mirror/target] -C $[path/chroot] .
 if [ $? -ge 2 ]
 then
 	die &quot;Error creating tarball&quot;
@@ -97,11 +97,11 @@ chroot/run: [
 	mknod /lib/udev/devices/ttyp0 c 3 0 || exit 8
 	mknod /lib/udev/devices/ptyp0 c 2 0 || exit 9
 	mknod /lib/udev/devices/ptmx c 5 2 || exit 10
-	
+
 	# OpenRC - prior to 0.3.0
 	# cp /etc/rc.conf /etc/rc.conf.orig || exit 11
 	# cat /etc/rc.conf.orig | sed -e &quot;/^#rc_devices/c\\&quot; -e 'rc_devices=&quot;static&quot;' &gt; /etc/rc.conf || exit 12
-	
+
 	# timezone
 	echo &quot;Setting time zone...&quot;
 	rm /etc/localtime
@@ -126,7 +126,7 @@ EOF
 	cat &gt; /etc/motd &lt;&lt; &quot;EOF&quot;
 $[[files/motd]]
 EOF
-	rm -rf /etc/ssh/ssh_host* /var/tmp/* /var/log/* /tmp/* /root/.bash_history /etc/resolv.conf 
+	rm -rf /etc/ssh/ssh_host* /var/tmp/* /var/log/* /tmp/* /root/.bash_history /etc/resolv.conf
 
 	# TESTS
 	echo &quot;Performing QA checks...&quot;
@@ -144,11 +144,11 @@ EOF
 motd: [
 
  &gt;&gt;&gt; OpenVZ Template:               $[target/name]
- &gt;&gt;&gt; Version:                       $[target/version] 
- &gt;&gt;&gt; Created by:                    $[local/author] 
+ &gt;&gt;&gt; Version:                       $[target/version]
+ &gt;&gt;&gt; Created by:                    $[local/author]
+
+ &gt;&gt;&gt; Send suggestions, improvements, bug reports relating to...
 
- &gt;&gt;&gt; Send suggestions, improvements, bug reports relating to... 
- 
  &gt;&gt;&gt; This OpenVZ template:          $[local/author]
  &gt;&gt;&gt; Gentoo Linux (general):        Gentoo Linux (http://www.gentoo.org)
  &gt;&gt;&gt; OpenVZ (general):              OpenVZ (http://www.openvz.org)
@@ -158,7 +158,7 @@ motd: [
  2. set root password
  3. 'vzsplit'/'vzctl' to get/set resource usage (basic config bad for gentoo)
  4. 'emerge --sync' to retrieve a portage tree
- 
+
  NOTE: This message can be removed by deleting /etc/motd.
 
 ]</diff>
      <filename>targets/gentoo/openvz.spec</filename>
    </modified>
    <modified>
      <diff>@@ -67,7 +67,7 @@ git archive --prefix=portage/ $[git/branch] &gt; $tarout || die &quot;Couldn't create gi
 if [ -e /usr/bin/pbzip2 ]
 then
 	echo &quot;Compressing $tarout using pbzip2...&quot;
-	pbzip2 -p4 $tarout || die &quot;Git pbzip2 failure&quot; 
+	pbzip2 -p4 $tarout || die &quot;Git pbzip2 failure&quot;
 else
 	echo &quot;Compressing $tarout using bzip2...&quot;
 	bzip2 $tarout || die &quot;Git bzip2 failure&quot;</diff>
      <filename>targets/gentoo/snapshot.spec</filename>
    </modified>
    <modified>
      <diff>@@ -41,6 +41,6 @@ for x in [&quot;http_proxy&quot;,&quot;ftp_proxy&quot;,&quot;RSYNC_PROXY&quot;]:
 		print x+&quot;=\&quot;&quot;+os.environ[x]+&quot;\&quot;&quot;
 	else:
 		print &quot;# &quot;+x+&quot; is not set&quot;
-?&gt;	
+?&gt;
 ]
 </diff>
      <filename>targets/gentoo/stage/files.spec</filename>
    </modified>
    <modified>
      <diff>@@ -19,7 +19,7 @@ export CLEAN_DELAY=0
 export EBEEP_IGNORE=0
 export EPAUSE_IGNORE=0
 export CONFIG_PROTECT=&quot;-* /etc/locale.gen&quot;
-if [ -d /var/tmp/cache/compiler ] 
+if [ -d /var/tmp/cache/compiler ]
 then
 	! [ -e /usr/bin/ccache ] &amp;&amp; emerge --oneshot --nodeps ccache || exit 2
 	export CCACHE_DIR=/var/tmp/cache/compiler
@@ -27,9 +27,9 @@ then
 	/usr/bin/ccache -M 1G
 	# The ccache ebuild has a bug where it will install links in /usr/lib/ccache/bin to reflect the current setting of CHOST.
 	# But the current setting of CHOST may not reflect the current compiler available (remember, CHOST can be overridden in /etc/make.conf)
-	
-	# This causes problems with ebuilds (such as ncurses) who may find an &quot;i686-pc-linux-gnu-gcc&quot; symlink in /usr/lib/ccache/bin and 
-	# assume that an &quot;i686-pc-linux-gnu-gcc&quot; compiler is actually installed, when we really have an i486-pc-linux-gnu-gcc compiler 
+
+	# This causes problems with ebuilds (such as ncurses) who may find an &quot;i686-pc-linux-gnu-gcc&quot; symlink in /usr/lib/ccache/bin and
+	# assume that an &quot;i686-pc-linux-gnu-gcc&quot; compiler is actually installed, when we really have an i486-pc-linux-gnu-gcc compiler
 	# installed. For some reason, ncurses ends up looking for the compiler in /usr/bin and it fails - no compiler found.
 
 	# It's a weird problem but the next few ccache-config lines takes care of it by removing bogus ccache symlinks and installing
@@ -37,7 +37,7 @@ then
 	# in /usr/lib/ccache/bin, it looks for (and finds)  a real i686-pc-linux-gnu-gcc installed in /usr/bin.
 
 	# I am including these detailed notes so that people are aware of the issue and so we can look for a more elegant solution to
-	# this problem in the future. This problem crops up when you are using an i486-pc-linux-gnu CHOST stage3 to create an 
+	# this problem in the future. This problem crops up when you are using an i486-pc-linux-gnu CHOST stage3 to create an
 	# i686-pc-linux-gnu CHOST stage1. It will probably crop up whenever the CHOST gets changed. For now, it's fixed :)
 
 	if [ -e /usr/bin/ccache-config ]
@@ -103,7 +103,7 @@ rm -rf $[portage/ROOT]/tmp/*
 chroot/clean: [
 #!/bin/bash
 # We only do this cleanup if ROOT = / - in other words, if we are going to be packing up /,
-# then we need to remove the custom configuration we've done to /. If we are building a 
+# then we need to remove the custom configuration we've done to /. If we are building a
 # stage1, then everything is in /tmp/stage1root so we don't need to do this.
 export ROOT=$[portage/ROOT]
 if [ &quot;${ROOT}&quot; = &quot;/&quot; ]
@@ -117,7 +117,7 @@ then
 	for f in /etc/resolv.conf /etc/hosts
 	do
 		[ -e $f ] &amp;&amp; rm -f $f
-		if [ -e $f.orig ] 
+		if [ -e $f.orig ]
 		then
 			mv -f $f.orig $f || exit 2
 		fi
@@ -150,9 +150,9 @@ fi
 
 chroot/postrun: [
 #!/bin/bash
-if [ &quot;$[target]&quot; != &quot;stage1&quot; ] &amp;&amp; [ -e /usr/bin/ccache ] 
+if [ &quot;$[target]&quot; != &quot;stage1&quot; ] &amp;&amp; [ -e /usr/bin/ccache ]
 then
-	emerge -C dev-util/ccache 
+	emerge -C dev-util/ccache
 fi
 ]
 
@@ -173,7 +173,7 @@ etcSecretDirs = [
 	&quot;/etc/skel/.ssh&quot;,
 	&quot;/etc/ssl/private&quot; ]
 
-etcROFiles = [ 
+etcROFiles = [
 	&quot;/etc/passwd&quot;,
 	&quot;/etc/group&quot; ]
 
@@ -193,7 +193,7 @@ def fileCheck(files,perms,uid=0,gid=0):
 	for file in files:
 		myfile = os.path.normpath(root+&quot;/&quot;+file)
 		if os.path.exists(myfile):
-			mystat = os.stat(myfile) 
+			mystat = os.stat(myfile)
 			myperms = &quot;%o&quot; % mystat[ST_MODE]
 			myuid = mystat[ST_UID]
 			mygid = mystat[ST_GID]
@@ -224,7 +224,7 @@ else:
 
 unpack: [
 #!/bin/bash
-[ ! -d $[path/chroot] ] &amp;&amp; install -d $[path/chroot] 
+[ ! -d $[path/chroot] ] &amp;&amp; install -d $[path/chroot]
 [ ! -d $[path/chroot]/tmp ] &amp;&amp; install -d $[path/chroot]/tmp --mode=1777 || exit 2
 echo -n &quot;Extracting source stage $[path/mirror/source]&quot;
 if [ -e /usr/bin/pbzip2 ]
@@ -234,7 +234,7 @@ then
 	pbzip2 -dc $[path/mirror/source] | tar xpf - -C $[path/chroot] || exit 3
 	[ ! -d $[path/chroot]/usr/portage ] &amp;&amp; install -d $[path/chroot]/usr/portage --mode=0755
 	echo &quot;Extracting portage snapshot $[path/mirror/snapshot] using pbzip2...&quot;
-	pbzip2 -dc $[path/mirror/snapshot] | tar xpf - -C $[path/chroot]/usr || exit 4	
+	pbzip2 -dc $[path/mirror/snapshot] | tar xpf - -C $[path/chroot]/usr || exit 4
 else
 	echo &quot;...&quot;
 	tar xjpf $[path/mirror/source] -C $[path/chroot] || exit 3
@@ -258,20 +258,20 @@ $[[files/locale.gen]]
 EOF
 for f in /etc/resolv.conf /etc/hosts
 do
-	if [ -e $f ] 
+	if [ -e $f ]
 	then
 		respath=$[path/chroot]$f
 		if [ -e $respath ]
 		then
 			echo &quot;Backing up $respath...&quot;
-			cp $respath ${respath}.orig 
+			cp $respath ${respath}.orig
 			if [ $? -ne 0 ]
 			then
 				 echo &quot;couldn't back up $respath&quot; &amp;&amp; exit 8
 			fi
 		fi
 		echo &quot;Copying $f to $respath...&quot;
-		cp $f $respath 
+		cp $f $respath
 		if [ $? -ne 0 ]
 		then
 			echo &quot;couldn't copy $f into place&quot;
@@ -294,7 +294,7 @@ then
 	echo &quot;Creating $[path/mirror/target] using pbzip2...&quot;
 	tarout=&quot;$[path/mirror/target]&quot;
 	tarout=&quot;${tarout%.*}&quot;
-	tar cpf $tarout -C $[path/chroot/stage] . 
+	tar cpf $tarout -C $[path/chroot/stage] .
 	if [ $? -ge 2 ]
 	then
 		rm -f &quot;$tarout&quot; &quot;$[path/mirror/target]&quot;</diff>
      <filename>targets/gentoo/stage/steps.spec</filename>
    </modified>
    <modified>
      <diff>@@ -21,7 +21,7 @@ python /tmp/bootstrap.py --check || exit 1
 USE=&quot;-* build bootstrap&quot; emerge portage || exit 1
 
 export USE=&quot;-* bootstrap `python /tmp/bootstrap.py --use`&quot;
-emerge $eopts `python /tmp/bootstrap.py --pkglist` || exit 1	
+emerge $eopts `python /tmp/bootstrap.py --pkglist` || exit 1
 emerge --clean || exit 1
 emerge --prune sys-devel/gcc || exit 1
 </diff>
      <filename>targets/gentoo/stage2.spec</filename>
    </modified>
    <modified>
      <diff>@@ -24,7 +24,7 @@ chroot: $[path/work]
 
 unpack: [
 #!/bin/bash
-[ ! -d $[path/chroot] ] &amp;&amp; install -d $[path/chroot] 
+[ ! -d $[path/chroot] ] &amp;&amp; install -d $[path/chroot]
 [ ! -d $[path/chroot]/tmp ] &amp;&amp; install -d $[path/chroot]/tmp --mode=1777 || exit 2
 if [ -e /usr/bin/pbzip2 ]
 then
@@ -97,5 +97,5 @@ chroot/run: [
 	done
 
 	# cleanup
-	rm -rf /etc/ssh/ssh_host* /var/tmp/* /var/log/* /tmp/* /root/.bash_history /etc/resolv.conf 
+	rm -rf /etc/ssh/ssh_host* /var/tmp/* /var/log/* /tmp/* /root/.bash_history /etc/resolv.conf
 ]</diff>
      <filename>targets/gentoo/vserver.spec</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>830de65d7c4215d3a049fcd40355d108e55969c7</id>
    </parent>
  </parents>
  <author>
    <name>Daniel Robbins</name>
    <email>drobbins@funtoo.org</email>
  </author>
  <url>http://github.com/funtoo/metro/commit/66fa89e7227a9040ff57fe6decd8482596c1f9e3</url>
  <id>66fa89e7227a9040ff57fe6decd8482596c1f9e3</id>
  <committed-date>2009-03-28T14:30:21-07:00</committed-date>
  <authored-date>2009-03-28T14:30:21-07:00</authored-date>
  <message>remove white-space from line-endings

Conflicts:

	etc/fslayouts/hollow.conf</message>
  <tree>9de738079cd7d7cb15f88105cca2c9671a7d99b5</tree>
  <committer>
    <name>Daniel Robbins</name>
    <email>drobbins@funtoo.org</email>
  </committer>
</commit>
