Selamlar,

18681 nolu hata kaydında [0] belirtildiği gibi, Pisi API'sinin repodb 
modülünde "get_repo_url"  ve "get_repo_doc" gibi bazı fonksiyonlar, ilgili 
depoların sistemde varlığını kontrol etmeden depolar ile ilgili işlem yapmaya 
çalışıyor. Bu da exceptionların ortaya çıkmasına neden oluyor, ancak bunlar da 
handle edilmiyor maalesef. 

Bu durumları düzgün handle edecek exception'ları içeren bir yama hazırladım. 
Gözden geçirelim, daha sonra da merge ederiz.

İyi çalışmalar.

[0] http://bugs.pardus.org.tr/show_bug.cgi?id=18681
-- 
Metin Akdere
See http://bugs.pardus.org.tr/show_bug.cgi?id=18681

Index: pisi/db/repodb.py
===================================================================
--- pisi/db/repodb.py	(revision 38426)
+++ pisi/db/repodb.py	(working copy)
@@ -151,36 +151,42 @@
         return url in self.list_repo_urls(only_active)
 
     def get_repo_doc(self, repo_name):
-        repo = self.get_repo(repo_name)
+        if self.has_repo(repo_name):
+            repo = self.get_repo(repo_name)
 
-        index_path = repo.indexuri.get_uri()
+            index_path = repo.indexuri.get_uri()
 
-        #FIXME Local index files should also be cached.
-        if File.is_compressed(index_path) or repo.indexuri.is_remote_file():
-            index = os.path.basename(index_path)
-            index_path = pisi.util.join_path(ctx.config.index_dir(),
-                                             repo_name, index)
+            #FIXME Local index files should also be cached.
+            if File.is_compressed(index_path) or repo.indexuri.is_remote_file():
+                index = os.path.basename(index_path)
+                index_path = pisi.util.join_path(ctx.config.index_dir(),
+                                                 repo_name, index)
 
-            if File.is_compressed(index_path):
-                index_path = os.path.splitext(index_path)[0]
+                if File.is_compressed(index_path):
+                    index_path = os.path.splitext(index_path)[0]
 
-        if not os.path.exists(index_path):
-            ctx.ui.warning(_("%s repository needs to be updated") % repo_name)
-            return piksemel.newDocument("PISI")
+            if not os.path.exists(index_path):
+                ctx.ui.warning(_("%s repository needs to be updated") % repo_name)
+                return piksemel.newDocument("PISI")
 
-        try:
-            return piksemel.parse(index_path)
-        except Exception, e:
-            raise RepoError(_("Error parsing repository index information. Index file does not exist or is malformed."))
+            try:
+                return piksemel.parse(index_path)
+            except Exception, e:
+                raise RepoError(_("Error parsing repository index information. Index file does not exist or is malformed."))
+        else:
+            raise RepoError(_('Repository %s does not exist. Cannot get repo document.' % repo_name))
 
     def get_repo(self, repo):
         return Repo(pisi.uri.URI(self.get_repo_url(repo)))
 
     #FIXME: this method is a quick hack around repo_info.indexuri.get_uri()
     def get_repo_url(self, repo):
-        urifile_path = pisi.util.join_path(ctx.config.index_dir(), repo, "uri")
-        uri = open(urifile_path, "r").read()
-        return uri.rstrip()
+        if self.has_repo(repo):
+            urifile_path = pisi.util.join_path(ctx.config.index_dir(), repo, "uri")
+            uri = open(urifile_path, "r").read()
+            return uri.rstrip()
+        else:
+            raise RepoError(_('Repository %s does not exist. Cannot get repo URL.' % repo))
 
     def add_repo(self, name, repo_info, at = None):
         repo_path = pisi.util.join_path(ctx.config.index_dir(), name)

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
Gelistirici mailing list
Gelistirici@pardus.org.tr
http://liste.pardus.org.tr/mailman/listinfo/gelistirici

Cevap