#!/usr/bin/env python3 # -*- coding: utf-8 -*- # ============================================================================== # Copyright and license info is available in the LICENSE file included with # the Server Deployment Package (SDP), and also available online: # https://swarm.workshop.perforce.com/projects/perforce-software-sdp/view/main/LICENSE # ------------------------------------------------------------------------------ """ NAME: DefaultSwarmReviewDesc.py DESCRIPTION: Create a default change description (form-in) for swarm user - so updates Swarm review changelist Can be used together with CheckChangeDesc.py (change-submit) To install, add a line to your Perforce triggers table like the following: default-swarm-desc form-in change "python /p4/common/bin/triggers/DefaultSwarmReviewDesc.py -p %serverport% -u perforce %user% %formfile% " or (if server is standard SDP and has appropriate environment defaults for P4PORT and P4USER): default-swarm-desc form-in change "python /p4/common/bin/triggers/DefaultSwarmReviewDesc.py %user% %formfile% " You may need to provide the full path to python executable, or edit the path to the trigger. """ # Python 2.7/3.3 compatibility. from __future__ import print_function import sys import WorkflowTriggers import shutil import os trigger_name = os.path.basename(os.path.splitext(__file__)[0]) class DefaultSwarmReviewDesc(WorkflowTriggers.WorkflowTrigger): """See module doc string for details""" def __init__(self, *args, **kwargs): WorkflowTriggers.WorkflowTrigger.__init__(self, **kwargs) self.parse_args(__doc__, args) def add_parse_args(self, parser): """Specific args for this trigger - also calls super class to add common trigger args""" parser.add_argument('-c', '--config-file', default=None, help="Configuration file for trigger. Default: CreateSwarmReview.yaml") parser.add_argument('user', help="User carrying out the command - %%user%% argument from triggers entry.") parser.add_argument('formfile', help="Formfile containing job definition - %%formfile%% argument from triggers entry.") super(DefaultSwarmReviewDesc, self).add_parse_args(parser) def run(self): """Runs trigger""" try: self.logger.debug("%s: firing" % trigger_name) config = self.load_config(self.options.config_file) if not 'review_description' in config or not config['review_description']: self.logger.debug("%s: no review_description found" % trigger_name) return 0 self.setupP4() self.p4.connect() with open(self.options.formfile, 'r') as f: contents = f.read() chg = self.p4.parse_change(contents) if "Date" in chg: # If Date field set then abort because change has already been processed self.logger.debug("%s: Change already processed so exiting" % trigger_name) return 0 if not "User" in chg or chg["User"] != config['swarm_user']: self.logger.debug("%s: Ignoring change as not Swarm user" % trigger_name) return 0 # job_desc = "" # if jobs and len(jobs) > 0: # job_desc = jobs[0]['Description'] # job_desc = job_desc.rstrip("\n") description = self.formatReviewDescription(config['review_description']) chg["Description"] = description contents = self.p4.format_change(chg) self.logger.debug("Updated chg: %s" % str(chg)) tempfile = "%s~" % self.options.formfile shutil.move(self.options.formfile, tempfile) with open(self.options.formfile, 'w') as f: f.write(contents) os.remove(tempfile) except Exception: return self.reportException() return 0 if __name__ == '__main__': """ Main Program""" trigger = DefaultSwarmReviewDesc(*sys.argv[1:]) sys.exit(trigger.run())