From d35421506a1291cff51e31ae08fc82570f18eafd Mon Sep 17 00:00:00 2001
From: Christophe Dumez <christophe@nexedi.com>
Date: Wed, 22 Mar 2006 12:47:05 +0000
Subject: [PATCH] - Improved XML Export (was programming like in Java :p)

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@6174 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Subversion/SubversionClient.py    |  3 +
 product/ERP5Subversion/Tool/SubversionTool.py | 99 +++++++------------
 2 files changed, 38 insertions(+), 64 deletions(-)

diff --git a/product/ERP5Subversion/SubversionClient.py b/product/ERP5Subversion/SubversionClient.py
index f6dc360a0b..0d3d59f5c7 100755
--- a/product/ERP5Subversion/SubversionClient.py
+++ b/product/ERP5Subversion/SubversionClient.py
@@ -197,6 +197,9 @@ try:
 
     def trustSSLServer(self, trust_dict):
       return self.aq_parent._trustSSLServer(trust_dict)
+    
+    def checkin(self, path, log_message, recurse):
+      return self.client.checkin(path, log_message=log_message, recurse=recurse)
 
     def status(self, path, **kw):
       # Since plain Python classes are not convenient in Zope, convert the objects.
diff --git a/product/ERP5Subversion/Tool/SubversionTool.py b/product/ERP5Subversion/Tool/SubversionTool.py
index 9571dc1c64..6b874a8980 100755
--- a/product/ERP5Subversion/Tool/SubversionTool.py
+++ b/product/ERP5Subversion/Tool/SubversionTool.py
@@ -52,19 +52,7 @@ class File :
   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
-  def getFullPath(self) :
-    return self.fullPath
-  
-  # return the file's msgStatus
-  def getMsgStatus(self) :
-    return self.msgStatus
+    self.name = fullPath.split('/')[-1]
 ## End of File Class
 
 class Dir :
@@ -72,37 +60,17 @@ class Dir :
   def __init__(self, fullPath, msgStatus) :
     self.fullPath = fullPath
     self.msgStatus = msgStatus
-    self.dirName = fullPath.split('/')[-1]
-    self.subdirs = [] # list of sub directories
-
-  # return directory's short name
-  def getName(self) :
-    return self.dirName
-  
-  # 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
+    self.name = fullPath.split('/')[-1]
+    self.subDirs = [] # list of sub directories
 
   # return a list of sub directories' names
   def getSubDirs(self) :
-    return [d.getName() for d in self.subdirs]
-
-  # add a sub directory to the list
-  def addSubDir(self, item) :
-    self.subdirs.append(item)
+    return [d.fullPath for d in self.subDirs]
 
   # return directory in subdirs given its name
-  def getDir(self, name):
-    for d in self.subdirs:
-      if d.getName() == name:
+  def getDir(self, fullPath):
+    for d in self.subDirs:
+      if d.fullPath == fullPath:
         return d
 ## End of Dir Class
   
@@ -293,11 +261,12 @@ class SubversionTool(UniqueObject, Folder):
     return client.revert(self._getWorkingPath(path))
 
   security.declareProtected('Import/Export objects', 'checkin')
-  def checkin(self, path, log_message = None):
+  def checkin(self, path, log_message = 'None', recurse=True):
     """Commit local changes.
     """
-    client = self._getClient(log_message = log_message)
-    return client.checkin(self._getWorkingPath(path))
+    client = self._getClient()
+    #return client.checkin(self._getWorkingPath(path), log_message, recurse)
+    return client.checkin(path, log_message, recurse)
 
   security.declareProtected('Import/Export objects', 'status')
   def status(self, path, **kw):
@@ -311,13 +280,13 @@ class SubversionTool(UniqueObject, Folder):
     if path[-1]=="/" :
       path = path[:-1]
     
-    #root = Dir(path.split('/')[-1])
     root = Dir(path, "normal")
-
+    somethingModified = False
     for statusObj in self.status(path) :
-      # (normal, added, modified, deleted)
+      # can be (normal, added, modified, deleted)
       msgStatus = statusObj.getTextStatus()
       if str(msgStatus) != "normal" :
+        somethingModified = True
         full_path = statusObj.getPath()
         full_path_list = full_path.split('/')[1:]
         relative_path = full_path[len(path)+1:]
@@ -332,19 +301,21 @@ class SubversionTool(UniqueObject, Folder):
         for d in relative_path_list :
           i += 1
           if d :
-            if d not in parent.getSubDirs():
-              parent.addSubDir(Dir('/'+'/'.join(full_path_list[:i]).strip(),
-"normal"))
-            parent = parent.getDir(d)
+            fullPathOfd = '/'+'/'.join(full_path_list[:i]).strip()
+            if fullPathOfd not in parent.subDirs :
+              parent.subDirs.append(Dir(fullPathOfd, "normal"))
+            parent = parent.getDir(fullPathOfd)
         if os.path.isdir(full_path) :
-          if filename not in parent.getSubDirs() :
-            parent.addSubDir(Dir(full_path, str(msgStatus)))
+          if full_path == parent.fullPath :
+            parent.msgStatus = str(msgStatus)
+          elif full_path not in parent.subDirs :
+            parent.subDirs.append(Dir(full_path, str(msgStatus)))
           else :
-            tmp = parent.getDir(filename)
-            tmp.setMsgStatus(str(msgStatus))
+            tmp = parent.getDir(full_path)
+            tmp.msgStatus = str(msgStatus)
         else :
-          parent.addSubDir(File(full_path, str(msgStatus)))
-    return root
+          parent.subDirs.append(File(full_path, str(msgStatus)))
+    return somethingModified and root
             
   def treeToXML(self, item) :
     output = StringIO()
@@ -361,7 +332,7 @@ class SubversionTool(UniqueObject, Folder):
     #return output
   
   def _treeToXML(self, item, output, ident, first) :
-    itemStatus = item.getMsgStatus()
+    itemStatus = item.msgStatus
     if itemStatus == 'added' :
       itemColor='green'
     elif itemStatus == 'modified' :
@@ -376,16 +347,16 @@ class SubversionTool(UniqueObject, Folder):
       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)
+        'im2="folder.png">'%(item.name,
+item.fullPath, 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:
+      'im1="folder_open.png" im2="folder.png">'%(item.name,
+item.fullPath, 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.fullPath), output, ident,
 first)
         ident -= 1
       for i in range(ident) :
@@ -395,8 +366,8 @@ first)
       for i in range(ident) :
         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)
+                'im1="document.png" im2="document.png"/>'%(item.name,
+item.fullPath, itemColor,) + os.linesep)
 
     return output
     
-- 
2.30.9