diff --git a/tools/scripts/git_submodule.py b/tools/scripts/git_submodule.py index 6d2fbd1eb8439670b45655fdbd7932ba296578ed..a364ef650e1421c940b090fde6a38259a8cbd0b1 100644 --- a/tools/scripts/git_submodule.py +++ b/tools/scripts/git_submodule.py @@ -85,6 +85,9 @@ class DEPSParser: submodule = Submodule(subdir, repo) submodule.os = os submodule.shasum = shasum + if not submodule.matchesOS(): + print '-- skipping ' + submodule.path + ' for this operating system. --' + continue if not submodule.shasum: # We need to parse the svn branch and revision number. ref = repo @@ -116,24 +119,6 @@ class DEPSParser: submodules.append(submodule) return submodules - def sanityCheckModules(self, submodules): - submodule_dict = {} - for submodule in submodules: - if not submodule.matchesOS(): - print '-- skipping ' + submodule.path + ' for this operating system. --' - continue - if submodule.path in submodule_dict: - prev_module = submodule_dict[submodule.path] - # We might have to create our own DEPS file if different platforms use different branches, - # but for now it should be safe to select the latest revision from the requirements. - if submodule.shasum or prev_module.revision >= submodule.revision: - continue - if prev_module.ref != submodule.ref: - sys.exit('ERROR: branch mismatch for ' + submodule.path + '(' + prev_module.ref + ' vs ' + submodule.ref + ')') - print('Duplicate submodule ' + submodule.path + '. Using latest revison ' + str(submodule.revision) + '.') - submodule_dict[submodule.path] = submodule - return list(submodule_dict.values()) - def parse(self, deps_content): exec(deps_content, self.global_scope, self.local_scope) @@ -141,19 +126,7 @@ class DEPSParser: submodules.extend(self.createSubmodulesFromScope(self.local_scope['deps'], 'all')) for os_dep in self.local_scope['deps_os']: submodules.extend(self.createSubmodulesFromScope(self.local_scope['deps_os'][os_dep], os_dep)) - - return self.sanityCheckModules(submodules) - - def parseFile(self, deps_file_name): - currentDir = os.getcwd() - if not os.path.isfile(deps_file_name): - return [] - deps_file = open(deps_file_name) - deps_content = deps_file.read().decode('utf-8') - deps_file.close() - return self.parse(deps_content) - - + return submodules class Submodule: def __init__(self, path='', url='', shasum='', os=[], ref=''): @@ -186,9 +159,11 @@ class Submodule: error = 0 if self.ref: # Fetch the ref we parsed from the DEPS file. - val = subprocessCall(['git', 'fetch', 'origin', self.ref]) - if val != 0: - sys.exit("Could not fetch branch from upstream " + self.ref) + error = subprocessCall(['git', 'fetch', 'origin', self.ref]) + if error != 0: + print('ERROR: Could not fetch from upstream branch ' + self.ref) + return error + error = subprocessCall(['git', 'checkout', 'FETCH_HEAD']); search_string = '' diff --git a/tools/scripts/version_resolver.py b/tools/scripts/version_resolver.py index 94ba9e1ab11d41896177cbdd0a14c3338717c3cf..b52b8f501131d8876b5e2352df6dc820781550b8 100644 --- a/tools/scripts/version_resolver.py +++ b/tools/scripts/version_resolver.py @@ -42,6 +42,7 @@ ############################################################################# import os +import subprocess import sys import json import urllib2 @@ -73,6 +74,36 @@ def readReleaseChannels(): channels[os].append({ 'channel': ver['channel'], 'version': ver['version'], 'branch': ver['true_branch'] }) return channels +def sanityCheckModules(submodules): + submodule_dict = {} + sys.stdout.write('\nverifying submodule refs.') + for submodule in submodules: + sys.stdout.flush() + if submodule.path in submodule_dict: + prev_module = submodule_dict[submodule.path] + # We might have to create our own DEPS file if different platforms use different branches, + # but for now it should be safe to select the latest revision from the requirements. + if submodule.shasum or prev_module.revision >= submodule.revision: + continue + if prev_module.ref != submodule.ref: + # Ignore for Android which might lag behind. + if submodule.os == 'android': + continue + sys.exit('ERROR: branch mismatch for ' + submodule.path + '(' + prev_module.ref + ' vs ' + submodule.ref + ')') + print('Duplicate submodule ' + submodule.path + '. Using latest revison ' + str(submodule.revision) + '.') + if submodule.ref: + sys.stdout.write('.') + result = subprocess.check_output(['git', 'ls-remote', submodule.url, submodule.ref]) + # Fallback to git shasum if the parsed remote ref does not exist in the git repository. + if submodule.ref not in result: + submodule.ref = submodule.revision = '' + if not submodule.shasum: + sys.exit('\nERROR: No valid remote found!') + sys.stdout.flush() + submodule_dict[submodule.path] = submodule + print('done.\n') + return list(submodule_dict.values()) + def readSubmodules(): response = urllib2.urlopen(base_deps_url + chromium_version + '/DEPS') svn_deps = response.read().strip() @@ -103,4 +134,4 @@ def readSubmodules(): # We use the git shasum as fallback. module.shasum = git.shasum - return list(submodule_dict.values()) + return sanityCheckModules(submodule_dict.values())