# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

import gc
from portage.util.listdir import dircache

def clear_caches(trees):
	for d in trees.values():
		d["porttree"].dbapi.melt()
		d["porttree"].dbapi._aux_cache.clear()
		d["bintree"].dbapi._aux_cache.clear()
		d["bintree"].dbapi._clear_cache()
		if d["vartree"].dbapi._linkmap is None:
			# preserve-libs is entirely disabled
			pass
		else:
			d["vartree"].dbapi._linkmap._clear_cache()
	dircache.clear()
	gc.collect()
