| #!/usr/bin/env python3 |
| |
| # Copyright 2021 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| import shlex |
| import shutil |
| import subprocess |
| import tempfile |
| |
| _REPO_URL = "https://gitlab.freedesktop.org/xdg/xdgmime.git" |
| _FILES_TO_COPY = ( |
| "README", |
| "src/xdgmimealias.c", |
| "src/xdgmime.c", |
| "src/xdgmimecache.h", |
| "src/xdgmimeglob.h", |
| "src/xdgmimeicon.c", |
| "src/xdgmimeint.c", |
| "src/xdgmimemagic.c", |
| "src/xdgmimeparent.c", |
| "src/xdgmimealias.h", |
| "src/xdgmimecache.c", |
| "src/xdgmimeglob.c", |
| "src/xdgmime.h", |
| "src/xdgmimeicon.h", |
| "src/xdgmimeint.h", |
| "src/xdgmimemagic.h", |
| "src/xdgmimeparent.h", |
| ) |
| |
| _PATCHES = ("000-have-mmap.patch",) |
| |
| |
| def main(): |
| out_dir = os.path.dirname(os.path.realpath(__file__)) |
| |
| with open(os.path.join(out_dir, "README.chromium")) as readme_file: |
| _VERSION_PREFIX = "Version: " |
| for line in readme_file: |
| if not line.startswith(_VERSION_PREFIX): |
| continue |
| old_commit = line[len(_VERSION_PREFIX):].strip() |
| with tempfile.TemporaryDirectory() as staging_dir: |
| os.chdir(staging_dir) |
| |
| print(f"Cloning from {_REPO_URL}...") |
| subprocess.check_call([ |
| "git", |
| "clone", |
| _REPO_URL, |
| ".", |
| ]) |
| |
| for f in _FILES_TO_COPY: |
| shutil.copy(os.path.join(staging_dir, f), out_dir) |
| |
| new_commit = subprocess.check_output([ |
| "git", |
| "rev-parse", |
| "HEAD", |
| ]).decode("ascii").strip() |
| |
| # This is cargo-culted from depot_tool's roll_dep.py |
| log_command = ( |
| "git", |
| "log", |
| f"{old_commit}..{new_commit}", |
| "--date=short", |
| "--no-merges", |
| "--format=%ad %ae %s", |
| ) |
| diffs = subprocess.check_output(log_command).decode("utf-8") |
| |
| os.chdir(os.path.join(out_dir, "..", "..", "..")) |
| |
| for p in _PATCHES: |
| print(f"Applying patch {p}...") |
| with open(os.path.join(out_dir, "patches", p)) as patch_file: |
| subprocess.check_call(["patch", "-p1"], stdin=patch_file) |
| |
| print(f"Done! Updated from {old_commit} to {new_commit}") |
| print("Changes:") |
| print( |
| f"$ git log {old_commit[:9]}..{new_commit[:9]} " |
| f"--date=short --no-merges --format='%ad %ae %s'" |
| ) |
| print(diffs) |
| |
| |
| if __name__ == "__main__": |
| main() |