mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-05 22:09:59 +03:00
1
This commit is contained in:
61
devtools/WildcardSearch.py
Normal file
61
devtools/WildcardSearch.py
Normal file
@@ -0,0 +1,61 @@
|
||||
|
||||
from __future__ import generators
|
||||
import os
|
||||
import re
|
||||
import stat
|
||||
|
||||
|
||||
# This takes a DOS filename wildcard like *abc.t?t and returns a regex string that will match it.
|
||||
def GetRegExForDOSWildcard( wildcard ):
|
||||
# First find the base directory name.
|
||||
iLast = wildcard.rfind( "/" )
|
||||
if iLast == -1:
|
||||
iLast = wildcard.rfind( "\\" )
|
||||
|
||||
if iLast == -1:
|
||||
dirName = "."
|
||||
dosStyleWildcard = wildcard
|
||||
else:
|
||||
dirName = wildcard[0:iLast]
|
||||
dosStyleWildcard = wildcard[iLast+1:]
|
||||
|
||||
# Now generate a regular expression for the search.
|
||||
# DOS -> RE
|
||||
# * -> .*
|
||||
# . -> \.
|
||||
# ? -> .
|
||||
reString = dosStyleWildcard.replace( ".", r"\." ).replace( "*", ".*" ).replace( "?", "." )
|
||||
return reString
|
||||
|
||||
|
||||
#
|
||||
# Useful function to return a list of files in a directory based on a dos-style wildcard like "*.txt"
|
||||
#
|
||||
# for name in WildcardSearch( "d:/hl2/src4/dt*.cpp", 1 ):
|
||||
# print name
|
||||
#
|
||||
def WildcardSearch( wildcard, bRecurse=0 ):
|
||||
reString = GetRegExForDOSWildcard( wildcard )
|
||||
matcher = re.compile( reString, re.IGNORECASE )
|
||||
|
||||
return __GetFiles_R( matcher, dirName, bRecurse )
|
||||
|
||||
def __GetFiles_R( matcher, dirName, bRecurse ):
|
||||
fileList = []
|
||||
# For each file, see if we can find the regular expression.
|
||||
files = os.listdir( dirName )
|
||||
for baseName in files:
|
||||
filename = dirName + "/" + baseName
|
||||
|
||||
mode = os.stat( filename )[stat.ST_MODE]
|
||||
if stat.S_ISREG( mode ):
|
||||
# Make sure the file matches the search string.
|
||||
if matcher.match( baseName ):
|
||||
fileList.append( filename )
|
||||
|
||||
elif bRecurse and stat.S_ISDIR( mode ):
|
||||
fileList += __GetFiles_R( matcher, filename, bRecurse )
|
||||
|
||||
return fileList
|
||||
|
||||
|
||||
Reference in New Issue
Block a user