diff --git a/product/ERP5Subversion/Tool/SubversionTool.py b/product/ERP5Subversion/Tool/SubversionTool.py index 4642bcaa01cf3d0c7af7032b92f104bc707f2275..9571dc1c64dfb0158e2cc378dc7bf91cf5caf484 100755 --- a/product/ERP5Subversion/Tool/SubversionTool.py +++ b/product/ERP5Subversion/Tool/SubversionTool.py @@ -39,6 +39,8 @@ from DateTime import DateTime from cPickle import dumps, loads from App.config import getConfiguration from zExceptions import Unauthorized +from OFS.Image import manage_addFile +from cStringIO import StringIO try: from base64 import b64encode, b64decode @@ -47,23 +49,29 @@ except ImportError: class File : # Constructor - def __init__(self, fullPath) : + def __init__(self, fullPath, msgStatus) : self.fullPath = fullPath + self.msgStatus = msgStatus self.fileName = fullPath.split('/')[-1] # return the file name def getName(self) : return self.fileName - # return the file path + # return the file path def getFullPath(self) : return self.fullPath + + # return the file's msgStatus + def getMsgStatus(self) : + return self.msgStatus ## End of File Class class Dir : # Constructor - def __init__(self, fullPath) : + def __init__(self, fullPath, msgStatus) : self.fullPath = fullPath + self.msgStatus = msgStatus self.dirName = fullPath.split('/')[-1] self.subdirs = [] # list of sub directories @@ -74,6 +82,14 @@ class Dir : # return directory's path def getFullPath(self) : return self.fullPath + + # return directory's msgStatus + def getMsgStatus(self) : + return self.msgStatus + + # Set Directory's msgStatus + def setMsgStatus(self, msgStatus) : + self.msgStatus = msgStatus # return a list of sub directories' names def getSubDirs(self) : @@ -296,7 +312,7 @@ class SubversionTool(UniqueObject, Folder): path = path[:-1] #root = Dir(path.split('/')[-1]) - root = Dir(path) + root = Dir(path, "normal") for statusObj in self.status(path) : # (normal, added, modified, deleted) @@ -317,34 +333,70 @@ class SubversionTool(UniqueObject, Folder): i += 1 if d : if d not in parent.getSubDirs(): - parent.addSubDir(Dir('/'+'/'.join(full_path_list[:i]).strip())) + parent.addSubDir(Dir('/'+'/'.join(full_path_list[:i]).strip(), +"normal")) parent = parent.getDir(d) - parent.addSubDir(File(full_path)) + if os.path.isdir(full_path) : + if filename not in parent.getSubDirs() : + parent.addSubDir(Dir(full_path, str(msgStatus))) + else : + tmp = parent.getDir(filename) + tmp.setMsgStatus(str(msgStatus)) + else : + parent.addSubDir(File(full_path, str(msgStatus))) return root def treeToXML(self, item) : - output = "<?xml version='1.0' encoding='iso-8859-1'?>"+ os.linesep - output += "<tree id='0'>" + os.linesep - output = self._treeToXML(item, output, 1) - output += "</tree>" + os.linesep - return output + output = StringIO() + output.write("<?xml version='1.0' encoding='iso-8859-1'?>"+ os.linesep) + output.write("<tree id='0'>" + os.linesep) + output = self._treeToXML(item, output, 1, True) + output.write("</tree>" + os.linesep) + try : + self.getPortalObject()["portal_skins"]["erp5_svn"].manage_addFile(id="tree.xml", file=output) + except : + self.getPortalObject()["portal_skins"]["erp5_svn"]["tree.xml"].manage_upload(file=output) + output.close() + + #return output - def _treeToXML(self, item, output, ident) : + def _treeToXML(self, item, output, ident, first) : + itemStatus = item.getMsgStatus() + if itemStatus == 'added' : + itemColor='green' + elif itemStatus == 'modified' : + itemColor='orange' + elif itemStatus == 'deleted' : + itemColor='red' + else : + itemColor='black' if isinstance(item, Dir) : for i in range(ident) : - output += '\t' - output += '<item text="%s" id="%s" im0="folder.png" im1="folder_open.png" im2="folderClosed.gif">'%(item.getName(), item.getFullPath(),) + os.linesep + output.write('\t') + if first : + output.write('<item open="1" text="%s" id="%s" aCol="%s" '\ + 'im0="folder.png" im1="folder_open.png" '\ + 'im2="folder.png">'%(item.getName(), +item.getFullPath(), itemColor,) + os.linesep) + first=False + else : + output.write('<item text="%s" id="%s" aCol="%s" im0="folder.png" ' \ + 'im1="folder_open.png" im2="folder.png">'%(item.getName(), +item.getFullPath(), itemColor,) + os.linesep) for it in item.subdirs: ident += 1 - output = self._treeToXML(item.getDir(it.getName()), output, ident) + output = self._treeToXML(item.getDir(it.getName()), output, ident, +first) ident -= 1 for i in range(ident) : - output += '\t' - output += '</item>' + os.linesep + output.write('\t') + output.write('</item>' + os.linesep) else : for i in range(ident) : - output += '\t' - output += '<item text="%s" id="%s" im0="document.png" im1="document.png" im2="document.png"/>'%(item.getName(), item.getFullPath(),) + os.linesep + output.write('\t') + output.write('<item text="%s" id="%s" aCol="%s" im0="document.png" ' \ + 'im1="document.png" im2="document.png"/>'%(item.getName(), +item.getFullPath(), itemColor,) + os.linesep) return output