| Index: gclient.py
 | 
| diff --git a/gclient.py b/gclient.py
 | 
| index 3e8a7962290a3b63832adc2ad3469ae7ad2d6a53..1fed7086c5a92cbbd4738b2c99e86b003ab9fe33 100755
 | 
| --- a/gclient.py
 | 
| +++ b/gclient.py
 | 
| @@ -190,13 +190,12 @@ class GClientKeywords(object):
 | 
|  class DependencySettings(GClientKeywords):
 | 
|    """Immutable configuration settings."""
 | 
|    def __init__(
 | 
| -      self, parent, url, safesync_url, managed, custom_deps, custom_vars,
 | 
| +      self, parent, url, managed, custom_deps, custom_vars,
 | 
|        custom_hooks, deps_file, should_process, relative):
 | 
|      GClientKeywords.__init__(self)
 | 
|  
 | 
|      # These are not mutable:
 | 
|      self._parent = parent
 | 
| -    self._safesync_url = safesync_url
 | 
|      self._deps_file = deps_file
 | 
|      self._url = url
 | 
|      # 'managed' determines whether or not this dependency is synced/updated by
 | 
| @@ -255,10 +254,6 @@ class DependencySettings(GClientKeywords):
 | 
|      return self.parent.root
 | 
|  
 | 
|    @property
 | 
| -  def safesync_url(self):
 | 
| -    return self._safesync_url
 | 
| -
 | 
| -  @property
 | 
|    def should_process(self):
 | 
|      """True if this dependency should be processed, i.e. checked out."""
 | 
|      return self._should_process
 | 
| @@ -297,12 +292,12 @@ class DependencySettings(GClientKeywords):
 | 
|  class Dependency(gclient_utils.WorkItem, DependencySettings):
 | 
|    """Object that represents a dependency checkout."""
 | 
|  
 | 
| -  def __init__(self, parent, name, url, safesync_url, managed, custom_deps,
 | 
| +  def __init__(self, parent, name, url, managed, custom_deps,
 | 
|                 custom_vars, custom_hooks, deps_file, should_process,
 | 
|                 relative):
 | 
|      gclient_utils.WorkItem.__init__(self, name)
 | 
|      DependencySettings.__init__(
 | 
| -        self, parent, url, safesync_url, managed, custom_deps, custom_vars,
 | 
| +        self, parent, url, managed, custom_deps, custom_vars,
 | 
|          custom_hooks, deps_file, should_process, relative)
 | 
|  
 | 
|      # This is in both .gclient and DEPS files:
 | 
| @@ -703,7 +698,7 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
 | 
|          if ent is not None:
 | 
|            deps_file = ent['deps_file']
 | 
|        deps_to_add.append(Dependency(
 | 
| -          self, name, url, None, None, None, self.custom_vars, None,
 | 
| +          self, name, url, None, None, self.custom_vars, None,
 | 
|            deps_file, should_process, use_relative_paths))
 | 
|      deps_to_add.sort(key=lambda x: x.name)
 | 
|  
 | 
| @@ -1059,7 +1054,7 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
 | 
|  
 | 
|    def __str__(self):
 | 
|      out = []
 | 
| -    for i in ('name', 'url', 'parsed_url', 'safesync_url', 'custom_deps',
 | 
| +    for i in ('name', 'url', 'parsed_url', 'custom_deps',
 | 
|                'custom_vars', 'deps_hooks', 'file_list', 'should_process',
 | 
|                'processed', 'hooks_ran', 'deps_parsed', 'requirements',
 | 
|                'allowed_hosts'):
 | 
| @@ -1114,7 +1109,6 @@ solutions = [
 | 
|      "managed"     : %(managed)s,
 | 
|      "custom_deps" : {
 | 
|      },
 | 
| -    "safesync_url": "%(safesync_url)s",
 | 
|    },
 | 
|  ]
 | 
|  cache_dir = %(cache_dir)r
 | 
| @@ -1127,7 +1121,6 @@ cache_dir = %(cache_dir)r
 | 
|      "managed"     : %(managed)s,
 | 
|      "custom_deps" : {
 | 
|  %(solution_deps)s    },
 | 
| -    "safesync_url": "%(safesync_url)s",
 | 
|    },
 | 
