import sys, os, string, re, time, smtplib, getopt # syncs the current clientspec def Sync( szP4SrcFilesToWatch, bForce ): print "syncing to files " + szP4SrcFilesToWatch + "..." sForce = "" if bForce: sForce = "-f " aszSyncLines = string.split( szP4SrcFilesToWatch, ";" ) for szLine in aszSyncLines: if szLine: print "p4 sync " + sForce + szLine os.popen('p4 sync ' + sForce + szLine) print " sync completed" # current changelist number for this clientspec def SubmittedChangelist( szP4SrcFilesToWatch ): szChangeText = os.popen('p4 changes -m1 -s submitted ' + szP4SrcFilesToWatch).read() line = [] line = string.split( szChangeText ) if len(line) > 0: return line[1] # returns a set of changes of range [start, end] def GetChangelistRange(start, end, szP4SrcFilesToWatch): if start and end: szChangeText = os.popen('p4 changes -m10 ' + szP4SrcFilesToWatch + '@' + start + ',' + end).read() return string.split(szChangeText, '\n'); szResult = [] return szResult # returns the raw text of a set of the most recent submissions def GetRecentCheckins( szP4SrcFilesToWatch ): szChangeText = os.popen('p4 changes -m5 -s submitted ' + szP4SrcFilesToWatch).read() return "Most recent checkins:\n" + szChangeText # perforce counter access def GetCounter(counter): return string.split(os.popen('p4 counter ' + counter).read(), '\n')[0] #returns the raw text of all unverified checkins def GetUnverifiedCheckins( szP4SrcFilesToWatch, szVerifiedCounter, szChangeCounter ): szCounter = GetCounter( szVerifiedCounter ) szLastVerified = str( int( szCounter ) + 1 ) szCurrentChange = GetCounter( szChangeCounter ) szChangeText = os.popen('p4 changes -s submitted ' + szP4SrcFilesToWatch + '@' + szLastVerified + ',@' + szCurrentChange).read() return "Unverified checkins:\n" + szChangeText # extracts an email from a "changes" output line def GetEmailFromChangeLine(changeline): change = (string.split(changeline, ' '))[1] output = os.popen('p4 change -o ' + change).read() user = string.split(string.split(output, "User:")[2])[0] output = os.popen('p4 user -o ' + user).read() return string.split(string.split(output, "Email:")[2])[0] # perforce counter setting def SetCounter(counter, value): os.popen('p4 counter ' + counter + ' ' + value).read() # checks to see if any update is currently available def AnyNewCheckins( szChangeCounter, szP4SrcFilesToWatch ): szChange = GetCounter(szChangeCounter) if not szChange: #is this the problem? Every night all these things fail. return 0 return szChange <> SubmittedChangelist( szP4SrcFilesToWatch ) def LockMutex( szMutex ): szLogLines = os.popen('newp4mutex lock ' + szMutex + ' 3 steambuilder perforce:1666').read() count = string.count( szLogLines, '\n' ) if ( count < 3 ): print szLogLines print "HERE IS THE WEIRD LOCK ERROR!" print szMutex + "mutex lock failed." return 0 szT = string.split(szLogLines, '\n')[2] successLine = string.split( szT, ' ') if successLine[0] == "Success:": print szMutex + " mutex locked." return 1 else: print szMutex + " mutex lock failed." return 0 def LockMutexOld( szMutex ): szLogLines = os.popen('p4mutex lock ' + szMutex + ' 3 steambuilder perforce:1666').read() count = string.count( szLogLines, '\n' ) if ( count < 3 ): print szLogLines print "HERE IS THE WEIRD LOCK ERROR!" print szMutex + "mutex lock failed." return 0 szT = string.split(szLogLines, '\n')[3] successLine = string.split( szT, ' ') if successLine[0] == "Success:": print szMutex + " mutex locked." return 1 else: print szMutex + " mutex lock failed." return 0 def UnlockMutex( szMutex ): szLogLines = os.popen('newp4mutex release ' + szMutex + ' 3 steambuilder perforce:1666').read() count = string.count( szLogLines, '\n' ) if ( count < 3 ): print szLogLines print "HERE IS THE WEIRD RELEASE ERROR!" print szMutex + "mutex release failed." return 0 szT = string.split(szLogLines, '\n')[2] # print szT successLine = string.split( szT, ' ') # print successLine if successLine[0] == "Success:": print szMutex + " mutex released." return 1 else: print szMutex + " mutex release failed." return 0 def Integrate( szBranch ): return os.popen('p4 integ -b ' + szBranch + ' -1 -i' ).read() def Revert( szFiles ): return os.popen('p4 revert ' + szFiles).read() def Resolve(): return os.popen('p4 resolve -am').read() def Fstat( szFiles ): szConflicts = os.popen('p4 fstat -Ru ' + szFiles).read() return szConflicts def Changes( szFile, iNumResults ): return os.popen('p4 changes -m' + iNumResults + ' ' + szFile).read() def Query( szMutex ): szLines = os.popen( 'p4mutex query ' + szMutex ).read() count = string.count( szLines, 'HELD' ) if (count == 0 ): return 1 else: print "Lock held" return 0 def SetClient( szClient ): os.environ['P4CLIENT'] = szClient