''' An example on how to sort result returned from "p4 files". Same concept applies to any list returned from a Perforce server. :) $Author: lester_cheung $ $Id: //guest/lester_cheung/p4util/examples/p4files_sorted.py#1 $ ''' __version__ = '0.{0}'.format('$Change: 10729 $'.split()[-2]) import argparse import sys import logging logging.basicConfig(format='%(asctime)-15s %(funcName)s.%(levelname)s %(message)s', level=logging.DEBUG) from p4util.p4cli import P4CLI as P4 # or "from P4 import P4" if you have P4Python 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('-s', '--sort-by') ap.add_argument('-r', '--reverse-output', action='store_true', default=False) ap.add_argument('depot_paths', nargs='*') return ap.parse_args() def get_key(obj, keyname): '''get value from a dictionary and cast them into the right type''' rv = obj.get(keyname) if rv and keyname in 'rev time change'.split(): rv = int(rv) return rv 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() ## YOUR PROG HERE from pprint import pformat, pprint # log.info(pformat(p4.run_info())) rv = p4.run_files(cfg.depot_paths) # print(rv) if cfg.sort_by: rv.sort(key=lambda x: get_key(x, cfg.sort_by), reverse=cfg.reverse_output) # pprint(rv) for x in rv: print(x) p4.disconnect() if __name__ == '__main__': main()