[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[myserver-commit] [3006] first step developing myserver-get: implemented
From: |
Daniele Perrone |
Subject: |
[myserver-commit] [3006] first step developing myserver-get: implemented simple skeleton and update command. |
Date: |
Fri, 20 Feb 2009 23:23:23 +0000 |
Revision: 3006
http://svn.sv.gnu.org/viewvc/?view=rev&root=myserver&revision=3006
Author: dperrone
Date: 2009-02-20 23:23:22 +0000 (Fri, 20 Feb 2009)
Log Message:
-----------
first step developing myserver-get: implemented simple skeleton and update
command.
Added Paths:
-----------
trunk/misc/myserver-get/
trunk/misc/myserver-get/list/
trunk/misc/myserver-get/myserver-get.py
trunk/misc/myserver-get/myserverGetLib/
trunk/misc/myserver-get/myserverGetLib/__init__.py
trunk/misc/myserver-get/myserverGetLib/config.py
trunk/misc/myserver-get/myserverGetLib/error.py
trunk/misc/myserver-get/myserverGetLib/general.py
trunk/misc/myserver-get/myserverGetLib/local.py
trunk/misc/myserver-get/myserverGetLib/remote.py
trunk/misc/myserver-get/myserverGetLib/remoteSvn.py
trunk/misc/myserver-get/repositories.xml
Added: trunk/misc/myserver-get/myserver-get.py
===================================================================
--- trunk/misc/myserver-get/myserver-get.py (rev 0)
+++ trunk/misc/myserver-get/myserver-get.py 2009-02-20 23:23:22 UTC (rev
3006)
@@ -0,0 +1,34 @@
+from myserverGetLib.general import MyServerGet
+import sys
+import getopt
+
+def usage(arg):
+ print "usage: myserver-get update "
+
+def main(argv):
+ myserverGet = MyServerGet()
+ argument = ""
+ command = ""
+
+ commands = {"":usage, "update":myserverGet.update}
+
+ try:
+ opts, args = getopt.getopt(argv, "h", ["help"])
+ except getopt.GetoptError:
+ usage()
+ sys.exit(2)
+ for opt, arg in opts:
+ if opt in ("-h", "--help"):
+ usage("")
+ sys.exit()
+
+ for arg in args:
+ if arg in ("update"):
+ command = arg
+ else:
+ argument = arg
+
+ commands[command](argument)
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
\ No newline at end of file
Property changes on: trunk/misc/myserver-get/myserverGetLib
___________________________________________________________________
Added: svn:mergeinfo
+
Added: trunk/misc/myserver-get/myserverGetLib/__init__.py
===================================================================
--- trunk/misc/myserver-get/myserverGetLib/__init__.py
(rev 0)
+++ trunk/misc/myserver-get/myserverGetLib/__init__.py 2009-02-20 23:23:22 UTC
(rev 3006)
@@ -0,0 +1,2 @@
+#
+
Added: trunk/misc/myserver-get/myserverGetLib/config.py
===================================================================
--- trunk/misc/myserver-get/myserverGetLib/config.py
(rev 0)
+++ trunk/misc/myserver-get/myserverGetLib/config.py 2009-02-20 23:23:22 UTC
(rev 3006)
@@ -0,0 +1,16 @@
+
+CNFG_FILE = "myserver-get.xml"
+
+REP_LIST_FILE = "repositories.xml"
+
+PLUGIN_LIST_FILES_DIR = "list"
+
+PLUGIN_LIST_PREFIX = "myserver-get-"
+
+PLUGIN_LIST_SUFFIX = "-plugin-list.xml"
+
+
+
+class ConfigLoader:
+ def __init__(self, configFile):
+ self.__configFile = configFile
\ No newline at end of file
Added: trunk/misc/myserver-get/myserverGetLib/error.py
===================================================================
--- trunk/misc/myserver-get/myserverGetLib/error.py
(rev 0)
+++ trunk/misc/myserver-get/myserverGetLib/error.py 2009-02-20 23:23:22 UTC
(rev 3006)
@@ -0,0 +1,24 @@
+
+
+class Error(Exception):
+ def __init__(self, value):
+ self.value = value
+
+ def __str__(self):
+ return repr(self.value)
+
+class FatalError(Error):
+ def __init__(self, value):
+ self.value = value
+
+ def __str__(self):
+ return repr(self.value)
+
+class Warning(Exception):
+ def __init__(self, value):
+ self.value = value
+
+ def __str__(self):
+ return repr(self.value)
+
+
Added: trunk/misc/myserver-get/myserverGetLib/general.py
===================================================================
--- trunk/misc/myserver-get/myserverGetLib/general.py
(rev 0)
+++ trunk/misc/myserver-get/myserverGetLib/general.py 2009-02-20 23:23:22 UTC
(rev 3006)
@@ -0,0 +1,25 @@
+import xml.dom.minidom
+import local
+import config
+import remote
+import remoteSvn
+
+class MyServerGet:
+ def __init__(self, repositoryFile = config.REP_LIST_FILE, listDir =
config.PLUGIN_LIST_FILES_DIR):
+ self.__rep = repositoryFile
+ self.__listDir = listDir
+ self.__repManager = remote.RepositoryManager()
+ self.__repManager.addSupportedRepository("svn",remoteSvn.RepositorySvn)
+ self.__list = []
+
+ def loadRepositoryList(self):
+ list = xml.dom.minidom.parse(self.__rep)
+ repXmlList = list.getElementsByTagName("REPOSITORY")
+ self.__list =
[local.ListManager(repXml.firstChild.data,self.__listDir) for repXml in
repXmlList]
+
+ def update(self, arg):
+ self.loadRepositoryList()
+ for list in self.__list:
+ rep = self.__repManager.getRepository(list.repository)
+ rep = rep(list.repository)
+ rep.synchronizeListWithRepository(list)
\ No newline at end of file
Added: trunk/misc/myserver-get/myserverGetLib/local.py
===================================================================
--- trunk/misc/myserver-get/myserverGetLib/local.py
(rev 0)
+++ trunk/misc/myserver-get/myserverGetLib/local.py 2009-02-20 23:23:22 UTC
(rev 3006)
@@ -0,0 +1,144 @@
+import xml.dom.minidom
+import error
+import config
+
+class PluginInfoElement:
+ def __init__(self,name,element, document):
+ self.name = name
+ self.element = element
+ self.document = document
+
+ def __getitem__(self, key):
+ if key == "value":
+ return self.__element.firstChild.data
+ att = self.element.attributes[key]
+ if att!=None:
+ return att.value
+
+ def __setitem__(self, key, item):
+ if key == "value":
+ self.document.createTextNode(item)
+ oldChild = self.__element.firstChild
+ self.element.replaceChild(newChild,oldChild)
+ self.element.setAttribute(key,item)
+
+
+class PluginInfo:
+ def __init__(self,xmlElement, manager):
+ self.__xmlElement = xmlElement
+ self.__manager = manager
+
+ def __getitem__(self, key):
+ elementList = self.__xmlElement.getElementsByTagName(key)
+
+ return [PluginInfoElement(key,element.childNodes[0].data, element,
self.__manager) for element in elementList]
+
+ def __setitem__(self, key, item):
+ elementList = self.__xmlElement.getElementsByTagName(key)
+ for element in elementList:
+ self.__xmlElement.removeChild(element)
+
+ for element in item:
+ self.__xmlElement.appendChild(element.element)
+ element.document = self.__manager.listDOM
+
+ def getMyServerMinVersion(self):
+ return self.__mxlElement.getAttribute("min-version")
+
+ def getMyServerMaxVersion(self):
+ return self.__mxlElement.getAttribute("max-version")
+
+ def finalize(self):
+ self.__manager.synchronizeListWithFileSystem()
+
+class ListManager:
+ def __init__ (self,repository, listFilePath, listFile = None):
+ self.repository = repository
+
+ if listFile != None:
+ self.FileName = listFilePath + "/" + listFile;
+ else:
+ self.FileName = listFilePath + "/" + config.PLUGIN_LIST_PREFIX +
"-".join(self.repository.split("/")) + config.PLUGIN_LIST_SUFFIX;
+
+ try:
+ self.listDOM = xml.dom.minidom.parse(self.FileName)
+ except Exception:
+ self.resetToEmptyListFile("-1")
+ self.synchronizeListWithFileSystem()
+
+
+
+
+ def resetToEmptyListFile(self,revision):
+ self.listDOM = xml.dom.minidom.Document()
+ plugins = self.listDOM.createElement("PLUGINS")
+ plugins.setAttribute("repository",self.repository)
+ plugins.setAttribute("revision",revision)
+ self.listDOM.appendChild(plugins)
+
+
+ def synchronizeListWithFileSystem (self):
+ file_object = open(self.FileName, "w")
+ self.listDOM.writexml(file_object,"","", "\n")
+ file_object.close()
+
+
+ def getPlugin(self,name):
+ plugins = self.listDOM.getElementsByTagName("plugin")
+
+ plugin = [elem for elem in plugins if elem.attributes["name"].value ==
name]
+
+ if len(plugin)==1:
+ pluginDOM = plugin[0]
+ plugin = PluginInfo(pluginDOM,self)
+ return plugin
+
+ raise error.Error("Plugin "+ name + "doesn't exists! in " +
self.repository)
+
+
+ def addPlugin(self,name, minVersion, maxVersion):
+ plugin = self.listDOM.createElement("PLUGIN")
+
+ name = self.listDOM.createElement("NAME")
+ name.appendChild(self.listDOM.createTextNode(name))
+
+ plugin.appendChild(name)
+ plugin.setAttribute("min-version",`minVersion`)
+ plugin.setAttribute("max-version",`maxVersion`)
+
+ plugins = self.listDOM.getElementsByTagName("PLUGINS")
+ if plugins!=None:
+ plugins[0].appendChild(plugin)
+ pluginInfo = PluginInfo(plugin,self)
+ return pluginInfo
+
+ raise error.FatalError(self.FileName + "corrupted!")
+
+
+ def addPluginWithXml(self,pluginXml):
+ plugins = self.listDOM.getElementsByTagName("PLUGINS")
+ if plugins!=None:
+ plugins[0].appendChild(pluginXml)
+ pluginInfo = PluginInfo(pluginXml,self)
+ return pluginInfo
+
+ raise error.FatalError(self.FileName + "corrupted!")
+
+
+ def getPluginsList(self):
+ plugins = self.listDOM.getElementsByTagName("PLUGIN")
+
+ return [PluginInfo(plugin,self) for plugin in plugins]
+
+
+ def getRevision(self):
+ pluginsList = self.listDOM.getElementsByTagName("PLUGINS")
+ plugins = pluginsList[0]
+ return plugins.getAttribute("revision")
+
+
+if __name__ == "__main__":
+ manager = ListManager("localhost.it",".","localhost.it-plugins.list")
+ plugin = manager.getPlugin("prova")
+ print plugin["description"]
+ plugin.finalize()
\ No newline at end of file
Added: trunk/misc/myserver-get/myserverGetLib/remote.py
===================================================================
--- trunk/misc/myserver-get/myserverGetLib/remote.py
(rev 0)
+++ trunk/misc/myserver-get/myserverGetLib/remote.py 2009-02-20 23:23:22 UTC
(rev 3006)
@@ -0,0 +1,29 @@
+import string
+
+class Repository:
+ def __init__(self,url):
+ self.url = url
+
+
+ def synchronizeListWithRepository(self, list):
+ pass
+
+
+
+class RepositoryManager:
+ def __init__(self):
+ self.__reps = {}
+
+ def addSupportedRepository(self, protocol, repository):
+ self.__reps[protocol] = repository
+
+ def getRepository(self, url):
+ url = string.lower(url)
+ if string.find(url,"svn")!=-1:
+ return self.__reps["svn"]
+ return None
+
+if __name__ == "__main__":
+ list = local.ListManager("localhost.it",".")
+ rep = Repository("svn://svn.savannah.gnu.org/myserver/trunk/plugins")
+ rep.synchronizeListWithRepository(list)
\ No newline at end of file
Added: trunk/misc/myserver-get/myserverGetLib/remoteSvn.py
===================================================================
--- trunk/misc/myserver-get/myserverGetLib/remoteSvn.py
(rev 0)
+++ trunk/misc/myserver-get/myserverGetLib/remoteSvn.py 2009-02-20 23:23:22 UTC
(rev 3006)
@@ -0,0 +1,50 @@
+import pysvn
+import local
+import error
+import xml.dom.minidom
+from remote import Repository
+import sys
+
+class RepositorySvn(Repository):
+ def __init__ (self,url):
+ Repository.__init__(self,url)
+ self.client = pysvn.Client()
+
+ def __getPluginsList(self):
+ plugins = self.client.list(self.url + "/src",recurse=False)
+ import string
+ plugins = [string.split(elem[0]["repos_path"],"/")[-1] for elem in
plugins]
+ return plugins[1:]
+
+ def synchronizeListWithRepository(self, list):
+ sys.stdout.write("update: "+ list.repository + '\n')
+ sys.stdout.write("loading ")
+ sys.stdout.flush()
+ localRevision = int(list.getRevision())
+ info = self.client.info2(self.url, recurse=False)
+ sys.stdout.write(". ")
+ sys.stdout.flush()
+ remoteRevision = int(info[0][1]["rev"].number)
+ if localRevision == remoteRevision:
+ sys.stdout.write("local list already updated.\n")
+ sys.stdout.flush()
+ if localRevision > remoteRevision:
+ raise error.FatalError("Local plugins list corrupted!!")
+
+ if localRevision < remoteRevision:
+ list.resetToEmptyListFile(`remoteRevision`)
+ sys.stdout.write(". ")
+ sys.stdout.flush()
+ plugins = self.__getPluginsList()
+ sys.stdout.write(". ")
+ sys.stdout.flush()
+ for plugin in plugins:
+ url = self.url + "/src/" + plugin + "/plugin.xml"
+ pluginXml = xml.dom.minidom.parseString(self.client.cat(url))
+ sys.stdout.write(". ")
+ sys.stdout.flush()
+ element = pluginXml.getElementsByTagName("PLUGIN")
+ pluginInfo = list.addPluginWithXml(element[0])
+ list.synchronizeListWithFileSystem()
+ sys.stdout.write("DONE.\n")
+ sys.stdout.flush()
Added: trunk/misc/myserver-get/repositories.xml
===================================================================
--- trunk/misc/myserver-get/repositories.xml (rev 0)
+++ trunk/misc/myserver-get/repositories.xml 2009-02-20 23:23:22 UTC (rev
3006)
@@ -0,0 +1,3 @@
+<REPOSITORIES>
+ <REPOSITORY>svn://svn.savannah.gnu.org/myserver/trunk/plugins</REPOSITORY>
+</REPOSITORIES>
\ No newline at end of file
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [myserver-commit] [3006] first step developing myserver-get: implemented simple skeleton and update command.,
Daniele Perrone <=