1
This commit is contained in:
59
devtools/p4debugscan.py
Normal file
59
devtools/p4debugscan.py
Normal file
@ -0,0 +1,59 @@
|
||||
|
||||
import sys, re, os, stat
|
||||
from ctypes import *
|
||||
|
||||
|
||||
if len( sys.argv ) < 3:
|
||||
print 'p4debugscan.py scans for debug DLLs in the last N revisions of a file in Perforce'
|
||||
print 'usage: p4debugscan.py filename N'
|
||||
print 'alt : p4debugscan.py filename -1 (will only look at filename on disk)'
|
||||
print 'ex : p4debugscan.py //valvegames/rel/hl2/game/bin/engine.dll 10'
|
||||
print ' (looks for debug versions in the past 10 revisions of engine.dll)'
|
||||
sys.exit( 1 )
|
||||
|
||||
filename = sys.argv[1]
|
||||
nRevisions = sys.argv[2]
|
||||
|
||||
|
||||
if nRevisions == '-1':
|
||||
hdll = windll.kernel32.LoadLibraryA( filename )
|
||||
fn_addr = windll.kernel32.GetProcAddress( hdll, "BuiltDebug" )
|
||||
windll.kernel32.FreeLibrary( hdll )
|
||||
|
||||
if fn_addr == 0:
|
||||
print '%s: RELEASE' % (filename)
|
||||
else:
|
||||
print '%s: DEBUG' % (filename)
|
||||
else:
|
||||
# Get the revisions list.
|
||||
f = os.popen( 'p4 changes -m %s %s' % (nRevisions, filename) )
|
||||
str = f.read()
|
||||
f.close()
|
||||
|
||||
|
||||
changelistNumbers = []
|
||||
myRE = re.compile( r'change (?P<num>\d+?) on (?P<date>.+?) ', re.IGNORECASE )
|
||||
while 1:
|
||||
m = myRE.search( str )
|
||||
if m:
|
||||
str = str[m.end():]
|
||||
changelistNumbers.append( [m.group('num'), m.group('date')] )
|
||||
else:
|
||||
break
|
||||
|
||||
testDLLFilename = 'p4debugscan_test.dll'
|
||||
|
||||
for x in changelistNumbers:
|
||||
os.system( 'p4 print -q -o %s %s@%s' % (testDLLFilename, filename, x[0]) )
|
||||
|
||||
hdll = windll.kernel32.LoadLibraryA( testDLLFilename )
|
||||
fn_addr = windll.kernel32.GetProcAddress( hdll, "BuiltDebug" )
|
||||
windll.kernel32.FreeLibrary( hdll )
|
||||
|
||||
if fn_addr == 0:
|
||||
print '%s: %s@%s - RELEASE' % (x[1], filename, x[0])
|
||||
else:
|
||||
print '%s: %s@%s - DEBUG' % (x[1], filename, x[0])
|
||||
|
||||
os.chmod( testDLLFilename, stat.S_IWRITE | stat.S_IREAD )
|
||||
os.unlink( testDLLFilename )
|
Reference in New Issue
Block a user