summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-06-09 15:08:01 +0000
committerZac Medico <zmedico@gentoo.org>2008-06-09 15:08:01 +0000
commit3ef369ba052170fd246fde897019e652ccea24a2 (patch)
treeb06b87978513d1bc15d7672dc42181e5fbaac6b1
parent1177a7ba918aab8315420af045d25cb2dfebca94 (diff)
downloadportage-3ef369ba052170fd246fde897019e652ccea24a2.tar.gz
portage-3ef369ba052170fd246fde897019e652ccea24a2.tar.bz2
portage-3ef369ba052170fd246fde897019e652ccea24a2.zip
Make repoman pass Package instances into run_checks(), so that the checks
can use the Package.mtime and inherited attributes. (trunk r10599:10601) svn path=/main/branches/2.1.2/; revision=10616
-rwxr-xr-xbin/emerge10
-rwxr-xr-xbin/repoman30
2 files changed, 29 insertions, 11 deletions
diff --git a/bin/emerge b/bin/emerge
index b2167f67d..1ab502d73 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -1422,7 +1422,8 @@ class Package(Task):
__slots__ = ("built", "cpv", "depth",
"installed", "metadata", "onlydeps", "operation",
"root_config", "type_name",
- "category", "counter", "cp", "cpv_split", "iuse", "mtime",
+ "category", "counter", "cp", "cpv_split",
+ "inherited", "iuse", "mtime",
"pf", "pv_split", "root", "slot", "slot_atom", "use")
metadata_keys = [
@@ -1473,7 +1474,7 @@ class Package(Task):
Detect metadata updates and synchronize Package attributes.
"""
_wrapped_keys = frozenset(
- ["COUNTER", "IUSE", "SLOT", "USE", "_mtime_"])
+ ["COUNTER", "INHERITED", "IUSE", "SLOT", "USE", "_mtime_"])
def __init__(self, pkg, metadata):
dict.__init__(self)
@@ -1491,6 +1492,11 @@ class Package(Task):
if k in self._wrapped_keys:
getattr(self, "_set_" + k.lower())(k, v)
+ def _set_inherited(self, k, v):
+ if isinstance(v, basestring):
+ v = frozenset(v.split())
+ self._pkg.inherited = v
+
def _set_iuse(self, k, v):
self._pkg.iuse = self._pkg._iuse(v.split())
diff --git a/bin/repoman b/bin/repoman
index 89f78f192..6b2508349 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -52,6 +52,12 @@ except ImportError:
import portage
del os.environ["PORTAGE_LEGACY_GLOBALS"]
+import imp
+emerge_filename = os.path.join(os.path.dirname(__file__), 'emerge')
+_emerge = imp.load_module('_emerge', open(emerge_filename, 'rb'),
+ emerge_filename, ('', 'rb', imp.PY_SOURCE))
+from _emerge import Package, RootConfig, SetConfig
+
import portage_checksum
import portage_const
import portage_dep
@@ -264,7 +270,9 @@ qawarnings=[
]
missingvars=["KEYWORDS","LICENSE","DESCRIPTION","HOMEPAGE","SLOT"]
-allvars=portage.auxdbkeys
+allvars = set(portage.auxdbkeys)
+allvars.update(Package.metadata_keys)
+allvars = sorted(allvars)
commitmessage=None
commitmessagefile=None
for x in missingvars:
@@ -735,6 +743,8 @@ trees = portage.create_trees()
trees["/"]["porttree"].settings = repoman_settings
portdb = trees["/"]["porttree"].dbapi
portdb.mysettings = repoman_settings
+setconfig = SetConfig(repoman_settings, trees["/"])
+root_config = RootConfig(repoman_settings, trees["/"], setconfig)
# We really only need to cache the metadata that's necessary for visibility
# filtering. Anything else can be discarded to reduce memory consumption.
for k in ("DEPEND", "IUSE", "LICENCE", "PDEPEND",
@@ -1116,9 +1126,9 @@ _iuse_def_re = re.compile(r'^IUSE=.*')
_comment_re = re.compile(r'(^|\s*)#')
_autotools_func_re = re.compile(r'(^|\s)(eautomake|eautoconf|eautoreconf)(\s|$)')
-def run_checks(contents, inherited=None):
+def run_checks(contents, pkg):
iuse_def = None
- inherit_autotools = inherited and "autotools" in inherited
+ inherit_autotools = "autotools" in pkg.inherited
autotools_func_call = None
for num, line in enumerate(contents):
comment = _comment_re.match(line)
@@ -1216,7 +1226,7 @@ for x in scanlist:
checkdirlist=os.listdir(checkdir)
ebuildlist=[]
- ebuild_metadata = {}
+ pkgs = {}
for y in checkdirlist:
if y in no_exec and \
stat.S_IMODE(os.stat(os.path.join(checkdir, y)).st_mode) & 0111:
@@ -1240,7 +1250,8 @@ for x in scanlist:
stats["EAPI.unsupported"] += 1
fails["EAPI.unsupported"].append(os.path.join(x, y))
continue
- ebuild_metadata[pf] = myaux
+ pkgs[pf] = Package(cpv=cpv, metadata=myaux,
+ root_config=root_config)
# Sort ebuilds in ascending order for the KEYWORDS.dropped check.
pkgsplits = {}
@@ -1255,7 +1266,7 @@ for x in scanlist:
slot_keywords = {}
- if len(ebuild_metadata) != len(ebuildlist):
+ if len(pkgs) != len(ebuildlist):
# If we can't access all the metadata then it's totally unsafe to
# commit since there's no way to generate a correct Manifest.
# Do not try to do any more QA checks on this package since missing
@@ -1542,9 +1553,10 @@ for x in scanlist:
fails["ebuild.namenomatch"].append(x+"/"+y+".ebuild")
continue
- myaux = ebuild_metadata[y]
+ pkg = pkgs[y]
+ myaux = pkg.metadata
eapi = myaux["EAPI"]
- inherited = frozenset(myaux["INHERITED"].split())
+ inherited = pkg.inherited
# Test for negative logic and bad words in the RESTRICT var.
#for x in myaux[allvars.index("RESTRICT")].split():
@@ -1845,7 +1857,7 @@ for x in scanlist:
f = open(full_path, 'rb')
try:
contents = f.readlines()
- for check_name, e in run_checks(contents, inherited=inherited):
+ for check_name, e in run_checks(contents, pkg):
stats[check_name] += 1
fails[check_name].append(relative_path + ': %s' % e)
finally: