#
def usage(argv):
- rev="$Revision: 1.13.2.1 $"
- ver= rev.split(' ')[1]
- print ">>> Portage information query tool -- version "+ver
+ print ">>> Portage information query tool"
+ print ">>> $Id$"
print ">>> Usage: portageq <command> [<option> ...]"
print ""
print "Available commands:"
del os.environ["PORTAGE_LEGACY_GLOBALS"]
try:
- from repoman.checks import EbuildWhitespaceCheck, EbuildHeaderCheck, EbuildQuoteCheck, \
- EbuildAssignmentCheck
+ from repoman.checks import EbuildWhitespace, EbuildHeader, EbuildQuote, \
+ EbuildAssignment, EbuildNestedDie, EbuildUselessDodoc
except ImportError:
from os import path as osp
sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), 'pym'))
from repoman.checks import EbuildWhitespace, EbuildHeader, EbuildQuote, \
- EbuildAssignment, EbuildNestedDie
+ EbuildAssignment, EbuildNestedDie, EbuildUselessDodoc
import portage.checksum
import portage.const
path = checkdir + '/' + y + '.ebuild'
myear = time.gmtime(os.stat(path)[ST_MTIME])[0]
contents = StringIO.StringIO(open(path, 'rb').read())
- for check in (EbuildWhitespace, EbuildQuote, EbuildAssignment):
+ for check in (EbuildWhitespace, EbuildQuote,
+ EbuildAssignment, EbuildUselessDodoc):
c = check(contents)
errors = c.Run()
for e in errors:
if existing_node:
e_type, myroot, e_cpv, e_status = existing_node
if mykey == e_cpv:
- # The existing node can be reused. It's okay for a
- # node to depend on itself here if priority.satisfied
- # is True, otherwise it is a circular dependency that
- # can not be ignored.
+ # The existing node can be reused.
self._parent_child_digraph.add(existing_node, myparent)
- self.digraph.addnode(existing_node, myparent,
- priority=priority)
+ # If a direct circular dependency is not an unsatisfied
+ # buildtime dependency then drop it here since otherwise
+ # it can skew the merge order calculation in an unwanted
+ # way.
+ if existing_node != myparent or \
+ (priority.buildtime and not priority.satisfied):
+ self.digraph.addnode(existing_node, myparent,
+ priority=priority)
return 1
else:
if jbigkey in self._slot_collision_nodes:
self.packages = copy.deepcopy(clone.packages)
self.virtuals = copy.deepcopy(clone.virtuals)
+ self.dirVirtuals = copy.deepcopy(clone.dirVirtuals)
self.treeVirtuals = copy.deepcopy(clone.treeVirtuals)
self.userVirtuals = copy.deepcopy(clone.userVirtuals)
self.negVirtuals = copy.deepcopy(clone.negVirtuals)
self.punmaskdict = copy.deepcopy(clone.punmaskdict)
self.prevmaskdict = copy.deepcopy(clone.prevmaskdict)
self.pprovideddict = copy.deepcopy(clone.pprovideddict)
- self.dirVirtuals = copy.deepcopy(clone.dirVirtuals)
- self.treeVirtuals = copy.deepcopy(clone.treeVirtuals)
self.features = copy.deepcopy(clone.features)
self._accept_license = copy.deepcopy(clone._accept_license)
cp = dep_getkey(mycpv)
for virt in virts:
virt = dep_getkey(virt)
+ providers = self.virtuals.get(virt)
+ if providers and cp in providers:
+ continue
providers = self._depgraphVirtuals.get(virt)
if providers is None:
providers = []
if match:
errors.append((num + 1, NESTED_DIE_ERROR))
return errors
+
+class EbuildUselessDodoc(ContentCheck):
+ """Check ebuild for useless files in dodoc arguments."""
+ repoman_check_name = 'ebuild.minorsyn'
+ uselessdodoc_re = re.compile(
+ r'^\s*dodoc(\s+|\s+.*\s+)(ABOUT-NLS|COPYING|LICENSE)($|\s)')
+
+ def __init__(self, contents):
+ ContentCheck.__init__(self, contents)
+
+ def Run(self):
+ errors = []
+ uselessdodoc_re = self.uselessdodoc_re
+ for num, line in enumerate(self.contents):
+ match = uselessdodoc_re.match(line)
+ if match:
+ errors.append((num + 1, "Useless dodoc '%s'" % \
+ (match.group(2), ) + " on line: %d"))
+ return errors