'''This script helps you to make bulk changes to changelists. It's a work-in-progress and serves as an example. TODO: - add a "-a" option to change all changelists. - add options to change all fields in a changelists. Pull request welcome! ;-) Usage: python[3] -m p4util.adm.modchg -p P4PORT -u P4USER [ ...] Common issues: P4.P4Exception: [P4#run] Errors during command execution( "p4 change -if" ) [Error]: "Client 'yourhostname' unknown - use 'client' command to create it." => Create an client on your server before running the command. P4.P4Exception: [P4#run] Errors during command execution( "p4 change -if" ) [Error]: "Client 'yourhostname' can only be used from host 'host.example.org'." => Remove the "Host" field of your client (yourhostname in the example). $Author: lester_cheung $ $Id: //guest/lester_cheung/p4util/p4util/adm/modchg.py#1 $ ''' __version__ = '0.{0}'.format('$Change: 15246 $'.split()[-2]) import argparse import logging logging.basicConfig(format='%(asctime)-15s %(funcName)s.%(levelname)s %(message)s', level=logging.DEBUG) try: from ..p4cli import P4 except: # failback to P4Python (so we can run the script without installing the module) from P4 import P4 def parse_args(): ap = argparse.ArgumentParser(description='MYPROG') p4 = P4() ap.add_argument('-p', '--port', metavar=p4.env('P4PORT'), default=p4.env('P4PORT')) ap.add_argument('-u', '--user', metavar=p4.env('P4USER'), default=p4.env('P4USER')) ap.add_argument('-c', '--client', metavar=p4.env('P4CLIENT'), default=p4.env('P4CLIENT')) ap.add_argument('-C', '--charset', metavar=p4.env('P4CHARSET'), default=p4.env('P4CHARSET')) ap.add_argument('-y', '--do-it', action='store_true', default=False) ap.add_argument('-t', '--type', metavar='None') ap.add_argument('chgnos', action='append', default=[]) return ap.parse_args() def main(): log = logging.getLogger(__name__) cfg = parse_args() log.debug(cfg) p4 = P4() p4.prog = __file__ if cfg.user: p4.user = cfg.user if cfg.port: p4.port = cfg.port if cfg.client: p4.client = cfg.client if cfg.charset: p4.charset = cfg.charset p4.connect() for chgno in cfg.chgnos: rv = p4.run_change(['-o', chgno]) if not rv: continue chgspec = rv[0] if not cfg.do_it: # log.debug(chgspec) continue # FIXME: preview if cfg.type: chgspec['Type'] = cfg.type log.debug(chgspec) if cfg.do_it: p4.input = chgspec log.debug(p4.run_change('-if')) p4.disconnect() if __name__ == '__main__': main()