NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)