diff --git a/tools_webrtc/autoroller/roll_deps.py b/tools_webrtc/autoroller/roll_deps.py index b8af88a50e..1abb10d3ab 100755 --- a/tools_webrtc/autoroller/roll_deps.py +++ b/tools_webrtc/autoroller/roll_deps.py @@ -85,8 +85,11 @@ DepsEntry = collections.namedtuple('DepsEntry', 'path url revision') ChangedDep = collections.namedtuple('ChangedDep', 'path url current_rev new_rev') CipdDepsEntry = collections.namedtuple('CipdDepsEntry', 'path packages') +VersionEntry = collections.namedtuple('VersionEntry', 'version') ChangedCipdPackage = collections.namedtuple( 'ChangedCipdPackage', 'path package current_version new_version') +ChangedVersionEntry = collections.namedtuple( + 'ChangedVersionEntry', 'path current_version new_version') ChromiumRevisionUpdate = collections.namedtuple('ChromiumRevisionUpdate', ('current_chromium_rev ' @@ -148,7 +151,7 @@ def _RunCommand(command, logging.debug('CMD: %s CWD: %s', ' '.join(command), working_dir) env = os.environ.copy() if extra_env: - assert all(isinstance(value, str) for value in list(extra_env.values())) + assert all(isinstance(value, str) for value in extra_env.values()) logging.debug('extra env: %s', extra_env) env.update(extra_env) p = subprocess.Popen(command, @@ -247,7 +250,7 @@ def GetMatchingDepsEntries(depsentry_dict, dir_path): A list of DepsEntry objects. """ result = [] - for path, depsentry in list(depsentry_dict.items()): + for path, depsentry in depsentry_dict.items(): if path == dir_path: result.append(depsentry) else: @@ -262,7 +265,7 @@ def BuildDepsentryDict(deps_dict): result = {} def AddDepsEntries(deps_subdict): - for path, dep in list(deps_subdict.items()): + for path, dep in deps_subdict.items(): if path in result: continue if not isinstance(dep, dict): @@ -275,9 +278,19 @@ def BuildDepsentryDict(deps_dict): url, revision = dep['url'].split('@') result[path] = DepsEntry(path, url, revision) + def AddVersionEntry(vars_subdict): + for key, value in vars_subdict.items(): + if key in result: + continue + if not key.endswith('_version'): + continue + key = re.sub('_version$', '', key) + result[key] = VersionEntry(value) + AddDepsEntries(deps_dict['deps']) for deps_os in ['win', 'mac', 'unix', 'android', 'ios', 'unix']: AddDepsEntries(deps_dict.get('deps_os', {}).get(deps_os, {})) + AddVersionEntry(deps_dict.get('vars', {})) return result @@ -305,6 +318,12 @@ def _FindChangedCipdPackages(path, old_pkgs, new_pkgs): new_version) +def _FindChangedVars(name, old_version, new_version): + if old_version != new_version: + logging.debug('Roll dependency %s to %s', name, new_version) + yield ChangedVersionEntry(name, old_version, new_version) + + def _FindNewDeps(old, new): """ Gather dependencies only in `new` and return corresponding paths. """ old_entries = set(BuildDepsentryDict(old)) @@ -400,7 +419,7 @@ def CalculateChangedDeps(webrtc_deps, new_cr_deps): result = [] webrtc_entries = BuildDepsentryDict(webrtc_deps) new_cr_entries = BuildDepsentryDict(new_cr_deps) - for path, webrtc_deps_entry in list(webrtc_entries.items()): + for path, webrtc_deps_entry in webrtc_entries.items(): if path in DONT_AUTOROLL_THESE: continue cr_deps_entry = new_cr_entries.get(path) @@ -413,6 +432,12 @@ def CalculateChangedDeps(webrtc_deps, new_cr_deps): cr_deps_entry.packages)) continue + if isinstance(cr_deps_entry, VersionEntry): + result.extend( + _FindChangedVars(path, webrtc_deps_entry.version, + cr_deps_entry.version)) + continue + # Use the revision from Chromium's DEPS file. new_rev = cr_deps_entry.revision assert webrtc_deps_entry.url == cr_deps_entry.url, ( @@ -488,6 +513,9 @@ def GenerateCommitMessage( if isinstance(c, ChangedCipdPackage): commit_msg.append('* %s: %s..%s' % (c.path, c.current_version, c.new_version)) + elif isinstance(c, ChangedVersionEntry): + commit_msg.append('* %s_vesion: %s..%s' % + (c.path, c.current_version, c.new_version)) else: commit_msg.append('* %s: %s/+log/%s..%s' % (c.path, c.url, c.current_rev[0:10], c.new_rev[0:10])) @@ -547,6 +575,9 @@ def UpdateDepsFile(deps_filename, rev_update, changed_deps, new_cr_content): # Update each individual DEPS entry. for dep in changed_deps: + if isinstance(dep, ChangedVersionEntry): + deps_content = deps_content.replace(dep.current_version, dep.new_version) + continue local_dep_dir = os.path.join(CHECKOUT_ROOT_DIR, dep.path) if not os.path.isdir(local_dep_dir): raise RollError( diff --git a/tools_webrtc/autoroller/unittests/roll_deps_test.py b/tools_webrtc/autoroller/unittests/roll_deps_test.py index b58f319eec..1b201616ef 100755 --- a/tools_webrtc/autoroller/unittests/roll_deps_test.py +++ b/tools_webrtc/autoroller/unittests/roll_deps_test.py @@ -195,20 +195,24 @@ class TestRollChromiumRevision(unittest.TestCase): BUILD_NEW_REV) changed_deps = CalculateChangedDeps(webrtc_deps, new_cr_deps) - self.assertEqual(len(changed_deps), 3) - self.assertEqual(changed_deps[0].path, 'src/build') - self.assertEqual(changed_deps[0].current_rev, BUILD_OLD_REV) - self.assertEqual(changed_deps[0].new_rev, BUILD_NEW_REV) + self.assertEqual(len(changed_deps), 4) + self.assertEqual(changed_deps[0].path, 'fuchsia') + self.assertEqual(changed_deps[0].current_version, 'version:10.20221201.3.1') + self.assertEqual(changed_deps[0].new_version, 'version:11.20230207.1.1') - self.assertEqual(changed_deps[1].path, 'src/buildtools/linux64') - self.assertEqual(changed_deps[1].package, 'gn/gn/linux-amd64') - self.assertEqual(changed_deps[1].current_version, + self.assertEqual(changed_deps[1].path, 'src/build') + self.assertEqual(changed_deps[1].current_rev, BUILD_OLD_REV) + self.assertEqual(changed_deps[1].new_rev, BUILD_NEW_REV) + + self.assertEqual(changed_deps[2].path, 'src/buildtools/linux64') + self.assertEqual(changed_deps[2].package, 'gn/gn/linux-amd64') + self.assertEqual(changed_deps[2].current_version, 'git_revision:69ec4fca1fa69ddadae13f9e6b7507efa0675263') - self.assertEqual(changed_deps[1].new_version, 'git_revision:new-revision') + self.assertEqual(changed_deps[2].new_version, 'git_revision:new-revision') - self.assertEqual(changed_deps[2].path, 'src/third_party/depot_tools') - self.assertEqual(changed_deps[2].current_rev, DEPOTTOOLS_OLD_REV) - self.assertEqual(changed_deps[2].new_rev, DEPOTTOOLS_NEW_REV) + self.assertEqual(changed_deps[3].path, 'src/third_party/depot_tools') + self.assertEqual(changed_deps[3].current_rev, DEPOTTOOLS_OLD_REV) + self.assertEqual(changed_deps[3].new_rev, DEPOTTOOLS_NEW_REV) def testWithDistinctDeps(self): """Check CalculateChangedDeps works when deps are added/removed.""" @@ -252,8 +256,9 @@ class TestRollChromiumRevision(unittest.TestCase): webrtc_deps = ParseLocalDepsFile(self._webrtc_depsfile) new_cr_deps = ParseLocalDepsFile(self._new_cr_depsfile_android) _, other_paths = FindRemovedDeps(webrtc_deps, new_cr_deps) - self.assertEqual(other_paths, - ['src/buildtools/linux64', 'src/third_party/depot_tools']) + self.assertEqual( + other_paths, + ['fuchsia', 'src/buildtools/linux64', 'src/third_party/depot_tools']) def testExpectedDepsIsNotReportedMissing(self): """Some deps musn't be seen as missing, even if absent from Chromium.""" diff --git a/tools_webrtc/autoroller/unittests/testdata/roll_deps/DEPS b/tools_webrtc/autoroller/unittests/testdata/roll_deps/DEPS index c39af68a9e..a6f577527d 100644 --- a/tools_webrtc/autoroller/unittests/testdata/roll_deps/DEPS +++ b/tools_webrtc/autoroller/unittests/testdata/roll_deps/DEPS @@ -3,6 +3,7 @@ vars = { 'chromium_git': 'https://chromium.googlesource.com', 'chromium_revision': '1b9c098a08e40114e44b6c1ec33ddf95c40b901d', + 'fuchsia_version': 'version:10.20221201.3.1', } deps = { diff --git a/tools_webrtc/autoroller/unittests/testdata/roll_deps/DEPS.chromium.new b/tools_webrtc/autoroller/unittests/testdata/roll_deps/DEPS.chromium.new index 7d40e425d5..6cd6b04b64 100644 --- a/tools_webrtc/autoroller/unittests/testdata/roll_deps/DEPS.chromium.new +++ b/tools_webrtc/autoroller/unittests/testdata/roll_deps/DEPS.chromium.new @@ -5,6 +5,7 @@ vars = { # This is updated compared to the DEPS file. 'depot_tools_revision': '1206a353e40abb70d8454eb9af53db0ad10b713c', + 'fuchsia_version': 'version:11.20230207.1.1', } deps = {