|  """)
 | 
|  
 | 
| @@ -1141,7 +1134,7 @@ solutions = [
 | 
|      # Do not change previous behavior. Only solution level and immediate DEPS
 | 
|      # are processed.
 | 
|      self._recursion_limit = 2
 | 
| -    Dependency.__init__(self, None, None, None, None, True, None, None, None,
 | 
| +    Dependency.__init__(self, None, None, None, True, None, None, None,
 | 
|                          'unused', True, None)
 | 
|      self._options = options
 | 
|      if options.deps_os:
 | 
| @@ -1225,7 +1218,6 @@ it or fix the checkout.
 | 
|        try:
 | 
|          deps_to_add.append(Dependency(
 | 
|              self, s['name'], s['url'],
 | 
| -            s.get('safesync_url', None),
 | 
|              s.get('managed', True),
 | 
|              s.get('custom_deps', {}),
 | 
|              s.get('custom_vars', {}),
 | 
| @@ -1276,12 +1268,11 @@ it or fix the checkout.
 | 
|      return client
 | 
|  
 | 
|    def SetDefaultConfig(self, solution_name, deps_file, solution_url,
 | 
| -                       safesync_url, managed=True, cache_dir=None):
 | 
| +                       managed=True, cache_dir=None):
 | 
|      self.SetConfig(self.DEFAULT_CLIENT_FILE_TEXT % {
 | 
|        'solution_name': solution_name,
 | 
|        'solution_url': solution_url,
 | 
|        'deps_file': deps_file,
 | 
| -      'safesync_url' : safesync_url,
 | 
|        'managed': managed,
 | 
|        'cache_dir': cache_dir,
 | 
|      })
 | 
| @@ -1324,13 +1315,10 @@ it or fix the checkout.
 | 
|      revision_overrides = {}
 | 
|      if self._options.head:
 | 
|        return revision_overrides
 | 
| -    # Do not check safesync_url if one or more --revision flag is specified.
 | 
|      if not self._options.revisions:
 | 
|        for s in self.dependencies:
 | 
|          if not s.managed:
 | 
|            self._options.revisions.append('%s@unmanaged' % s.name)
 | 
| -        elif s.safesync_url:
 | 
| -          self._ApplySafeSyncRev(dep=s)
 | 
|      if not self._options.revisions:
 | 
|        return revision_overrides
 | 
|      solutions_names = [s.name for s in self.dependencies]
 | 
| @@ -1344,26 +1332,6 @@ it or fix the checkout.
 | 
|        index += 1
 | 
|      return revision_overrides
 | 
|  
 | 
| -  def _ApplySafeSyncRev(self, dep):
 | 
| -    """Finds a valid revision from the content of the safesync_url and apply it
 | 
| -    by appending revisions to the revision list. Throws if revision appears to
 | 
| -    be invalid for the given |dep|."""
 | 
| -    assert len(dep.safesync_url) > 0
 | 
| -    handle = urllib.urlopen(dep.safesync_url)
 | 
| -    rev = handle.read().strip()
 | 
| -    handle.close()
 | 
| -    if not rev:
 | 
| -      raise gclient_utils.Error(
 | 
| -          'It appears your safesync_url (%s) is not working properly\n'
 | 
| -          '(as it returned an empty response). Check your config.' %
 | 
| -          dep.safesync_url)
 | 
| -    scm = gclient_scm.CreateSCM(
 | 
| -        dep.url, dep.root.root_dir, dep.name, self.outbuf)
 | 
| -    safe_rev = scm.GetUsableRev(rev, self._options)
 | 
| -    if self._options.verbose:
 | 
| -      print('Using safesync_url revision: %s.\n' % safe_rev)
 | 
| -    self._options.revisions.append('%s@%s' % (dep.name, safe_rev))
 | 
| -
 | 
|    def RunOnDeps(self, command, args, ignore_requirements=False, progress=True):
 | 
|      """Runs a command on each dependency in a client and its dependencies.
 | 
|  
 | 
| @@ -1539,7 +1507,6 @@ it or fix the checkout.
 | 
|              'solution_name': d.name,
 | 
|              'solution_url': d.url,
 | 
|              'deps_file': d.deps_file,
 | 
| -            'safesync_url' : d.safesync_url or '',
 | 
|              'managed': d.managed,
 | 
|              'solution_deps': ''.join(custom_deps),
 | 
|          }
 | 
| @@ -1705,7 +1672,7 @@ def CMDroot(parser, args):
 | 
|      print(os.path.abspath('.'))
 | 
|  
 | 
|  
 | 
| -@subcommand.usage('[url] [safesync url]')
 | 
| +@subcommand.usage('[url]')
 | 
|  def CMDconfig(parser, args):
 | 
|    """Creates a .gclient file in the current directory.
 | 
|  
 | 
| @@ -1764,10 +1731,7 @@ def CMDconfig(parser, args):
 | 
|          parser.error('Do not include relative path components in --name.')
 | 
|  
 | 
|      deps_file = options.deps_file
 | 
| -    safesync_url = ''
 | 
| -    if len(args) > 1:
 | 
| -      safesync_url = args[1]
 | 
| -    client.SetDefaultConfig(name, deps_file, base_url, safesync_url,
 | 
| +    client.SetDefaultConfig(name, deps_file, base_url,
 | 
|                              managed=not options.unmanaged,
 | 
|                              cache_dir=options.cache_dir)
 | 
|    client.SaveConfig()
 | 
| @@ -1856,8 +1820,7 @@ def CMDsync(parser, args):
 | 
|                           'format src@rev. The src@ part is optional and can be '
 | 
|                           'skipped. -r can be used multiple times when .gclient '
 | 
|                           'has multiple solutions configured and will work even '
 | 
| -                         'if the src@ part is skipped. Note that specifying '
 | 
| -                         '--revision means your safesync_url gets ignored.')
 | 
| +                         'if the src@ part is skipped.')
 | 
|    parser.add_option('--with_branch_heads', action='store_true',
 | 
|                      help='Clone git "branch_heads" refspecs in addition to '
 | 
|                           'the default refspecs. This adds about 1/2GB to a '
 | 
| @@ -1865,8 +1828,7 @@ def CMDsync(parser, args):
 | 
|    parser.add_option('--with_tags', action='store_true',
 | 
|                      help='Clone git tags in addition to the default refspecs.')
 | 
|    parser.add_option('-H', '--head', action='store_true',
 | 
| -                    help='skips any safesync_urls specified in '
 | 
| -                         'configured solutions and sync to head instead')
 | 
| +                    help='DEPRECATED: only made sense with safesync urls.')
 | 
|    parser.add_option('-D', '--delete_unversioned_trees', action='store_true',
 | 
|                      help='Deletes from the working copy any dependencies that '
 | 
|                           'have been removed since the last sync, as long as '
 | 
| 
 |