[Uludag-commits] r15603 - branches/pisi-db/pisi/db

uludag-commits at pardus.org.tr uludag-commits at pardus.org.tr
3 Eki 2007 Çar 11:35:27 EEST


Author: faik
Date: Wed Oct  3 11:35:26 2007
New Revision: 15603

Modified:
   branches/pisi-db/pisi/db/repodb.py
Log:
Repo order management


Modified: branches/pisi-db/pisi/db/repodb.py
=================================================================
--- branches/pisi-db/pisi/db/repodb.py	(original)
+++ branches/pisi-db/pisi/db/repodb.py	Wed Oct  3 11:35:26 2007
@@ -26,10 +26,74 @@
 
 medias = (cd, usb, remote, local) = range(4)
 
+class RepoOrder:
+
+    def __init__(self):
+        self.repos = self._get_repos() 
+
+    def add(self, repo_name, repo_url, repo_type="remote"):
+        repo_doc = self._get_doc()
+
+        try:
+            node = [x for x in repo_doc.tags("Repo")][-1]
+            repo_node = node.appendTag("Repo")
+        except IndexError:
+            repo_node = repo_doc.insertTag("Repo")
+        
+        name_node = repo_node.insertTag("Name")
+        name_node.insertData(repo_name)
+
+        url_node = repo_node.insertTag("Url")
+        url_node.insertData(repo_url)
+
+        media_node = repo_node.insertTag("Media")
+        media_node.insertData(repo_type)
+
+        self._update(repo_doc)
+
+    def remove(self, repo_name):
+        repo_doc = self._get_doc()
+
+        for r in repo_doc.tags("Repo"):
+            if r.getTagData("Name") == repo_name:
+                r.hide()
+
+        self._update(repo_doc)
+
+    def get_order(self):
+        order = []
+
+        #FIXME: get media order from pisi.conf
+        for m in ["cd", "usb", "remote", "local"]:
+            if self.repos.has_key(m):
+                order.extend(self.repos[m])
+
+        return order
+
+    def _update(self, doc):
+        repos_file = os.path.join(ctx.config.lib_dir(), ctx.const.info_dir, ctx.const.repos)
+        open(repos_file, "w").write("%s\n" % doc.toPrettyString())
+        self.repos = self._get_repos()
+
+    def _get_doc(self):
+        repos_file = os.path.join(ctx.config.lib_dir(), ctx.const.info_dir, ctx.const.repos)
+        return piksemel.parse(repos_file)
+
+    def _get_repos(self):
+        repo_doc = self._get_doc()
+        order = {}
+
+        for r in repo_doc.tags("Repo"):
+            media = r.getTagData("Media")
+            name = r.getTagData("Name")
+            order.setdefault(media, []).append(name)
+
+        return order
+
 class RepoDB(object):
 
     def __init__(self):
-        self.__repoorder = self.__get_repoorder()
+        self.repoorder = RepoOrder()
 
     def has_repo(self, name):
         return name in self.list_repos()
@@ -50,9 +114,11 @@
         os.makedirs(repo_path)
         urifile_path = pisi.util.join_path(ctx.config.index_dir(), name, "uri")
         uri = open(urifile_path, "w").write(repo_info.indexuri.get_uri())
+        self.repoorder.add(name, repo_info.indexuri.get_uri())
 
     def remove_repo(self, name):
         pisi.util.clean_dir(os.path.join(ctx.config.index_dir(), name))
+        self.repoorder.remove(name)
 
     def get_source_repos(self):
         repos = []
@@ -69,23 +135,4 @@
         return repos
 
     def list_repos(self):
-        order = []
-
-        #FIXME: get media order from pisi.conf
-        for m in ["cd", "usb", "remote", "local"]:
-            if self.__repoorder.has_key(m):
-                order.extend(self.__repoorder[m])
-
-        return order
-
-    def __get_repoorder(self):
-        repos_file = os.path.join(ctx.config.lib_dir(), ctx.const.info_dir, ctx.const.repos)
-        repos = piksemel.parse(repos_file)
-        order = {}
-
-        for r in repos.tags():
-            media = r.getTagData("Media")
-            name = r.getTagData("Name")
-            order.setdefault(media, []).append(name)
-
-        return order
+        return self.repoorder.get_order()


Uludag-commits mesaj listesiyle ilgili daha fazla bilgi