DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (909f6514015f)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
#! /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)