mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-29 13:39:19 +00:00
1
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import getopt
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
import pdb
|
||||
|
||||
def usage():
|
||||
print >> sys.stderr, 'checks in all open files in the default changelist, aggregating change comments from the provided list'
|
||||
print >> sys.stderr, ''
|
||||
print >> sys.stderr, 'usage:'
|
||||
print >> sys.stderr, sys.argv[0] + ' [-c p4client] [-p p4port] [-u p4user] [-d changelog (prefix)] [--changes "list of change numbers"]'
|
||||
print >> sys.stderr, ''
|
||||
print >> sys.stderr, 'the list of changes must either be the last argument, or be quoted, so '
|
||||
print >> sys.stderr, sys.argv[0] + ' ... --changes 1 2 3 [ok] '
|
||||
print >> sys.stderr, sys.argv[0] + ' ... --changes "1 2 3" ... [ok]'
|
||||
print >> sys.stderr, sys.argv[0] + ' ... -changes 1 2 3 ... [bad]'
|
||||
|
||||
def main():
|
||||
try:
|
||||
opts, args = getopt.getopt( sys.argv[1:], "c:p:u:d:", [ "changes=" ] )
|
||||
except getopt.GetoptError, err:
|
||||
print >> sys.stderr, str(err)
|
||||
usage()
|
||||
sys.exit(-1)
|
||||
|
||||
p4user = None
|
||||
p4client = None
|
||||
p4port = None
|
||||
changelog = None
|
||||
changes = []
|
||||
p4cmdbase = [ "p4" ]
|
||||
for opt, arg in opts:
|
||||
if opt == "-c":
|
||||
p4cmdbase.extend( [ opt, arg ] )
|
||||
p4client = arg
|
||||
elif opt == "-p":
|
||||
p4cmdbase.extend( [ opt, arg ] )
|
||||
p4port = arg
|
||||
elif opt == "-u":
|
||||
p4cmdbase.extend( [ opt, arg ] )
|
||||
p4user = arg
|
||||
elif opt == "-d":
|
||||
# eat this one, we'll build our own changespec
|
||||
changelog = arg
|
||||
elif opt == "--changes":
|
||||
# and these are the change #'s to include descriptions of
|
||||
changes = arg.split()
|
||||
if args is not None:
|
||||
changes.extend( args )
|
||||
|
||||
if p4user is None:
|
||||
p4user = os.getenv( "P4USER" )
|
||||
if p4client is None:
|
||||
p4client = os.getenv( "P4CLIENT" )
|
||||
if p4port is None:
|
||||
p4port = os.getenv( "P4PORT" )
|
||||
|
||||
if p4user is None or p4client is None or p4port is None:
|
||||
print >> sys.stderr, "one or more p4 environment variables (p4user, p4client, p4port) aren't set."
|
||||
usage()
|
||||
sys.exit(-1)
|
||||
|
||||
|
||||
# get the list of opened files
|
||||
openFiles = []
|
||||
stdout = subprocess.Popen( " ".join( p4cmdbase ) + " opened -c default", shell=True, stdout=subprocess.PIPE ).stdout
|
||||
lines = stdout.readlines()
|
||||
stdout.close()
|
||||
|
||||
filere = re.compile( "(.*)#.*\n" )
|
||||
for line in lines:
|
||||
m = filere.match( line )
|
||||
if m is not None:
|
||||
openFiles += [ m.groups()[ 0 ] ]
|
||||
|
||||
if openFiles == []:
|
||||
sys.stderr.write( "no files to submit from the default changelist" )
|
||||
sys.exit(0)
|
||||
|
||||
# get the changenotes from the specified changes
|
||||
changeLines = []
|
||||
for change in changes:
|
||||
stdout = subprocess.Popen( " ".join( p4cmdbase ) + " describe -s " + change, shell=True, stdout=subprocess.PIPE ).stdout
|
||||
lines = stdout.readlines()
|
||||
stdout.close()
|
||||
|
||||
stopre = re.compile( "Affected files ..." )
|
||||
for line in lines:
|
||||
if stopre.match( line ):
|
||||
break
|
||||
changeLines += [ line.strip() ]
|
||||
|
||||
change_spec = ''
|
||||
change_spec += 'Change: new\n'
|
||||
change_spec += 'Client: %s\n' % p4client
|
||||
change_spec += 'User: %s\n' % p4user
|
||||
change_spec += 'Description:\n'
|
||||
|
||||
# if they supplied a changelog line, prepend that to the list of changes
|
||||
if changelog is not None:
|
||||
change_spec += '\t%s\n\n' % changelog
|
||||
# and now each line from all the changelists
|
||||
if changeLines != []:
|
||||
change_spec += '\t%s\n\n' % "Changes included in this submit:"
|
||||
for changeLine in changeLines:
|
||||
change_spec += '\t%s\n' % changeLine
|
||||
|
||||
change_spec += 'Files:\n'
|
||||
for file in openFiles:
|
||||
change_spec += '\t%s\n' % file
|
||||
|
||||
p = subprocess.Popen( " ".join( p4cmdbase ) + " submit -i", shell=True, stdin=subprocess.PIPE, stdout=sys.stdout, stderr=sys.stderr )
|
||||
p.communicate( change_spec )
|
||||
sys.exit( p.returncode )
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user