p4cmd.py (1705B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\common\lib\p4cmd.py 2 import subprocess, marshal, sys 3 4 class P4Error(RuntimeError): 5 6 def __init__(self, res): 7 RuntimeError.__init__(self, res['data']) 8 self.generic = res['generic'] 9 self.severity = res['severity'] 10 11 12 class Bunch(dict): 13 __slots__ = [] 14 15 def __repr__(self): 16 return 'Bunch of %s' % dict.__repr__(self) 17 18 __getattr__ = dict.__getitem__ 19 __setattr__ = dict.__setitem__ 20 __delattr__ = dict.__delitem__ 21 22 def __getstate__(self): 23 pass 24 25 def Copy(self): 26 return Bunch(self.copy()) 27 28 29 def Run(cmd, extra = ''): 30 p = subprocess.Popen('p4 -G %s %s' % (extra, cmd), stdout=subprocess.PIPE) 31 try: 32 while True: 33 res = marshal.load(p.stdout) 34 if res.get('code', None) == 'error': 35 raise P4Error(res) 36 yield Bunch(res) 37 38 except EOFError: 39 pass 40 41 42 def Describe(changelist, flags = ''): 43 desc = Run('describe %s %s' % (changelist, flags)).next() 44 files = [] 45 i = 0 46 while True: 47 no = str(i) 48 i += 1 49 if 'depotFile' + no in desc: 50 file = [desc['depotFile' + no], 51 desc['rev' + no], 52 desc['action' + no], 53 desc['type' + no]] 54 files.append(file) 55 else: 56 break 57 58 res = Bunch(status=desc.status, code=desc.code, client=desc.client, user=desc.user, time=float(desc.time), change=int(desc.change), desc=desc.desc, files=files) 59 return res 60 61 62 if __name__ == '__main__': 63 for res in Run(' '.join(sys.argv[1:])): 64 for k, v in res.items(): 65 print '%s\t%s' % (k, v)