summaryrefslogtreecommitdiffstats
path: root/pym/getbinpkg.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2006-08-07 02:42:48 +0000
committerZac Medico <zmedico@gentoo.org>2006-08-07 02:42:48 +0000
commit2312bd7c7f01fbf32b23565011d03a29aca2f86e (patch)
treed094fdf29d92d0ef833e38de5255a7e468d82f57 /pym/getbinpkg.py
parent66259e313ce1c7c0cb78b8b018ec09e1411bcc68 (diff)
downloadportage-2312bd7c7f01fbf32b23565011d03a29aca2f86e.tar.gz
portage-2312bd7c7f01fbf32b23565011d03a29aca2f86e.tar.bz2
portage-2312bd7c7f01fbf32b23565011d03a29aca2f86e.zip
Cleanse stale metadata cache for binpkgs that have been removed from the remote host. Thanks to André Luiz A. G. Carvalho <alcarvalho@gmail.com> for the initial patch from bug #107453.
svn path=/main/trunk/; revision=4182
Diffstat (limited to 'pym/getbinpkg.py')
-rw-r--r--pym/getbinpkg.py12
1 files changed, 12 insertions, 0 deletions
diff --git a/pym/getbinpkg.py b/pym/getbinpkg.py
index 2fe92b2de..bb9c12e45 100644
--- a/pym/getbinpkg.py
+++ b/pym/getbinpkg.py
@@ -3,6 +3,8 @@
# Distributed under the terms of the GNU General Public License v2
# $Id$
+if not hasattr(__builtins__, "set"):
+ from sets import Set as set
from output import *
import htmllib,HTMLParser,string,formatter,sys,os,xpak,time,tempfile,base64,urllib2
@@ -511,8 +513,10 @@ def dir_get_metadata(baseurl, conn=None, chunk_size=3000, verbose=1, usingcache=
break
# We may have metadata... now we run through the tbz2 list and check.
sys.stderr.write(yellow("cache miss: 'x'")+" --- "+green("cache hit: 'o'")+"\n")
+ binpkg_filenames = set()
for x in tbz2list:
x = os.path.basename(x)
+ binpkg_filenames.add(x)
if ((not metadata[baseurl]["data"].has_key(x)) or \
(x not in metadata[baseurl]["data"].keys())):
sys.stderr.write(yellow("x"))
@@ -525,6 +529,14 @@ def dir_get_metadata(baseurl, conn=None, chunk_size=3000, verbose=1, usingcache=
sys.stderr.write(red("!!! Failed to retrieve metadata on: ")+str(x)+"\n")
else:
sys.stderr.write(green("o"))
+ # Cleanse stale cache for files that don't exist on the server anymore.
+ stale_cache = set(metadata[baseurl]["data"]).difference(binpkg_filenames)
+ if stale_cache:
+ for x in stale_cache:
+ del metadata[baseurl]["data"][x]
+ metadata[baseurl]["modified"] = 1
+ del stale_cache
+ del binpkg_filenames
sys.stderr.write("\n")
try: