public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage:master commit in: pym/portage/util/, pym/_emerge/
@ 2011-03-14 16:41 Zac Medico
  0 siblings, 0 replies; 5+ messages in thread
From: Zac Medico @ 2011-03-14 16:41 UTC (permalink / raw
  To: gentoo-commits

commit:     c410989b38b172e5d38a861cd795370344d74f62
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 14 16:40:40 2011 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Mar 14 16:40:40 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=c410989b

Update timestamps in headers of modified files.

---
 pym/_emerge/QueueScheduler.py |    2 +-
 pym/portage/util/__init__.py  |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/pym/_emerge/QueueScheduler.py b/pym/_emerge/QueueScheduler.py
index 2d727c9..a4ab328 100644
--- a/pym/_emerge/QueueScheduler.py
+++ b/pym/_emerge/QueueScheduler.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2010 Gentoo Foundation
+# Copyright 1999-2011 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 import time

diff --git a/pym/portage/util/__init__.py b/pym/portage/util/__init__.py
index 0e05a41..c288434 100644
--- a/pym/portage/util/__init__.py
+++ b/pym/portage/util/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2004-2010 Gentoo Foundation
+# Copyright 2004-2011 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 __all__ = ['apply_permissions', 'apply_recursive_permissions',



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/util/, pym/_emerge/
@ 2011-06-03  5:21 Zac Medico
  0 siblings, 0 replies; 5+ messages in thread
From: Zac Medico @ 2011-06-03  5:21 UTC (permalink / raw
  To: gentoo-commits

commit:     06e52616eb461c260ef8a006578babb04a4b5848
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Fri Jun  3 05:20:51 2011 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Jun  3 05:20:51 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=06e52616

autounmask-write: force configpro if non-existent

We want to force new_protect_filename to ensure that the user will see
all our changes via etc-update, even if file_to_write_to doesn't exist
yet.

---
 pym/_emerge/depgraph.py      |    7 ++++++-
 pym/portage/util/__init__.py |    9 ++++++---
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index b71d364..b60fd19 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -5846,7 +5846,12 @@ class depgraph(object):
 			if file_contents is not None:
 				file_contents.extend(changes)
 				if protect_obj[root].isprotected(file_to_write_to):
-					file_to_write_to = new_protect_filename(file_to_write_to)
+					# We want to force new_protect_filename to ensure
+					# that the user will see all our changes via
+					# etc-update, even if file_to_write_to doesn't
+					# exist yet, so we specify force=True.
+					file_to_write_to = new_protect_filename(file_to_write_to,
+						force=True)
 				try:
 					write_atomic(file_to_write_to, "".join(file_contents))
 				except PortageException:

diff --git a/pym/portage/util/__init__.py b/pym/portage/util/__init__.py
index 94e4451..138553a 100644
--- a/pym/portage/util/__init__.py
+++ b/pym/portage/util/__init__.py
@@ -1473,9 +1473,11 @@ class ConfigProtect(object):
 						masked = len(pmpath)
 		return protected > masked
 
-def new_protect_filename(mydest, newmd5=None):
+def new_protect_filename(mydest, newmd5=None, force=False):
 	"""Resolves a config-protect filename for merging, optionally
-	using the last filename if the md5 matches.
+	using the last filename if the md5 matches. If force is True,
+	then a new filename will be generated even if mydest does not
+	exist yet.
 	(dest,md5) ==> 'string'            --- path_to_target_filename
 	(dest)     ==> ('next', 'highest') --- next_target and most-recent_target
 	"""
@@ -1489,7 +1491,8 @@ def new_protect_filename(mydest, newmd5=None):
 	prot_num = -1
 	last_pfile = ""
 
-	if not os.path.exists(mydest):
+	if not force and \
+		not os.path.exists(mydest):
 		return mydest
 
 	real_filename = os.path.basename(mydest)



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/util/, pym/_emerge/
@ 2012-10-14 22:57 Zac Medico
  0 siblings, 0 replies; 5+ messages in thread
From: Zac Medico @ 2012-10-14 22:57 UTC (permalink / raw
  To: gentoo-commits

commit:     bf621eebc153cdadef6ef21af732691138a326e1
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 14 22:57:12 2012 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Oct 14 22:57:12 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=bf621eeb

chk_updated_info_files: move to separate file

---
 pym/_emerge/main.py             |  137 ++-------------------------------------
 pym/portage/util/_info_files.py |  138 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 143 insertions(+), 132 deletions(-)

diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py
index 9fb4275..76db4a8 100644
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@ -4,23 +4,23 @@
 from __future__ import print_function
 
 import logging
+import platform
 import signal
-import stat
-import subprocess
 import sys
 import textwrap
-import platform
+import time
+
 import portage
 portage.proxy.lazyimport.lazyimport(globals(),
 	'portage.news:count_unread_news,display_news_notifications',
 	'portage.emaint.modules.logs.logs:CleanLogs',
 	'portage.util._dyn_libs.display_preserved_libs:display_preserved_libs',
+	'portage.util._info_files:chk_updated_info_files',
 )
 from portage import os
 from portage import _encodings
 from portage import _unicode_decode
 import _emerge.help
-import portage.xpak, errno, re, time
 from portage.output import colorize, xtermTitle, xtermTitleReset
 from portage.output import create_color_func
 good = create_color_func("GOOD")
@@ -32,7 +32,6 @@ import portage.locks
 import portage.exception
 from portage.data import secpass
 from portage.dbapi.dep_expand import dep_expand
-from portage.util import normalize_path as normpath
 from portage.util import (shlex_split, varexpand,
 	writemsg_level, writemsg_stdout)
 from portage._sets import SETPREFIX
@@ -115,132 +114,6 @@ COWSAY_MOO = """
 
 """
 
-def chk_updated_info_files(root, infodirs, prev_mtimes, retval):
-
-	if os.path.exists("/usr/bin/install-info"):
-		out = portage.output.EOutput()
-		regen_infodirs=[]
-		for z in infodirs:
-			if z=='':
-				continue
-			inforoot=normpath(root+z)
-			if os.path.isdir(inforoot) and \
-				not [x for x in os.listdir(inforoot) \
-				if x.startswith('.keepinfodir')]:
-					infomtime = os.stat(inforoot)[stat.ST_MTIME]
-					if inforoot not in prev_mtimes or \
-						prev_mtimes[inforoot] != infomtime:
-							regen_infodirs.append(inforoot)
-
-		if not regen_infodirs:
-			portage.writemsg_stdout("\n")
-			if portage.util.noiselimit >= 0:
-				out.einfo("GNU info directory index is up-to-date.")
-		else:
-			portage.writemsg_stdout("\n")
-			if portage.util.noiselimit >= 0:
-				out.einfo("Regenerating GNU info directory index...")
-
-			dir_extensions = ("", ".gz", ".bz2")
-			icount=0
-			badcount=0
-			errmsg = ""
-			for inforoot in regen_infodirs:
-				if inforoot=='':
-					continue
-
-				if not os.path.isdir(inforoot) or \
-					not os.access(inforoot, os.W_OK):
-					continue
-
-				file_list = os.listdir(inforoot)
-				file_list.sort()
-				dir_file = os.path.join(inforoot, "dir")
-				moved_old_dir = False
-				processed_count = 0
-				for x in file_list:
-					if x.startswith(".") or \
-						os.path.isdir(os.path.join(inforoot, x)):
-						continue
-					if x.startswith("dir"):
-						skip = False
-						for ext in dir_extensions:
-							if x == "dir" + ext or \
-								x == "dir" + ext + ".old":
-								skip = True
-								break
-						if skip:
-							continue
-					if processed_count == 0:
-						for ext in dir_extensions:
-							try:
-								os.rename(dir_file + ext, dir_file + ext + ".old")
-								moved_old_dir = True
-							except EnvironmentError as e:
-								if e.errno != errno.ENOENT:
-									raise
-								del e
-					processed_count += 1
-					try:
-						proc = subprocess.Popen(
-							['/usr/bin/install-info',
-							'--dir-file=%s' % os.path.join(inforoot, "dir"),
-							os.path.join(inforoot, x)],
-							env=dict(os.environ, LANG="C", LANGUAGE="C"),
-							stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-					except OSError:
-						myso = None
-					else:
-						myso = _unicode_decode(
-							proc.communicate()[0]).rstrip("\n")
-						proc.wait()
-					existsstr="already exists, for file `"
-					if myso:
-						if re.search(existsstr,myso):
-							# Already exists... Don't increment the count for this.
-							pass
-						elif myso[:44]=="install-info: warning: no info dir entry in ":
-							# This info file doesn't contain a DIR-header: install-info produces this
-							# (harmless) warning (the --quiet switch doesn't seem to work).
-							# Don't increment the count for this.
-							pass
-						else:
-							badcount=badcount+1
-							errmsg += myso + "\n"
-					icount=icount+1
-
-				if moved_old_dir and not os.path.exists(dir_file):
-					# We didn't generate a new dir file, so put the old file
-					# back where it was originally found.
-					for ext in dir_extensions:
-						try:
-							os.rename(dir_file + ext + ".old", dir_file + ext)
-						except EnvironmentError as e:
-							if e.errno != errno.ENOENT:
-								raise
-							del e
-
-				# Clean dir.old cruft so that they don't prevent
-				# unmerge of otherwise empty directories.
-				for ext in dir_extensions:
-					try:
-						os.unlink(dir_file + ext + ".old")
-					except EnvironmentError as e:
-						if e.errno != errno.ENOENT:
-							raise
-						del e
-
-				#update mtime so we can potentially avoid regenerating.
-				prev_mtimes[inforoot] = os.stat(inforoot)[stat.ST_MTIME]
-
-			if badcount:
-				out.eerror("Processed %d info files; %d errors." % \
-					(icount, badcount))
-				writemsg_level(errmsg, level=logging.ERROR, noiselevel=-1)
-			else:
-				if icount > 0 and portage.util.noiselimit >= 0:
-					out.einfo("Processed %d info files." % (icount,))
-
 def post_emerge(myaction, myopts, myfiles,
 	target_root, trees, mtimedb, retval):
 	"""
@@ -311,7 +184,7 @@ def post_emerge(myaction, myopts, myfiles,
 		try:
 			if "noinfo" not in settings.features:
 				chk_updated_info_files(target_root,
-					infodirs, info_mtimes, retval)
+					infodirs, info_mtimes)
 			mtimedb.commit()
 		finally:
 			if vdb_lock:

diff --git a/pym/portage/util/_info_files.py b/pym/portage/util/_info_files.py
new file mode 100644
index 0000000..0e3a210
--- /dev/null
+++ b/pym/portage/util/_info_files.py
@@ -0,0 +1,138 @@
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+import errno
+import logging
+import re
+import stat
+import subprocess
+
+import portage
+from portage import os
+
+def chk_updated_info_files(root, infodirs, prev_mtimes):
+
+	if os.path.exists("/usr/bin/install-info"):
+		out = portage.output.EOutput()
+		regen_infodirs=[]
+		for z in infodirs:
+			if z=='':
+				continue
+			inforoot = portage.util.normalize_path(root + z)
+			if os.path.isdir(inforoot) and \
+				not [x for x in os.listdir(inforoot) \
+				if x.startswith('.keepinfodir')]:
+					infomtime = os.stat(inforoot)[stat.ST_MTIME]
+					if inforoot not in prev_mtimes or \
+						prev_mtimes[inforoot] != infomtime:
+							regen_infodirs.append(inforoot)
+
+		if not regen_infodirs:
+			portage.util.writemsg_stdout("\n")
+			if portage.util.noiselimit >= 0:
+				out.einfo("GNU info directory index is up-to-date.")
+		else:
+			portage.util.writemsg_stdout("\n")
+			if portage.util.noiselimit >= 0:
+				out.einfo("Regenerating GNU info directory index...")
+
+			dir_extensions = ("", ".gz", ".bz2")
+			icount=0
+			badcount=0
+			errmsg = ""
+			for inforoot in regen_infodirs:
+				if inforoot=='':
+					continue
+
+				if not os.path.isdir(inforoot) or \
+					not os.access(inforoot, os.W_OK):
+					continue
+
+				file_list = os.listdir(inforoot)
+				file_list.sort()
+				dir_file = os.path.join(inforoot, "dir")
+				moved_old_dir = False
+				processed_count = 0
+				for x in file_list:
+					if x.startswith(".") or \
+						os.path.isdir(os.path.join(inforoot, x)):
+						continue
+					if x.startswith("dir"):
+						skip = False
+						for ext in dir_extensions:
+							if x == "dir" + ext or \
+								x == "dir" + ext + ".old":
+								skip = True
+								break
+						if skip:
+							continue
+					if processed_count == 0:
+						for ext in dir_extensions:
+							try:
+								os.rename(dir_file + ext, dir_file + ext + ".old")
+								moved_old_dir = True
+							except EnvironmentError as e:
+								if e.errno != errno.ENOENT:
+									raise
+								del e
+					processed_count += 1
+					try:
+						proc = subprocess.Popen(
+							['/usr/bin/install-info',
+							'--dir-file=%s' % os.path.join(inforoot, "dir"),
+							os.path.join(inforoot, x)],
+							env=dict(os.environ, LANG="C", LANGUAGE="C"),
+							stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+					except OSError:
+						myso = None
+					else:
+						myso = portage._unicode_decode(
+							proc.communicate()[0]).rstrip("\n")
+						proc.wait()
+					existsstr="already exists, for file `"
+					if myso:
+						if re.search(existsstr,myso):
+							# Already exists... Don't increment the count for this.
+							pass
+						elif myso[:44]=="install-info: warning: no info dir entry in ":
+							# This info file doesn't contain a DIR-header: install-info produces this
+							# (harmless) warning (the --quiet switch doesn't seem to work).
+							# Don't increment the count for this.
+							pass
+						else:
+							badcount=badcount+1
+							errmsg += myso + "\n"
+					icount=icount+1
+
+				if moved_old_dir and not os.path.exists(dir_file):
+					# We didn't generate a new dir file, so put the old file
+					# back where it was originally found.
+					for ext in dir_extensions:
+						try:
+							os.rename(dir_file + ext + ".old", dir_file + ext)
+						except EnvironmentError as e:
+							if e.errno != errno.ENOENT:
+								raise
+							del e
+
+				# Clean dir.old cruft so that they don't prevent
+				# unmerge of otherwise empty directories.
+				for ext in dir_extensions:
+					try:
+						os.unlink(dir_file + ext + ".old")
+					except EnvironmentError as e:
+						if e.errno != errno.ENOENT:
+							raise
+						del e
+
+				#update mtime so we can potentially avoid regenerating.
+				prev_mtimes[inforoot] = os.stat(inforoot)[stat.ST_MTIME]
+
+			if badcount:
+				out.eerror("Processed %d info files; %d errors." % \
+					(icount, badcount))
+				portage.util.writemsg_level(errmsg,
+					level=logging.ERROR, noiselevel=-1)
+			else:
+				if icount > 0 and portage.util.noiselimit >= 0:
+					out.einfo("Processed %d info files." % (icount,))


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/util/, pym/_emerge/
@ 2013-01-16 14:12 Zac Medico
  0 siblings, 0 replies; 5+ messages in thread
From: Zac Medico @ 2013-01-16 14:12 UTC (permalink / raw
  To: gentoo-commits

commit:     9a3a82fda113008b877c0447e1d6a8780365ab98
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Wed Jan 16 14:11:55 2013 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed Jan 16 14:11:55 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=9a3a82fd

emerge --info: show free ram/swap, bug #451048

---
 pym/_emerge/actions.py           |   13 ++++++
 pym/portage/util/_get_vm_info.py |   80 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 93 insertions(+), 0 deletions(-)

diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index ac9a60f..589680a 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -25,6 +25,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
 	'portage.dbapi._similar_name_search:similar_name_search',
 	'portage.debug',
 	'portage.news:count_unread_news,display_news_notifications',
+	'portage.util._get_vm_info:get_vm_info',
 	'_emerge.chk_updated_cfg_files:chk_updated_cfg_files',
 	'_emerge.help:help@emerge_help',
 	'_emerge.post_emerge:display_news_notification,post_emerge',
@@ -1488,6 +1489,18 @@ def action_info(settings, trees, myopts, myfiles):
 	append(header_width * "=")
 	append("System uname: %s" % (platform.platform(aliased=1),))
 
+	vm_info = get_vm_info()
+	if "ram.total" in vm_info:
+		line = "%-9s %10d total" % ("KiB Mem:", vm_info["ram.total"] / 1024)
+		if "ram.free" in vm_info:
+			line += ",%10d free" % (vm_info["ram.free"] / 1024,)
+		append(line)
+	if "swap.total" in vm_info:
+		line = "%-9s %10d total" % ("KiB Swap:", vm_info["swap.total"] / 1024)
+		if "swap.free" in vm_info:
+			line += ",%10d free" % (vm_info["swap.free"] / 1024,)
+		append(line)
+
 	lastSync = portage.grabfile(os.path.join(
 		settings["PORTDIR"], "metadata", "timestamp.chk"))
 	if lastSync:

diff --git a/pym/portage/util/_get_vm_info.py b/pym/portage/util/_get_vm_info.py
new file mode 100644
index 0000000..e8ad938
--- /dev/null
+++ b/pym/portage/util/_get_vm_info.py
@@ -0,0 +1,80 @@
+# Copyright 2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+import os
+import platform
+import subprocess
+
+from portage import _unicode_decode
+
+def get_vm_info():
+
+	vm_info = {}
+
+	if platform.system() == 'Linux':
+		try:
+			proc = subprocess.Popen(["free"],
+				stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+		except OSError:
+			pass
+		else:
+			output = _unicode_decode(proc.communicate()[0])
+			if proc.wait() == os.EX_OK:
+				for line in output.splitlines():
+					line = line.split()
+					if len(line) < 2:
+						continue
+					if line[0] == "Mem:":
+						try:
+							vm_info["ram.total"] = int(line[1]) * 1024
+						except ValueError:
+							pass
+						if len(line) > 3:
+							try:
+								vm_info["ram.free"] = int(line[3]) * 1024
+							except ValueError:
+								pass
+					elif line[0] == "Swap:":
+						try:
+							vm_info["swap.total"] = int(line[1]) * 1024
+						except ValueError:
+							pass
+						if len(line) > 3:
+							try:
+								vm_info["swap.free"] = int(line[3]) * 1024
+							except ValueError:
+								pass
+
+	else:
+
+		try:
+			proc = subprocess.Popen(["sysctl", "-a"],
+				stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+		except OSError:
+			pass
+		else:
+			output = _unicode_decode(proc.communicate()[0])
+			if proc.wait() == os.EX_OK:
+				for line in output.splitlines():
+					line = line.split(":", 1)
+					if len(line) != 2:
+						continue
+					line[1] = line[1].strip()
+					if line[0] == "hw.physmem":
+						try:
+							vm_info["ram.total"] = int(line[1])
+						except ValueError:
+							pass
+					elif line[0] == "vm.swap_total":
+						try:
+							vm_info["swap.total"] = int(line[1])
+						except ValueError:
+							pass
+					elif line[0] == "Free Memory Pages":
+						if line[1][-1] == "K":
+							try:
+								vm_info["ram.free"] = int(line[1][:-1]) * 1024
+							except ValueError:
+								pass
+
+	return vm_info


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/util/, pym/_emerge/
@ 2013-06-27 19:39 Zac Medico
  0 siblings, 0 replies; 5+ messages in thread
From: Zac Medico @ 2013-06-27 19:39 UTC (permalink / raw
  To: gentoo-commits

commit:     0196031ce8f5dc8b9385e06013e42c47d1185a3b
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu Jun 27 19:38:39 2013 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu Jun 27 19:38:39 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=0196031c

cacheddir: disable cache (avoid memory leak)

The global dircache is no longer supported, since it could
be a memory leak for API consumers. Any cacheddir callers
should use higher-level caches instead, when necessary.

---
 pym/_emerge/clear_caches.py |  4 +---
 pym/portage/util/listdir.py | 33 +++++++++++----------------------
 2 files changed, 12 insertions(+), 25 deletions(-)

diff --git a/pym/_emerge/clear_caches.py b/pym/_emerge/clear_caches.py
index 7b7c5ec..513df62 100644
--- a/pym/_emerge/clear_caches.py
+++ b/pym/_emerge/clear_caches.py
@@ -1,8 +1,7 @@
-# Copyright 1999-2010 Gentoo Foundation
+# Copyright 1999-2013 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():
@@ -15,5 +14,4 @@ def clear_caches(trees):
 			pass
 		else:
 			d["vartree"].dbapi._linkmap._clear_cache()
-	dircache.clear()
 	gc.collect()

diff --git a/pym/portage/util/listdir.py b/pym/portage/util/listdir.py
index b78ed19..61a025a 100644
--- a/pym/portage/util/listdir.py
+++ b/pym/portage/util/listdir.py
@@ -5,32 +5,26 @@ __all__ = ['cacheddir', 'listdir']
 
 import errno
 import stat
-import time
 
 from portage import os
 from portage.const import VCS_DIRS
 from portage.exception import DirectoryNotFound, PermissionDenied, PortageException
-from portage.util import normalize_path, writemsg
-
+from portage.util import normalize_path
+
+# The global dircache is no longer supported, since it could
+# be a memory leak for API consumers. Any cacheddir callers
+# should use higher-level caches instead, when necessary.
+# TODO: Remove dircache variable after stable portage does
+# not use is (keep it for now, in case API consumers clear
+# it manually).
 dircache = {}
-cacheHit = 0
-cacheMiss = 0
-cacheStale = 0
 
 def cacheddir(my_original_path, ignorecvs, ignorelist, EmptyOnError, followSymlinks=True):
-	global cacheHit,cacheMiss,cacheStale
 	mypath = normalize_path(my_original_path)
-	if mypath in dircache:
-		cacheHit += 1
-		cached_mtime, list, ftype = dircache[mypath]
-	else:
-		cacheMiss += 1
-		cached_mtime, list, ftype = -1, [], []
+	cached_mtime, list, ftype = -1, [], []
 	try:
 		pathstat = os.stat(mypath)
-		if stat.S_ISDIR(pathstat[stat.ST_MODE]):
-			mtime = pathstat.st_mtime
-		else:
+		if not stat.S_ISDIR(pathstat.st_mode):
 			raise DirectoryNotFound(mypath)
 	except EnvironmentError as e:
 		if e.errno == PermissionDenied.errno:
@@ -39,10 +33,7 @@ def cacheddir(my_original_path, ignorecvs, ignorelist, EmptyOnError, followSymli
 		return [], []
 	except PortageException:
 		return [], []
-	# Python retuns mtime in seconds, so if it was changed in the last few seconds, it could be invalid
-	if mtime != cached_mtime or time.time() - mtime < 4:
-		if mypath in dircache:
-			cacheStale += 1
+	else:
 		try:
 			list = os.listdir(mypath)
 		except EnvironmentError as e:
@@ -68,7 +59,6 @@ def cacheddir(my_original_path, ignorecvs, ignorelist, EmptyOnError, followSymli
 					ftype.append(3)
 			except (IOError, OSError):
 				ftype.append(3)
-		dircache[mypath] = mtime, list, ftype
 
 	ret_list = []
 	ret_ftype = []
@@ -84,7 +74,6 @@ def cacheddir(my_original_path, ignorecvs, ignorelist, EmptyOnError, followSymli
 			ret_list.append(list[x])
 			ret_ftype.append(ftype[x])
 
-	writemsg("cacheddirStats: H:%d/M:%d/S:%d\n" % (cacheHit, cacheMiss, cacheStale),10)
 	return ret_list, ret_ftype
 
 def listdir(mypath, recursive=False, filesonly=False, ignorecvs=False, ignorelist=[], followSymlinks=True,


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2013-06-27 19:39 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-14 16:41 [gentoo-commits] proj/portage:master commit in: pym/portage/util/, pym/_emerge/ Zac Medico
  -- strict thread matches above, loose matches on Subject: below --
2011-06-03  5:21 Zac Medico
2012-10-14 22:57 Zac Medico
2013-01-16 14:12 Zac Medico
2013-06-27 19:39 Zac Medico

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox