Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1730)

Unified Diff: gclient.py

Issue 7918027: Add a --unmanaged flag to gclient config to allow the main solution to be unmanaged by the scm. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: '' Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | gclient_scm.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gclient.py
===================================================================
--- gclient.py (revision 101995)
+++ gclient.py (working copy)
@@ -139,7 +139,7 @@
class Dependency(GClientKeywords, gclient_utils.WorkItem):
"""Object that represents a dependency checkout."""
- def __init__(self, parent, name, url, safesync_url, custom_deps,
+ def __init__(self, parent, name, url, safesync_url, managed, custom_deps,
custom_vars, deps_file, should_process):
# Warning: this function can be called from any thread. Both
# self.dependencies and self.requirements are read and modified from
@@ -157,6 +157,13 @@
self.url = url
# These are only set in .gclient and not in DEPS files.
+ # 'managed' determines whether or not this dependency is synced/updated by
+ # gclient after gclient checks it out initially. The difference between
+ # 'managed' and 'should_process' (defined below) is that the user specifies
+ # 'managed' via the --unmanaged command-line flag or a .gclient config,
+ # where 'should_process' is dynamically set by gclient if it goes over its
+ # recursion limit and controls gclient's behavior so it does not misbehave.
+ self.managed = managed
self.custom_vars = custom_vars or {}
self.custom_deps = custom_deps or {}
self.deps_hooks = []
@@ -402,7 +409,7 @@
'Dependency %s specified more than once:\n %s\nvs\n %s' %
(name, tree[name].hierarchy(), self.hierarchy()))
self.dependencies.append(Dependency(self, name, url, None, None, None,
- self.deps_file, should_process))
+ None, self.deps_file, should_process))
logging.debug('Loaded: %s' % str(self))
# Arguments number differs from overridden method
@@ -662,6 +669,7 @@
{ "name" : "%(solution_name)s",
"url" : "%(solution_url)s",
"deps_file" : "%(deps_file)s",
+ "managed" : %(managed)s,
"custom_deps" : {
},
"safesync_url": "%(safesync_url)s",
@@ -673,6 +681,7 @@
{ "name" : "%(solution_name)s",
"url" : "%(solution_url)s",
"deps_file" : "%(deps_file)s",
+ "managed" : %(managed)s,
"custom_deps" : {
%(solution_deps)s },
"safesync_url": "%(safesync_url)s",
@@ -689,8 +698,8 @@
# Do not change previous behavior. Only solution level and immediate DEPS
# are processed.
self._recursion_limit = 2
- Dependency.__init__(self, None, None, None, None, None, None, 'unused',
- True)
+ Dependency.__init__(self, None, None, None, None, True, None, None,
+ 'unused', True)
self._options = options
if options.deps_os:
enforced_os = options.deps_os.split(',')
@@ -719,6 +728,7 @@
self.dependencies.append(Dependency(
self, s['name'], s['url'],
s.get('safesync_url', None),
+ s.get('managed', True),
s.get('custom_deps', {}),
s.get('custom_vars', {}),
s.get('deps_file', 'DEPS'),
@@ -748,12 +758,13 @@
return client
def SetDefaultConfig(self, solution_name, deps_file, solution_url,
- safesync_url):
+ safesync_url, managed=True):
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,
})
def _SaveEntries(self):
@@ -799,13 +810,14 @@
# 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.safesync_url:
- continue
- handle = urllib.urlopen(s.safesync_url)
- rev = handle.read().strip()
- handle.close()
- if len(rev):
- self._options.revisions.append('%s@%s' % (s.name, rev))
+ if not s.managed:
+ self._options.revisions.append('%s@unmanaged' % s.name)
+ elif s.safesync_url:
+ handle = urllib.urlopen(s.safesync_url)
+ rev = handle.read().strip()
+ handle.close()
+ if len(rev):
+ self._options.revisions.append('%s@%s' % (s.name, rev))
if not self._options.revisions:
return revision_overrides
solutions_names = [s.name for s in self.dependencies]
@@ -929,6 +941,7 @@
'solution_url': d.url,
'deps_file': d.deps_file,
'safesync_url' : d.safesync_url or '',
+ 'managed': d.managed,
'solution_deps': ''.join(custom_deps),
}
# Print the snapshot configuration file
@@ -1048,6 +1061,11 @@
parser.add_option('--deps-file', default='DEPS',
help='overrides the default name for the DEPS file for the'
'main solutions and all sub-dependencies')
+ parser.add_option('--unmanaged', action='store_true', default=False,
+ help='overrides the default behavior to make it possible '
+ 'to have the main solution untouched by gclient '
+ '(gclient will check out unmanaged dependencies but '
+ 'will never sync them)')
parser.add_option('--git-deps', action='store_true',
help='sets the deps file to ".DEPS.git" instead of "DEPS"')
(options, args) = parser.parse_args(args)
@@ -1073,7 +1091,8 @@
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, safesync_url,
+ managed=not options.unmanaged)
client.SaveConfig()
return 0
« no previous file with comments | « no previous file | gclient_scm.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698