#!/usr/bin/env python3
'''
A form-save trigger for the Perforce server to enforce sane job names.
$DateTimeTZ: 2015/03/13 07:17:58 -0700 PDT $
$Author: lester_cheung $
$Id: //guest/lester_cheung/p4util/p4util/trigger/form/sane_jobname.py#1 $
'''
import sys
SECTION_NAME = 'JOB'
PREPY3 = sys.version_info[0] < 3
if PREPY3:
from ConfigParser import ConfigParser
from StringIO import StringIO
else:
from configparser import ConfigParser
def sane_jobname(specfilename):
'''Dies with exit state 1 unless jobname is pretty.'''
with open(specfilename) as fd:
spec = '[{0}]\n'.format(SECTION_NAME) + fd.read()
cfg = ConfigParser()
if PREPY3:
fakefile = StringIO(spec)
cfg.readfp(fakefile) # ConfigParser.read_string was added in Python 3.2
job_label_defined = cfg.has_option(SECTION_NAME, 'Job')
else:
cfg.read_string(spec)
job_label_defined = 'Job' in cfg[SECTION_NAME]
if not job_label_defined:
print('Field "Job" is required')
sys.exit(1)
jobname = cfg.get(SECTION_NAME, 'Job')
if jobname == 'new' or jobname.startswith('job'):
sys.exit(0)
print('Job name ({0}) should be "new" or starts with "job".'.format(jobname))
sys.exit(1)
if __name__ == '__main__':
myspecfile = sys.argv[1]
sane_jobname(myspecfile)
# should never return