gecko-dev/gfx/angle/vendor_from_git.py

53 строки
1.6 KiB
Python

#! /usr/bin/env python3
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'!
merge_base_from = Path(dir_in_gecko, 'MERGE_BASE').read_text().split('\n')[0]
merge_base_from = merge_base_origin + '/' + 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()
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'\nCherries picked')
f.write(b'\n' + (b'=' * 80))
f.write(b'\nMerge base from: ' + merge_base_from.encode())
f.write(b'\n\n')
f.write(mb_info)