4c5ee48f47
* Mostly involves changing print to be a function, and adding "from __future__ import print_function" for copatibility. Change-Id: I3129233726e0116a348753a2e2bb68806a08668c Signed-off-by: Chirayu Desai <cdesai@cyanogenmod.org>
108 lines
2.9 KiB
Python
Executable File
108 lines
2.9 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
from __future__ import print_function
|
|
|
|
import subprocess
|
|
import getopt
|
|
import sys
|
|
|
|
|
|
SSH_USER = 'bot'
|
|
SSH_HOST = 'localhost'
|
|
SSH_PORT = 29418
|
|
SSH_COMMAND = 'ssh %s@%s -p %d gerrit approve ' % (SSH_USER, SSH_HOST, SSH_PORT)
|
|
FAILURE_SCORE = '--code-review=-2'
|
|
FAILURE_MESSAGE = 'This commit message does not match the standard.' \
|
|
+ ' Please correct the commit message and upload a replacement patch.'
|
|
PASS_SCORE = '--code-review=0'
|
|
PASS_MESSAGE = ''
|
|
|
|
def main():
|
|
change = None
|
|
project = None
|
|
branch = None
|
|
commit = None
|
|
patchset = None
|
|
|
|
try:
|
|
opts, args = getopt.getopt(sys.argv[1:], '', \
|
|
['change=', 'project=', 'branch=', 'commit=', 'patchset='])
|
|
except getopt.GetoptError as err:
|
|
print('Error: %s' % (err))
|
|
usage()
|
|
sys.exit(-1)
|
|
|
|
for arg, value in opts:
|
|
if arg == '--change':
|
|
change = value
|
|
elif arg == '--project':
|
|
project = value
|
|
elif arg == '--branch':
|
|
branch = value
|
|
elif arg == '--commit':
|
|
commit = value
|
|
elif arg == '--patchset':
|
|
patchset = value
|
|
else:
|
|
print('Error: option %s not recognized' % (arg))
|
|
usage()
|
|
sys.exit(-1)
|
|
|
|
if change == None or project == None or branch == None \
|
|
or commit == None or patchset == None:
|
|
usage()
|
|
sys.exit(-1)
|
|
|
|
command = 'git cat-file commit %s' % (commit)
|
|
status, output = subprocess.getstatusoutput(command)
|
|
|
|
if status != 0:
|
|
print('Error running \'%s\'. status: %s, output:\n\n%s' % \
|
|
(command, status, output))
|
|
sys.exit(-1)
|
|
|
|
commitMessage = output[(output.find('\n\n')+2):]
|
|
commitLines = commitMessage.split('\n')
|
|
|
|
if len(commitLines) > 1 and len(commitLines[1]) != 0:
|
|
fail(commit, 'Invalid commit summary. The summary must be ' \
|
|
+ 'one line followed by a blank line.')
|
|
|
|
i = 0
|
|
for line in commitLines:
|
|
i = i + 1
|
|
if len(line) > 80:
|
|
fail(commit, 'Line %d is over 80 characters.' % i)
|
|
|
|
passes(commit)
|
|
|
|
def usage():
|
|
print('Usage:\n')
|
|
print(sys.argv[0] + ' --change <change id> --project <project name> ' \
|
|
+ '--branch <branch> --commit <sha1> --patchset <patchset id>')
|
|
|
|
def fail( commit, message ):
|
|
command = SSH_COMMAND + FAILURE_SCORE + ' -m \\\"' \
|
|
+ _shell_escape( FAILURE_MESSAGE + '\n\n' + message) \
|
|
+ '\\\" ' + commit
|
|
subprocess.getstatusoutput(command)
|
|
sys.exit(1)
|
|
|
|
def passes( commit ):
|
|
command = SSH_COMMAND + PASS_SCORE + ' -m \\\"' \
|
|
+ _shell_escape(PASS_MESSAGE) + ' \\\" ' + commit
|
|
subprocess.getstatusoutput(command)
|
|
|
|
def _shell_escape(x):
|
|
s = ''
|
|
for c in x:
|
|
if c in '\n':
|
|
s = s + '\\\"$\'\\n\'\\\"'
|
|
else:
|
|
s = s + c
|
|
return s
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
|