This commit is contained in:
commit
bc8ff5f44a
6520 changed files with 426985 additions and 0 deletions
158
windows/CreateReplay.py
Normal file
158
windows/CreateReplay.py
Normal file
|
@ -0,0 +1,158 @@
|
|||
|
||||
import glob
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import xml.dom.minidom
|
||||
|
||||
#------------------------------------------------------------------------------------------
|
||||
# DOM helper functions
|
||||
#------------------------------------------------------------------------------------------
|
||||
def getMatchingChildNodes(node, name):
|
||||
l = list()
|
||||
for item in node.childNodes:
|
||||
if (item.nodeType == node.ELEMENT_NODE) and (item.nodeName == name):
|
||||
l.append(item)
|
||||
return l
|
||||
|
||||
def getText(nodelist):
|
||||
rc = ""
|
||||
for node in nodelist:
|
||||
if node.nodeType == node.TEXT_NODE:
|
||||
rc = rc + node.data
|
||||
return rc
|
||||
|
||||
#------------------------------------------------------------------------------------------
|
||||
def copyFiles(files):
|
||||
|
||||
for item in files:
|
||||
src = item[0]
|
||||
dst = item[1]
|
||||
#print "%s -> %s" % (src, dst)
|
||||
try:
|
||||
os.makedirs(os.path.dirname(dst))
|
||||
except:
|
||||
pass
|
||||
|
||||
shutil.copy2(src, dst)
|
||||
|
||||
return True
|
||||
|
||||
#------------------------------------------------------------------------------------------
|
||||
def handleDir(dirName, dstDir, root, recursive=False):
|
||||
|
||||
#print "handleDir: ENTER (%s)" % dirName
|
||||
fileList = list()
|
||||
fileNodes = getMatchingChildNodes(root, "File")
|
||||
for fileNode in fileNodes:
|
||||
name = getText(fileNode.childNodes)
|
||||
if (fileNode.getAttribute("name")):
|
||||
newName = fileNode.getAttribute("name")
|
||||
else:
|
||||
newName = None
|
||||
|
||||
files = glob.glob("%s/%s" % (dirName, name))
|
||||
for item in files:
|
||||
item = os.path.basename(item)
|
||||
dstName = newName
|
||||
if (dstName == None):
|
||||
dstName = item
|
||||
if (len(dirName) > 0):
|
||||
if (os.path.isfile("%s/%s" % (dirName, item))):
|
||||
fileList.append(("%s/%s" % (dirName, item), "%s/%s/%s" % (dstDir, dirName, dstName)))
|
||||
else:
|
||||
if (os.path.isfile(item)):
|
||||
fileList.append((item, "%s/%s" % (dstDir, dstName)))
|
||||
|
||||
# handle any sub-dirs
|
||||
if (recursive):
|
||||
dirNodes = [root]
|
||||
else:
|
||||
dirNodes = getMatchingChildNodes(root, "Dir")
|
||||
for dirNode in dirNodes:
|
||||
if (recursive):
|
||||
ignoreNodes = list()
|
||||
if (len(dirName) > 0):
|
||||
subDirName = "%s/*" % dirName
|
||||
else:
|
||||
subDirName = "*"
|
||||
else:
|
||||
ignoreNodes = getMatchingChildNodes(dirNode, "Ignore")
|
||||
if (len(dirName) > 0):
|
||||
subDirName = "%s/%s" % (dirName, dirNode.getAttribute("name"))
|
||||
else:
|
||||
subDirName = dirNode.getAttribute("name")
|
||||
|
||||
subRecursive = recursive
|
||||
if (not subRecursive):
|
||||
rStr = dirNode.getAttribute("recursive")
|
||||
if ((rStr != None) and (rStr == "true")):
|
||||
subRecursive = True
|
||||
#print "RECURSIVE (%s)" % subDirName
|
||||
|
||||
#print "Checking for '%s'" % subDirName
|
||||
names = glob.glob("%s" % subDirName)
|
||||
for name in names:
|
||||
if (os.path.basename(name) == ".svn"):
|
||||
continue
|
||||
|
||||
# make sure it's not ignored
|
||||
ignore = False
|
||||
for ignoreNode in ignoreNodes:
|
||||
ignoreName = getText(ignoreNode.childNodes)
|
||||
#print "<----------------Checking '%s' for ignored '%s'" % (os.path.basename(name), ignoreName)
|
||||
if (ignoreName == os.path.basename(name)):
|
||||
ignore = True
|
||||
|
||||
if (ignore):
|
||||
#print "IGNORING %s" % name
|
||||
continue
|
||||
|
||||
if (os.path.isdir(name)):
|
||||
dirList = handleDir(os.path.normpath(name), dstDir, dirNode, subRecursive)
|
||||
for item in dirList:
|
||||
fileList.append(item)
|
||||
|
||||
return fileList
|
||||
|
||||
#------------------------------------------------------------------------------------------
|
||||
def main(argv):
|
||||
|
||||
# rootDir = os.path.dirname(argv[0])
|
||||
# if (len(rootDir) == 0):
|
||||
# rootDir = "."
|
||||
# xmlName = "%s/replay.xml" % rootDir
|
||||
|
||||
rootDir = "."
|
||||
xmlName = "%s/replay.xml" % rootDir
|
||||
|
||||
dom1 = xml.dom.minidom.parse(xmlName)
|
||||
root = dom1.getElementsByTagName("ReplayFiles")
|
||||
|
||||
dstDir = None
|
||||
while (dstDir == None):
|
||||
dstDir = os.path.normpath("%s/../ReplayDisk" % rootDir)
|
||||
sys.stdout.write("Enter the replay destination directory [%s]:" % dstDir)
|
||||
dir = sys.stdin.readline().rstrip('\r\n')
|
||||
if (len(dir) > 0):
|
||||
dstDir = dir
|
||||
|
||||
fileCopyList = list()
|
||||
|
||||
rootList = handleDir(rootDir, dstDir, root[0])
|
||||
for item in rootList:
|
||||
fileCopyList.append(item)
|
||||
|
||||
if (not copyFiles(fileCopyList)):
|
||||
return False
|
||||
|
||||
print "\n-----------------------------"
|
||||
print "Replay disk creation complete"
|
||||
print "-----------------------------"
|
||||
return True
|
||||
|
||||
#------------------------------------------------------------------------------------------
|
||||
|
||||
if __name__ == '__main__':
|
||||
if (main(sys.argv) != True):
|
||||
sys.exit(-1);
|
Loading…
Add table
Add a link
Reference in a new issue