[paketler-commits] r15761 - devel/system/base/pisi/comar

paketler-uludag at uludag.org.tr paketler-uludag at uludag.org.tr
1 Ara 2006 Cum 21:29:47 EET


Author: faik
Date: Fri Dec  1 21:29:47 2006
New Revision: 15761

Modified:
   devel/system/base/pisi/comar/manager.py
Log:
very sorry i missed this :((


Modified: devel/system/base/pisi/comar/manager.py
=================================================================
--- devel/system/base/pisi/comar/manager.py	(original)
+++ devel/system/base/pisi/comar/manager.py	Fri Dec  1 21:29:47 2006
@@ -22,6 +22,8 @@
     import pisi.lockeddbshelve
     import pisi.ui
     import pisi.context
+    import pisi.util as util
+    from pisi.version import Version
 except KeyboardInterrupt:
     fail("System.Manager.cancelled")
 
@@ -119,27 +121,27 @@
 def removePackage(package=None):
     _init_pisi()
     if package:
-	try:
+        try:
             package = package.split(",")
             pisi.api.remove(package)
             pisi.api.finalize()
         except KeyboardInterrupt:
             cancelled()
-	except Exception, e:
-	    fail(unicode(e))
+        except Exception, e:
+            fail(unicode(e))
     finished("System.Manager.removePackage")
 
-def updateRepository(repo=None):
+def updateRepository(repository=None):
     _init_pisi()
-    if repo:
-	try:
-            notify("System.Manager.updatingRepo","%s" % repo)
-            pisi.api.update_repo(repo)
+    if repository:
+        try:
+            notify("System.Manager.updatingRepo","%s" % repository)
+            pisi.api.update_repo(repository)
             pisi.api.finalize()
         except KeyboardInterrupt:
             cancelled()
-	except Exception, e:
-	    fail(unicode(e))
+        except Exception, e:
+            fail(unicode(e))
     finished("System.Manager.updateRepository")
 
 def updateAllRepositories():
@@ -164,19 +166,19 @@
         except KeyboardInterrupt:
             cancelled()
         except Exception, e:
-	    fail(unicode(e))
+            fail(unicode(e))
     finished("System.Manager.addRepository")
 
 def removeRepository(repo=None):
     _init_pisi()
     if repo:
-	try:
+        try:
             pisi.api.remove_repo(repo)
             pisi.api.finalize()
         except KeyboardInterrupt:
             cancelled()
-	except Exception, e:
-	    fail(unicode(e))
+        except Exception, e:
+            fail(unicode(e))
     finished("System.Manager.removeRepository")
 
 def installCritical():
@@ -223,3 +225,67 @@
         except Exception, e:
             fail(unicode(e))
     finished("System.Manager.setRepositories")
+
+def clearCache(cacheDir, limit):
+    import os
+    import glob
+    from sets import Set as set
+
+    def getPackageLists(pkgList):
+        latest = {}
+        for f in pkgList:
+            try:
+                name, version = util.parse_package_name(f)
+                if latest.has_key(name):
+                    if Version(latest[name]) < Version(version):
+                        latest[name] = version
+                else:
+                    if version:
+                        latest[name] = version
+            except:
+                pass
+
+        latestVersions = []
+        for pkg in latest:
+            latestVersions.append("%s-%s" % (pkg, latest[pkg]))
+
+        oldVersions = list(set(pkgList) - set(latestVersions))
+        return oldVersions, latestVersions
+
+    def getRemoveOrder(cacheDir, pkgList):
+        sizes = {}
+        for pkg in pkgList:
+            sizes[pkg] = os.stat(os.path.join(cacheDir, pkg) + ".pisi").st_size
+
+        # sort dictionary by value from PEP-265
+        from operator import itemgetter
+        return sorted(sizes.iteritems(), key=itemgetter(1), reverse=False)
+
+    def removeOrderByLimit(cacheDir, order, limit):
+        totalSize = 0
+        for pkg, size in order:
+            totalSize += size
+            if totalSize >= limit:
+                try:
+                    os.remove(os.path.join(cacheDir, pkg) + ".pisi")
+                except exceptions.OSError:
+                    pass
+
+    def removeAll(cacheDir):
+        cached = glob.glob("%s/*.pisi" % cacheDir) + glob.glob("%s/*.part" % cacheDir)
+        for pkg in cached:
+            try:
+                os.remove(pkg)
+            except exceptions.OSError:
+                pass
+
+    limit = int(limit)
+    pkgList = map(lambda x: os.path.basename(x).split(".pisi")[0], glob.glob("%s/*.pisi" % cacheDir))
+    if limit:
+        old, latest = getPackageLists(pkgList)
+        order = getRemoveOrder(cacheDir, latest) + getRemoveOrder(cacheDir, old)
+        removeOrderByLimit(cacheDir, order, limit)
+    else:
+        removeAll(cacheDir)
+
+    finished("System.Manager.clearCache")


Paketler-commits mesaj listesiyle ilgili daha fazla bilgi