From e42137040a01272ae4c515aad3894221abc84b0f Mon Sep 17 00:00:00 2001 From: Edward Lemur Date: Thu, 21 Jun 2018 21:15:50 +0000 Subject: [PATCH] gclient: Make gclient respect unmanaged dependencies when syncing. gclient syncs unmanaged dependencies when '--revision' files are passed, regardless of whether the dependency appears in the revision flags or not. Bug: 853032 Change-Id: I66de0865e1103d92524f565f4392dae24a5648e1 Reviewed-on: https://chromium-review.googlesource.com/1105416 Reviewed-by: Aaron Gable Commit-Queue: Edward Lesmes --- gclient.py | 8 +++----- tests/gclient_smoketest.py | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/gclient.py b/gclient.py index 2ebadb023..a09c15dfe 100755 --- a/gclient.py +++ b/gclient.py @@ -622,7 +622,7 @@ class Dependency(gclient_utils.WorkItem, DependencySettings): parent=self, name=name, url=url, - managed=None, + managed=True, custom_deps=None, custom_vars=self.custom_vars, custom_hooks=None, @@ -855,6 +855,8 @@ class Dependency(gclient_utils.WorkItem, DependencySettings): file_list = [] if not options.nohooks else None revision_override = revision_overrides.pop( self.FuzzyMatchUrl(revision_overrides), None) + if not revision_override and not self.managed: + revision_override = 'unmanaged' if run_scm and self.url: # Create a shallow copy to mutate revision. options = copy.copy(options) @@ -1477,10 +1479,6 @@ it or fix the checkout. revision_overrides = {} if self._options.head: return revision_overrides - if not self._options.revisions: - for s in self.dependencies: - if not s.managed: - self._options.revisions.append('%s@unmanaged' % s.name) if not self._options.revisions: return revision_overrides solutions_names = [s.name for s in self.dependencies] diff --git a/tests/gclient_smoketest.py b/tests/gclient_smoketest.py index 45c68b95e..d2659a638 100755 --- a/tests/gclient_smoketest.py +++ b/tests/gclient_smoketest.py @@ -530,6 +530,26 @@ class GClientSmokeGIT(GClientSmokeBase): ['sync', '-v', '-v', '-v', '--revision', 'refs/changes/1212']) self.assertEquals(0, rc) + def testSyncUnmanaged(self): + if not self.enabled: + return + self.gclient([ + 'config', '--spec', + 'solutions=[{"name":"src", "url": "%s", "managed": False}]' % ( + self.git_base + 'repo_5')]) + self.gclient([ + 'sync', '--revision', 'src@' + self.githash('repo_5', 2)]) + self.gclient([ + 'sync', '--revision', 'src/repo1@%s' % self.githash('repo_1', 1)]) + # src is unmanaged, so gclient shouldn't have updated it. It should've + # stayed synced at @2 + tree = self.mangle_git_tree(('repo_5@2', 'src'), + ('repo_1@1', 'src/repo1'), + ('repo_2@1', 'src/repo2')) + tree['src/git_pre_deps_hooked'] = 'git_pre_deps_hooked' + self.maxDiff = None + self.assertTree(tree) + def testSyncUrl(self): if not self.enabled: return