53 lines
1.4 KiB
Python
Executable file
53 lines
1.4 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# Copyright 2015 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import sys
|
|
import subprocess
|
|
|
|
"""Detect forced pushes (on the client) and prompt the user before going on."""
|
|
|
|
|
|
def read_from_tty():
|
|
try:
|
|
import posix # No way to do this on Windows, just give up there.
|
|
with open('/dev/tty') as tty_fd:
|
|
return tty_fd.readline().strip()
|
|
except:
|
|
return None
|
|
|
|
|
|
def Main():
|
|
# Allow force pushes in repos forked elsewhere (e.g. googlesource).
|
|
remote_url = sys.argv[2] if len(sys.argv) >= 2 else ''
|
|
if 'github.com' not in remote_url:
|
|
return 0
|
|
|
|
parts = sys.stdin.readline().split()
|
|
if len(parts) < 4:
|
|
return 0
|
|
local_ref, local_sha, remote_ref, remote_sha = parts
|
|
cmd = ['git', 'rev-list', '--count', remote_sha, '--not', local_sha,
|
|
'--max-count=1']
|
|
|
|
is_force_push = '0'
|
|
try:
|
|
is_force_push = subprocess.check_output(cmd).strip()
|
|
except(subprocess.CalledProcessError):
|
|
return 0
|
|
|
|
if is_force_push != '0':
|
|
sys.stderr.write('\033[31mWARNING: Force pushing will break the ' +
|
|
'github.com -> googlesource.com mirroring.\033[0m\n' +
|
|
'This is almost certainly a bad idea.\n')
|
|
|
|
sys.stderr.write('Type y to continue: ')
|
|
if read_from_tty() != 'y':
|
|
return 1
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(Main())
|