| Index: gclient.py
 | 
| ===================================================================
 | 
| --- gclient.py	(revision 149216)
 | 
| +++ gclient.py	(working copy)
 | 
| @@ -882,12 +882,16 @@
 | 
|    def LoadCurrentConfig(options):
 | 
|      """Searches for and loads a .gclient file relative to the current working
 | 
|      dir. Returns a GClient object."""
 | 
| -    path = gclient_utils.FindGclientRoot(os.getcwd(), options.config_filename)
 | 
| -    if not path:
 | 
| -      return None
 | 
| -    client = GClient(path, options)
 | 
| -    client.SetConfig(gclient_utils.FileRead(
 | 
| -        os.path.join(path, options.config_filename)))
 | 
| +    if options.spec:
 | 
| +      client = GClient('.', options)
 | 
| +      client.SetConfig(options.spec)
 | 
| +    else:
 | 
| +      path = gclient_utils.FindGclientRoot(os.getcwd(), options.config_filename)
 | 
| +      if not path:
 | 
| +        return None
 | 
| +      client = GClient(path, options)
 | 
| +      client.SetConfig(gclient_utils.FileRead(
 | 
| +          os.path.join(path, options.config_filename)))
 | 
|  
 | 
|      if (options.revisions and
 | 
|          len(client.dependencies) > 1 and
 | 
| @@ -1221,10 +1225,15 @@
 | 
|  provided, then configuration is read from a specified Subversion server
 | 
|  URL.
 | 
|  """
 | 
| -  parser.add_option('--spec',
 | 
| -                    help='create a gclient file containing the provided '
 | 
| -                         'string. Due to Cygwin/Python brokenness, it '
 | 
| -                         'probably can\'t contain any newlines.')
 | 
| +
 | 
| +  # We do a little dance with the --gclientfile option.  'gclient config' is the
 | 
| +  # only command where it's acceptable to have both '--gclientfile' and '--spec'
 | 
| +  # arguments.  So, we temporarily stash any --gclientfile parameter into
 | 
| +  # options.output_config_file until after the (gclientfile xor spec) error
 | 
| +  # check.
 | 
| +  parser.remove_option('--gclientfile')
 | 
| +  parser.add_option('--gclientfile', dest='output_config_file',
 | 
| +                    help='Specify an alternate .gclient file')
 | 
|    parser.add_option('--name',
 | 
|                      help='overrides the default name for the solution')
 | 
|    parser.add_option('--deps-file', default='DEPS',
 | 
| @@ -1237,7 +1246,10 @@
 | 
|                           'will never sync them)')
 | 
|    parser.add_option('--git-deps', action='store_true',
 | 
|                      help='sets the deps file to ".DEPS.git" instead of "DEPS"')
 | 
| +  parser.set_defaults(config_filename=None)
 | 
|    (options, args) = parser.parse_args(args)
 | 
| +  if options.output_config_file:
 | 
| +    setattr(options, 'config_filename', getattr(options, 'output_config_file'))
 | 
|    if ((options.spec and args) or len(args) > 2 or
 | 
|        (not options.spec and not args)):
 | 
|      parser.error('Inconsistent arguments. Use either --spec or one or 2 args')
 | 
| @@ -1520,6 +1532,7 @@
 | 
|      jobs = 1
 | 
|    else:
 | 
|      jobs = 8
 | 
| +  gclientfile_default = os.environ.get('GCLIENT_FILE', '.gclient')
 | 
|    parser.add_option('-j', '--jobs', default=jobs, type='int',
 | 
|                      help='Specify how many SCM commands can run in parallel; '
 | 
|                            'default=%default')
 | 
| @@ -1527,8 +1540,13 @@
 | 
|                      help='Produces additional output for diagnostics. Can be '
 | 
|                            'used up to three times for more logging info.')
 | 
|    parser.add_option('--gclientfile', dest='config_filename',
 | 
| -                    default=os.environ.get('GCLIENT_FILE', '.gclient'),
 | 
| -                    help='Specify an alternate %default file')
 | 
| +                    default=None,
 | 
| +                    help='Specify an alternate %s file' % gclientfile_default)
 | 
| +  parser.add_option('--spec',
 | 
| +                    default=None,
 | 
| +                    help='create a gclient file containing the provided '
 | 
| +                         'string. Due to Cygwin/Python brokenness, it '
 | 
| +                         'probably can\'t contain any newlines.')
 | 
|    # Integrate standard options processing.
 | 
|    old_parser = parser.parse_args
 | 
|    def Parse(args):
 | 
| @@ -1537,6 +1555,10 @@
 | 
|          min(options.verbose, 3)]
 | 
|      logging.basicConfig(level=level,
 | 
|          format='%(module)s(%(lineno)d) %(funcName)s:%(message)s')
 | 
| +    if options.config_filename and options.spec:
 | 
| +      parser.error('Cannot specifiy both --gclientfile and --spec')
 | 
| +    if not options.config_filename:
 | 
| +      options.config_filename = gclientfile_default
 | 
|      options.entries_filename = options.config_filename + '_entries'
 | 
|      if options.jobs < 1:
 | 
|        parser.error('--jobs must be 1 or higher')
 | 
| 
 |