зеркало из https://github.com/mozilla/gecko-dev.git
52 строки
1.6 KiB
Python
52 строки
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_now(' ', args)
|
|
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)
|