diff options
Diffstat (limited to '')
-rw-r--r-- | gfx/angle/vendor_from_git.py | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/gfx/angle/vendor_from_git.py b/gfx/angle/vendor_from_git.py new file mode 100644 index 0000000000..95ea392866 --- /dev/null +++ b/gfx/angle/vendor_from_git.py @@ -0,0 +1,100 @@ +#! /usr/bin/env python3 +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +assert __name__ != "__main__" + +""" +Any time we vendor[1] from an external git repo, we want to keep a record of the csets +we're pulling from. + +This script leaves a record of the merge-base reference tip and cherry-picks that we pull +into Gecko. (such as gfx/angle/cherry_picks.txt) +""" + +from pathlib import * +import subprocess +import sys + +# -- + + +def print_now(*args): + print(*args) + sys.stdout.flush() + + +def run_checked(*args, **kwargs): + print(" ", args) + sys.stdout.flush() + return subprocess.run(args, check=True, **kwargs) + + +# -- + + +def record_cherry_picks(dir_in_gecko, merge_base_origin): + # merge_base_origin is not always 'origin'! + base_merge_base_from = Path(dir_in_gecko, "MERGE_BASE").read_text().split("\n")[0] + merge_base_from = merge_base_origin + "/" + base_merge_base_from + + assert "/" in merge_base_from, "Please specify a reference tip from a remote." + log_path = Path(dir_in_gecko, "cherry_picks.txt") + print_now("Logging cherry picks to {}.".format(log_path)) + + merge_base = ( + run_checked( + "git", "merge-base", "HEAD", merge_base_from, stdout=subprocess.PIPE + ) + .stdout.decode() + .strip() + ) + merge_base_readable = ( + run_checked( + "git", + "show", + "-s", + "--format=commit %H %cd", + merge_base, + stdout=subprocess.PIPE, + ) + .stdout.decode() + .strip() + ) + + mb_info = run_checked( + "git", "log", "{}~1..{}".format(merge_base, merge_base), stdout=subprocess.PIPE + ).stdout + cherries = run_checked( + "git", "log", merge_base + "..", stdout=subprocess.PIPE + ).stdout + + with open(log_path, "wb") as f: + f.write(cherries) + f.write(b"\nAbove: cherries picked") + f.write(b"\n" + (b"=" * 80)) + f.write(b"\nBelow: merge base from: " + merge_base_from.encode()) + f.write(b"\n\n") + f.write(mb_info) + + # The below supports only a single commit-alert task. If/when we add another task, this + # will need to be improved. + print_now("Updating moz.yaml") + moz_yaml_file = Path(dir_in_gecko, "moz.yaml") + with open(moz_yaml_file, "r") as f: + moz_yaml_contents = f.readlines() + with open(moz_yaml_file, "wb") as f: + for line in moz_yaml_contents: + + def prefix(): + return line[0 : line.index(": ") + 2].encode() + + if "branch: " in line: + f.write(prefix() + base_merge_base_from.encode() + b"\n") + elif "release: " in line: + f.write(prefix() + merge_base_readable.encode() + b"\n") + elif "revision: " in line: + f.write(prefix() + merge_base.encode() + b"\n") + else: + f.write(line.encode()) |