| # Copyright 2020 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Stage the Chromium checkout to update CTS test version.""" |
| |
| import json |
| import os |
| import re |
| |
| SRC_DIR = os.path.abspath( |
| os.path.join(os.path.dirname(__file__), os.pardir, os.pardir)) |
| |
| TOOLS_DIR = os.path.join('android_webview', 'tools') |
| |
| CONFIG_FILE = os.path.join('cts_config', 'webview_cts_gcs_path.json') |
| CONFIG_PATH = os.path.join(SRC_DIR, TOOLS_DIR, CONFIG_FILE) |
| |
| |
| class CTSConfig: |
| """Represents a CTS config file.""" |
| |
| def __init__(self, file_path=CONFIG_PATH): |
| """Constructs a representation of the CTS config file. |
| |
| Only read operations are provided by this object. Users should edit the |
| file manually for any modifications. |
| |
| Args: |
| file_path: Path to file. |
| """ |
| self._path = os.path.abspath(file_path) |
| with open(self._path) as f: |
| self._config = json.load(f) |
| |
| def save(self): |
| with open(self._path, 'w') as file: |
| json.dump(self._config, file, indent=2) |
| file.write("\n") |
| |
| def get_platforms(self): |
| return sorted(self._config.keys()) |
| |
| def get_archs(self, platform): |
| return sorted(self._config[platform]['arch'].keys()) |
| |
| def get_git_tag_prefix(self, platform): |
| return self._config[platform]['git']['tag_prefix'] |
| |
| def iter_platforms(self): |
| for p in self.get_platforms(): |
| yield p |
| |
| def iter_platform_archs(self): |
| for p in self.get_platforms(): |
| for a in self.get_archs(p): |
| yield p, a |
| |
| def set_release_version(self, platform, arch, release): |
| pattern = re.compile(r'(?<=_r)\d*') |
| |
| def update_release_version(field): |
| return pattern.sub(str(release), |
| self._config[platform]['arch'][arch][field]) |
| |
| self._config[platform]['arch'][arch] = { |
| 'filename': update_release_version('filename'), |
| '_origin': update_release_version('_origin'), |
| 'unzip_dir': update_release_version('unzip_dir'), |
| } |
| |
| |
| class ChromiumRepoHelper: |
| """Performs operations on Chromium checkout.""" |
| |
| def __init__(self, root_dir=SRC_DIR): |
| self._root_dir = os.path.abspath(root_dir) |
| |
| def rebase(self, *rel_path_parts): |
| """Construct absolute path from parts relative to root_dir. |
| |
| Args: |
| rel_path_parts: Parts of the root relative path. |
| |
| Returns: |
| The absolute path. |
| """ |
| return os.path.join(self._root_dir, *rel_path_parts) |