Commit 2695762c authored by Christophe Dumez's avatar Christophe Dumez

- added functions to get the XML Tree of the modified files in working copy


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@6140 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 4cba39e4
...@@ -32,6 +32,7 @@ from Products.ERP5Type.Utils import convertToUpperCase ...@@ -32,6 +32,7 @@ from Products.ERP5Type.Utils import convertToUpperCase
from MethodObject import Method from MethodObject import Method
from Globals import InitializeClass from Globals import InitializeClass
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions
try: try:
import pysvn import pysvn
...@@ -126,19 +127,23 @@ try: ...@@ -126,19 +127,23 @@ try:
value = getattr(instance._obj, self._key) value = getattr(instance._obj, self._key)
if type(value) == type(u''): if type(value) == type(u''):
value = value.encode('utf-8') value = value.encode('utf-8')
elif isinstance(value, pysvn.Entry): #elif isinstance(value, pysvn.Entry):
elif str(type(value)) == "<type 'entry'>":
value = Entry(value) value = Entry(value)
elif isinstance(value, pysvn.Revision): #elif isinstance(value, pysvn.Revision):
elif str(type(value)) == "<type 'revision'>":
value = Revision(value) value = Revision(value)
return value return value
def initializeAccessors(klass): def initializeAccessors(klass):
klass.security = ClassSecurityInfo() klass.security = ClassSecurityInfo()
klass.security.declareObjectPublic()
for attr in klass.attribute_list: for attr in klass.attribute_list:
name = 'get' + convertToUpperCase(attr) name = 'get' + convertToUpperCase(attr)
print name
setattr(klass, name, Getter(attr)) setattr(klass, name, Getter(attr))
klass.security.declarePublic(name) klass.security.declarePublic(name)
InitializeClass(Status) InitializeClass(klass)
class ObjectWrapper(Implicit): class ObjectWrapper(Implicit):
attribute_list = () attribute_list = ()
...@@ -147,8 +152,9 @@ try: ...@@ -147,8 +152,9 @@ try:
self._obj = obj self._obj = obj
class Status(ObjectWrapper): class Status(ObjectWrapper):
attribute_list = ('path', 'entry', 'is_versioned', 'is_locked', 'is_copied', 'is_switched', # XXX Big Hack to fix a bug
'prop_status', 'text_status', 'repos_prop_status', 'repos_text_status') __allow_access_to_unprotected_subobjects__ = 1
attribute_list = ('path', 'entry', 'is_versioned', 'is_locked', 'is_copied', 'is_switched', 'prop_status', 'text_status', 'repos_prop_status', 'repos_text_status')
initializeAccessors(Status) initializeAccessors(Status)
class Entry(ObjectWrapper): class Entry(ObjectWrapper):
...@@ -202,6 +208,6 @@ try: ...@@ -202,6 +208,6 @@ try:
except ImportError: except ImportError:
from zLOG import LOG, WARNING from zLOG import LOG, WARNING
LOG('SubversionTool', WARNING, LOG('SubversionTool', WARNING,
'could not import pysvn; until pysvn is installed properly, this tool will not function.') 'could not import pysvn; until pysvn is installed properly, this tool will not work.')
def newSubversionClient(container, **kw): def newSubversionClient(container, **kw):
raise SubversionInstallationError, 'pysvn is not installed' raise SubversionInstallationError, 'pysvn is not installed'
...@@ -44,7 +44,42 @@ try: ...@@ -44,7 +44,42 @@ try:
from base64 import b64encode, b64decode from base64 import b64encode, b64decode
except ImportError: except ImportError:
from base64 import encodestring as b64encode, decodestring as b64decode from base64 import encodestring as b64encode, decodestring as b64decode
class File :
# Constructor
def __init__(self, fileName) :
self.fileName = fileName
# return the file name
def getName(self) :
return self.fileName
## End of File Class
class Dir :
# Constructor
def __init__(self, dirName) :
self.dirName = dirName
self.subdirs = [] # list of sub directories
# return directory's short name
def getName(self) :
return self.dirName
# 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 directory in subdirs given its name
def getDir(self, name):
for d in self.subdirs:
if d.getName() == name:
return d
## End of Dir Class
class SubversionTool(UniqueObject, Folder): class SubversionTool(UniqueObject, Folder):
"""The SubversionTool provides a Subversion interface to ERP5. """The SubversionTool provides a Subversion interface to ERP5.
""" """
...@@ -244,5 +279,53 @@ class SubversionTool(UniqueObject, Folder): ...@@ -244,5 +279,53 @@ class SubversionTool(UniqueObject, Folder):
""" """
client = self._getClient() client = self._getClient()
return client.status(self._getWorkingPath(path), **kw) return client.status(self._getWorkingPath(path), **kw)
def getModifiedTree(self, path) :
if path[-1]=="/" :
path = path[:-1]
root = Dir(path.split('/')[-1])
for statusObj in self.status(path) :
# (normal, added, modified, deleted)
msgStatus = statusObj.getTextStatus()
if str(msgStatus) != "normal" :
relative_path = statusObj.getPath()[len(path)+1:]
# Processing entry
full_path = relative_path.split('/')
filename = full_path[-1]
full_path = full_path[:-1]
parent = root
for rep in full_path :
if rep:
if rep not in parent.getSubDirs():
parent.addSubDir(Dir(rep))
parent = parent.getDir(rep)
parent.addSubDir(File(filename))
return root
def treeToXML(self, item) :
return self._treeToXML(item, "", 0)
def _treeToXML(self, item, output, ident) :
if isinstance(item, Dir) :
for i in range(ident) :
output += '\t'
output += '<item type="directory" name="%s">'%item.getName() + os.linesep
for it in item.subdirs:
ident += 1
output = self._treeToXML(item.getDir(it.getName()), output, ident)
ident -= 1
for i in range(ident) :
output += '\t'
output += '</item>' + os.linesep
else :
for i in range(ident) :
output += '\t'
output += '<item type="file" name="%s" />'%item.getName() + os.linesep
return output
InitializeClass(SubversionTool) InitializeClass(SubversionTool)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment