Add features flag to gmerge and some whitespace cleanup.

Change-Id: I95aec88a491b0aee08f100af72d608b326fcf9c4

BUG=chromium-os:13992
TEST=Ran sudo gmerge chromos-base/gmerge to update to latest gmerge and then
ran sudo gmerge --features=test chromeos-base/metrics and saw test phase
run on dev machine.

Review URL: http://codereview.chromium.org/6824021
diff --git a/builder.py b/builder.py
index bf83c3e..7a6af9c 100644
--- a/builder.py
+++ b/builder.py
@@ -51,13 +51,19 @@
 
   def Build(self, board, pkg, additional_args):
     """Handles a build request from the cherrypy server."""
-    cherrypy.log('Additional build request arguments: '+ str(additional_args),
+    cherrypy.log('Additional build request arguments: ' + str(additional_args),
                  'BUILD')
 
-    original_use = os.environ.get('USE', '')
+    def _AppendStrToEnvVar(env, var, additional_string):
+      env[var] = env.get(var, '') + ' ' + additional_string
+      cherrypy.log('%s flags modified to %s' % (var, env[var]), 'BUILD')
+
+    env_copy = os.environ.copy()
     if 'use' in additional_args:
-      os.environ['USE'] = original_use + ' ' + additional_args['use']
-      cherrypy.log('USE flags modified to ' + os.environ['USE'], 'BUILD')
+      _AppendStrToEnvVar(env_copy, 'USE', additional_args['use'])
+
+    if 'features' in additional_args:
+      _AppendStrToEnvVar(env_copy, 'FEATURES', additional_args['features'])
 
     try:
       if (self._ShouldBeWorkedOn(board, pkg) and
@@ -67,7 +73,7 @@
             'Either start working on the package or pass --accept_stable '
             'to gmerge')
 
-      rc = subprocess.call(['emerge-%s' % board, pkg])
+      rc = subprocess.call(['emerge-%s' % board, pkg], env=env_copy)
       if rc != 0:
         return self.SetError('Could not emerge ' + pkg)
 
@@ -80,5 +86,3 @@
       return 'Success\n'
     except OSError, e:
       return self.SetError('Could not execute build command: ' + str(e))
-    finally:
-      os.environ['USE'] =  original_use