summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cnf/make.globals4
-rw-r--r--man/make.conf.56
-rw-r--r--pym/_emerge/actions.py3
-rw-r--r--pym/_emerge/sync/__init__.py0
-rw-r--r--pym/_emerge/sync/old_tree_timestamp.py99
5 files changed, 112 insertions, 0 deletions
diff --git a/cnf/make.globals b/cnf/make.globals
index 76b48fbf..b1b2cf49 100644
--- a/cnf/make.globals
+++ b/cnf/make.globals
@@ -83,6 +83,10 @@ PORTAGE_RSYNC_RETRIES="3"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"
+# The number of days after the last `emerge --sync` that a warning
+# message should be produced.
+PORTAGE_SYNC_STALE="30"
+
# Minimal CONFIG_PROTECT
CONFIG_PROTECT="/etc"
CONFIG_PROTECT_MASK="/etc/env.d"
diff --git a/man/make.conf.5 b/man/make.conf.5
index 18d769f3..71a30813 100644
--- a/man/make.conf.5
+++ b/man/make.conf.5
@@ -643,6 +643,12 @@ giving up.
.br
Defaults to 3.
.TP
+\fBPORTAGE_SYNC_STALE\fR = \fI[NUMBER]\fR
+Defines the number of days after the last `emerge \-\-sync` that a warning
+message should be produced.
+.br
+Defaults to 30.
+.TP
\fBPORTAGE_TMPDIR\fR = \fI[path]\fR
Defines the location of the temporary build directories.
.br
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 6cb69045..20868594 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -53,6 +53,7 @@ from _emerge.Scheduler import Scheduler
from _emerge.search import search
from _emerge.SetArg import SetArg
from _emerge.show_invalid_depstring_notice import show_invalid_depstring_notice
+from _emerge.sync.old_tree_timestamp import old_tree_timestamp_warn
from _emerge.unmerge import unmerge
from _emerge.UnmergeDepPriority import UnmergeDepPriority
from _emerge.UseFlagDisplay import UseFlagDisplay
@@ -64,6 +65,8 @@ if sys.hexversion >= 0x3000000:
def action_build(settings, trees, mtimedb,
myopts, myaction, myfiles, spinner):
+ old_tree_timestamp_warn(settings['PORTDIR'], settings)
+
# validate the state of the resume data
# so that we can make assumptions later.
for k in ("resume", "resume_backup"):
diff --git a/pym/_emerge/sync/__init__.py b/pym/_emerge/sync/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/pym/_emerge/sync/__init__.py
diff --git a/pym/_emerge/sync/old_tree_timestamp.py b/pym/_emerge/sync/old_tree_timestamp.py
new file mode 100644
index 00000000..f9627437
--- /dev/null
+++ b/pym/_emerge/sync/old_tree_timestamp.py
@@ -0,0 +1,99 @@
+# Copyright 2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+import locale
+import logging
+import time
+
+from portage import os
+from portage.exception import PortageException
+from portage.localization import _
+from portage.util import grabfile, writemsg_level, writemsg_stdout
+
+def have_english_locale():
+ lang, enc = locale.getdefaultlocale()
+ if lang is not None:
+ lang = lang.lower()
+ lang = lang.split('_', 1)[0]
+ return lang is None or lang in ('c', 'en')
+
+def whenago(seconds):
+ sec = int(seconds)
+ mins = 0
+ days = 0
+ hrs = 0
+ years = 0
+ out = []
+
+ if sec > 60:
+ mins = sec / 60
+ sec = sec % 60
+ if mins > 60:
+ hrs = mins / 60
+ mins = mins % 60
+ if hrs > 24:
+ days = hrs / 24
+ hrs = hrs % 24
+ if days > 365:
+ years = days / 365
+ days = days % 365
+
+ if years:
+ out.append(str(years)+"y ")
+ if days:
+ out.append(str(days)+"d ")
+ if hrs:
+ out.append(str(hrs)+"h ")
+ if mins:
+ out.append(str(mins)+"m ")
+ if sec:
+ out.append(str(sec)+"s ")
+
+ return "".join(out).strip()
+
+def old_tree_timestamp_warn(portdir, settings):
+ unixtime = time.time()
+ default_warnsync = 30
+
+ timestamp_file = os.path.join(portdir, "metadata/timestamp.x")
+ try:
+ lastsync = grabfile(timestamp_file)
+ except PortageException:
+ return False
+
+ if not lastsync:
+ return False
+
+ lastsync = lastsync[0].split()
+ if not lastsync:
+ return False
+
+ try:
+ lastsync = int(lastsync[0])
+ except ValueError:
+ return False
+
+ var_name = 'PORTAGE_SYNC_STALE'
+ try:
+ warnsync = float(settings.get(var_name, default_warnsync))
+ except ValueError:
+ writemsg_level("!!! %s contains non-numeric value: %s\n" % \
+ (var_name, settings[var_name]),
+ level=logging.ERROR, noiselevel=-1)
+ return False
+
+ if warnsync <= 0:
+ return False
+
+ if (unixtime - 86400 * warnsync) > lastsync:
+ if have_english_locale():
+ writemsg_stdout(">>> Last emerge sync was %s ago\n" % \
+ whenago(unixtime - lastsync), noiselevel=-1)
+ else:
+ writemsg_stdout(">>> %s\n" % \
+ _("Last emerge sync was %s") % \
+ time.strftime('%c', time.localtime(lastsync)),
+ noiselevel=-1)
+ return True
+ return False