Note that you need to edit the script for your particular path/client setup.
Code: Select all
# ZeusCreateProject
# Purpose: create workspace file from a list of directories.
# This script is helpful IF you have a large amount of source
# directories and you only want a small subset of those directories.
# Zeus itself provides the WorkSpace Builder which does a good job, but
# it can be tedious to remove a lot of directories it finds.
#
# To use this script you must provide a list of directories - see the
# EDIT section below. Note this script will add sub-directories of
# the directory list.
#
# After this script completes, open Zeus and open the Workspace file you created.
# It may take a long time to load as Zeus will create a tags database for the WorkSpace.
#
# Within the WorkSpace project, the files will be organized by directory,
# making source file browsing similiar to browsing a dir tree.
#
import glob, os, sys
from xml.dom.minidom import Document
if not len(sys.argv) == 2:
print("Usage: ZeusCreateProject workSpaceName")
exit(0)
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# ===========================================================================
# EDIT THIS SECTION FOR YOUR PARTICULAR SETUP
#
# List your clients:
# p4 client : path
clients = { "p4" : "e:\\p4",
"p41" : "e:\\p41",
}
# list common paths of interest - exclude the client prefix path
dirCommonStr = "\\depot\\" # common prefix for paths in dirPath
# list the directories to include in the project (all files are taken)
# (remove the dirCommonStr common part)
dirPath = [ "src\\common",
"src\\drivers",
"inc\\",
]
#
# dir path = clients[ <p4Client> ] + dirCommonStr + dirPath[ i ]
#
# End of User Edit
# ===========================================================================
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
def makenode(path):
"Return a document node contains a directory tree for the path."
node = doc.createElement('Folder')
node.setAttribute('name', path)
for f in os.listdir(path):
fullname = os.path.join(path, f)
if os.path.isdir(fullname):
elem = makenode(fullname)
else:
elem = doc.createElement('file')
ee1 = doc.createTextNode( fullname )
elem.appendChild(ee1)
#elem.appendChild( e )
#elem = doc.createElement('file')
#elem.setAttribute('name', fullname)
node.appendChild(elem)
return node
workSpaceName = sys.argv[1]
for client in clients.keys():
i = 0
for line in dirPath: # line = directory path
istr = "_%s_%d" % (client, i)
i += 1
line = clients[client] + dirCommonStr + line
print line+"\n"
file_FileList = open(client+istr+".xlst", "w")
doc = Document()
doc.appendChild(makenode(line.rstrip("\n")))
doc.writexml(file_FileList, addindent=' ', newl='\n')
file_FileList.close()
# create the final files list file
i = 0
for client in clients.keys():
outFile = open(client+".zlst", "w")
i = inSubFolder = 0
outFile.write('<Project name="%s" sorted="Yes">\n' % client)
for line in dirPath: # line = directory path
istr = "_%s_%d" % (client, i)
i += 1
file_FileList = open(client+istr+".xlst", "r")
inSubFolder = 0
for ll in file_FileList:
# next we will chop some of the redundancy out of the folder names
if ll.find("</Folder>") >= 0:
inSubFolder -= 1
if inSubFolder < 0:
inSubFolder = 0
if ll.find("Folder name") >= 0:
inSubFolder += 1
ll = ll.replace( clients[client]+dirCommonStr, "...")
# subfolders only have last directory entry
if inSubFolder >=2:
ll = ll[:ll.index("=")+2] + ll[ll.rindex("\\")+1:]
# delete these lines
if not ll.find("?xml version") > 0:
outFile.write( ll )
file_FileList.close()
outFile.write('</Project>\n')
outFile.close()
activeSet = False
#now create the workspace file
fWorkSpace = open(workSpaceName+".zwi", "w")
fWorkSpace.write('<!-- Workspace file for the Zeus for Windows IDE - http://www.zeusedit.com -->\n')
fWorkSpace.write('<Workspace name="%s" sorted="Yes">\n' % workSpaceName)
fWorkSpace.write(' <Mode>Debug</Mode>\n')
for client in clients.keys():
if not activeSet:
fWorkSpace.write(' <Active>%s</Active>\n' % client)
activeSet = True
fWorkSpace.write(' <Project name="%s">%s</Project>\n' % (client,client+".zlst") )
fWorkSpace.write('</Workspace>')
fWorkSpace.close()
#remove all the temp files
for client in clients.keys():
i = 0
for line in dirPath: # line = directory path
istr = "_%s_%d" % (client, i)
os.remove(client+istr+".xlst")
i += 1