- pisi.api.clearCache

This commit is contained in:
Faik Uygur
2007-05-22 13:58:32 +00:00
parent fb2edaf8e4
commit f4c9915ac0
2 changed files with 72 additions and 0 deletions
+70
View File
@@ -597,3 +597,73 @@ def resurrect_package(*args, **kw):
return pisi.atomicoperations.resurrect_package(*args, **kw)
########################################################################
## Deletes the cached pisi packages to keep the package cache dir within cache limits
# @param all When set all the cached packages will be deleted
def clearCache(all=False):
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
cacheDir = ctx.config.packages_dir()
pkgList = map(lambda x: os.path.basename(x).split(".pisi")[0], glob.glob("%s/*.pisi" % cacheDir))
if not all:
# Cache limits from pisi.conf
limit = int(ctx.config.values.general.package_cache_limit) * 1024 * 1024 # is this safe?
if not limit:
return
old, latest = getPackageLists(pkgList)
order = getRemoveOrder(cacheDir, latest) + getRemoveOrder(cacheDir, old)
removeOrderByLimit(cacheDir, order, limit)
else:
removeAll(cacheDir)
+2
View File
@@ -67,6 +67,8 @@ class GeneralDefaults:
http_proxy = os.getenv("HTTP_PROXY") or None
https_proxy = os.getenv("HTTPS_PROXY") or None
ftp_proxy = os.getenv("FTP_PROXY") or None
package_cache = True
package_cache_limit = 0
class BuildDefaults:
"""Default values for [build] section"""