mirror of https://github.com/zulip/zulip.git
62 lines
1.8 KiB
Python
Executable File
62 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import shlex
|
|
import subprocess
|
|
import sys
|
|
from typing import List
|
|
|
|
|
|
def exit(message: str) -> None:
|
|
print('PROBLEM!')
|
|
print(message)
|
|
sys.exit(1)
|
|
|
|
def run(command: List[str]) -> None:
|
|
print('\n>>> ' + ' '.join(map(shlex.quote, command)))
|
|
subprocess.check_call(command)
|
|
|
|
def check_output(command: List[str]) -> str:
|
|
return subprocess.check_output(command).decode('ascii')
|
|
|
|
def get_git_branch() -> str:
|
|
command = ['git', 'rev-parse', '--abbrev-ref', 'HEAD']
|
|
output = check_output(command)
|
|
return output.strip()
|
|
|
|
def check_git_pristine() -> None:
|
|
command = ['git', 'status', '--porcelain']
|
|
output = check_output(command)
|
|
if output.strip():
|
|
exit('Git is not pristine:\n' + output)
|
|
|
|
def ensure_on_clean_master() -> None:
|
|
branch = get_git_branch()
|
|
if branch != 'master':
|
|
exit(f'You are still on a feature branch: {branch}')
|
|
check_git_pristine()
|
|
run(['git', 'fetch', 'upstream', 'master'])
|
|
run(['git', 'rebase', 'upstream/master'])
|
|
|
|
def create_pull_branch(pull_id: int) -> None:
|
|
run(['git', 'fetch', 'upstream', f'pull/{pull_id}/head'])
|
|
run(['git', 'checkout', '-B', f'review-{pull_id}', 'FETCH_HEAD'])
|
|
run(['git', 'rebase', 'upstream/master'])
|
|
run(['git', 'log', 'upstream/master..', '--oneline'])
|
|
run(['git', 'diff', 'upstream/master..', '--name-status'])
|
|
|
|
print()
|
|
print(f'PR: {pull_id}')
|
|
print(subprocess.check_output(['git', 'log', 'HEAD~..',
|
|
'--pretty=format:Author: %an']))
|
|
|
|
def review_pr() -> None:
|
|
try:
|
|
pull_id = int(sys.argv[1])
|
|
except Exception:
|
|
exit('please provide an integer pull request id')
|
|
|
|
ensure_on_clean_master()
|
|
create_pull_branch(pull_id)
|
|
|
|
if __name__ == '__main__':
|
|
review_pr()
|