[gentoo-portage-dev] [PATCH] repoman: warn when herd's email appears in maintaineremail section

2014-07-24 Thread Sergei Trofimovich
Manuel Rüger noticed that most of haskell packages's 'metadata.xml'
contain duplicate information:
herdhaskell/herd
maintaineremailhask...@gentoo.org/email/maintainer

I've added a check against 'herds.xml's email aliases.

Now repoman warns about such redundancy:
  metadata.warning  1
   dev-haskell/text/metadata.xml: use herdhaskell/herd instead of 
maintainer 'hask...@gentoo.org'

Quick scan [1] of tree revealed a lot of non-haskell packages
having redundancy: samba, xemacs, sci, gpe, etc, etc.

[1]: https://github.com/trofi/gentoo-qa/blob/master/check_herd.sh
Run in the root tree of gentoo-x86:
gentoo-x86 $ ~/portage/gentoo-qa/check_herd.sh  | wc -l
571
# some examples:
gentoo-x86 $ ~/portage/gentoo-qa/check_herd.sh
./app-admin/haskell-updater/metadata.xml:  emailhask...@gentoo.org/email
./app-editors/xemacs/metadata.xml:emailxem...@gentoo.org/email
./app-i18n/ibus-table-chinese/metadata.xml: 
emailc...@gentoo.org/email
./app-portage/fquery/metadata.xml:  
emailhask...@gentoo.org/email
./app-text/glosung/metadata.xml:  emailtheol...@gentoo.org/email
... # a lot of haskell
./dev-lang/tcl/metadata.xml:emailtc...@gentoo.org/email
./dev-libs/Ice/metadata.xml:emailc...@gentoo.org/email
./dev-libs/cloog/metadata.xml:  emailtoolch...@gentoo.org/email
./dev-libs/cvector/metadata.xml:emails...@gentoo.org/email
./dev-libs/iniparser/metadata.xml:  emailsa...@gentoo.org/email
./dev-libs/isl/metadata.xml:emailtoolch...@gentoo.org/email
...

Signed-off-by: Sergei Trofimovich sly...@gentoo.org
---
 bin/repoman  | 13 +
 pym/repoman/herdbase.py  | 21 +
 pym/repoman/utilities.py | 19 +++
 3 files changed, 49 insertions(+), 4 deletions(-)

diff --git a/bin/repoman b/bin/repoman
index c36ace1..74a4d44 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -1762,6 +1762,19 @@ for x in effective_scanlist:
fails[metadata.bad].append(%s/metadata.xml: 
%s % (x, e))
del e
 
+   # check if 'metadata.xml' contains redundant
+   #   
'maintaineremailsome-h...@gentoo.org/email/maintainer'
+   # email address. Instead it should contain
+   #   'herdsome-herd/herd'
+   if herd_base is not None:
+   for m_email in 
utilities.get_maintainer_emails_from_metadata(_metadata_xml):
+   herd_name = 
herd_base.herd_by_herd_email(m_email)
+   if herd_name is not None:
+   stats[metadata.warning] += 1
+   
fails[metadata.warning].append(%s/metadata.xml:
+use herd%s/herd 
instead of maintainer '%s' % \
+   (x, herd_name, m_email))
+
# Only carry out if in package directory or check forced
if xmllint_capable and not metadata_bad:
# xmlint can produce garbage output even on success, so 
only dump
diff --git a/pym/repoman/herdbase.py b/pym/repoman/herdbase.py
index c5b88ff..ae7c4e4 100644
--- a/pym/repoman/herdbase.py
+++ b/pym/repoman/herdbase.py
@@ -34,9 +34,10 @@ def _make_email(nick_name):
 
 
 class HerdBase(object):
-   def __init__(self, herd_to_emails, all_emails):
+   def __init__(self, herd_to_emails, all_emails, herd_email_to_herd):
self.herd_to_emails = herd_to_emails
self.all_emails = all_emails
+   self.herd_email_to_herd = herd_email_to_herd
 
def known_herd(self, herd_name):
return herd_name in self.herd_to_emails
@@ -47,6 +48,9 @@ class HerdBase(object):
def maintainer_in_herd(self, nick_name, herd_name):
return _make_email(nick_name) in self.herd_to_emails[herd_name]
 
+   def herd_by_herd_email(self, email):
+   return self.herd_email_to_herd.get(email)
+
 class _HerdsTreeBuilder(xml.etree.ElementTree.TreeBuilder):

Implements doctype() as required to avoid deprecation warnings with
@@ -57,6 +61,7 @@ class _HerdsTreeBuilder(xml.etree.ElementTree.TreeBuilder):
 
 def make_herd_base(filename):
herd_to_emails = dict()
+   herd_email_to_herd = dict()
all_emails = set()
 
try:
@@ -82,6 +87,11 @@ def make_herd_base(filename):
herd_name = _herd_name.text.strip()
del _herd_name
 
+   _herd_email = h.find('email')
+   herd_email = _herd_email.text.strip()
+   del _herd_email
+   herd_email_to_herd[herd_email] = herd_name
+
maintainers = h.findall('maintainer')

[gentoo-portage-dev] [PATCH] sets: introduce @changed-deps to update packages which need dep changes.

2014-07-24 Thread Michał Górny
The @changed-deps set tries to compare RDEPEND and PDEPEND entries of
installed packages with ebuild counterparts, and pulls the ebuild
whenever the two are not in sync. This could be used, for example, to
clean up the system after disabling --dynamic-deps.
---
 cnf/sets/portage.conf  |  5 +
 pym/portage/_sets/dbapi.py | 53 --
 2 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/cnf/sets/portage.conf b/cnf/sets/portage.conf
index b73afb1..fd2c387 100644
--- a/cnf/sets/portage.conf
+++ b/cnf/sets/portage.conf
@@ -84,3 +84,8 @@ class = portage.sets.dbapi.UnavailableSet
 # are not available.
 [unavailable-binaries]
 class = portage.sets.dbapi.UnavailableBinaries
+
+# Installed packages for which vdb *DEPEND entries are outdated compared
+# to the matching portdb entry.
+[changed-deps]
+class = portage.sets.dbapi.ChangedDepsSet
diff --git a/pym/portage/_sets/dbapi.py b/pym/portage/_sets/dbapi.py
index 384fb3a..9b2cb8b 100644
--- a/pym/portage/_sets/dbapi.py
+++ b/pym/portage/_sets/dbapi.py
@@ -1,17 +1,18 @@
 # Copyright 2007-2012 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
+import re
 import time
 
 from portage import os
 from portage.versions import best, catsplit, vercmp
-from portage.dep import Atom
+from portage.dep import Atom, use_reduce
 from portage.localization import _
 from portage._sets.base import PackageSet
 from portage._sets import SetConfigError, get_boolean
 import portage
 
-__all__ = [CategorySet, DowngradeSet,
+__all__ = [CategorySet, ChangedDepsSet, DowngradeSet,
EverythingSet, OwnerSet, VariableSet]
 
 class EverythingSet(PackageSet):
@@ -456,3 +457,51 @@ class RebuiltBinaries(EverythingSet):
bindb=trees[bintree].dbapi)
 
singleBuilder = classmethod(singleBuilder)
+
+class ChangedDepsSet(PackageSet):
+
+   _operations = [merge, unmerge]
+
+   description = Package set which contains all installed  + \
+   packages for which the vdb *DEPEND entries are outdated  + \
+   compared to corresponding portdb entries.
+
+   def __init__(self, portdb=None, vardb=None):
+   super(ChangedDepsSet, self).__init__()
+   self._portdb = portdb
+   self._vardb = vardb
+
+   def load(self):
+   depvars = ('RDEPEND', 'PDEPEND')
+
+   subslot_repl_re = re.compile(r':[^[]*=')
+
+   atoms = []
+   for cpv in self._vardb.cpv_all():
+   # no ebuild, no dynamic-deps to break it :)
+   if not self._portdb.cpv_exists(cpv):
+   continue
+
+   use, eapi = self._vardb.aux_get(cpv, ('USE', 'EAPI'))
+
+   def clean_subslots(depatom):
+   if isinstance(depatom, list):
+   return [clean_subslots(x) for x in 
depatom]
+   else:
+   return subslot_repl_re.sub(':=', 
depatom)
+
+   vdbvars = [clean_subslots(use_reduce(x, uselist=use, 
eapi=eapi))
+   for x in self._vardb.aux_get(cpv, 
depvars)]
+   pdbvars = [clean_subslots(use_reduce(x, uselist=use, 
eapi=eapi))
+   for x in self._portdb.aux_get(cpv, 
depvars)]
+
+   if vdbvars != pdbvars:
+   atoms.append('=%s' % cpv)
+
+   self._setAtoms(atoms)
+
+   def singleBuilder(cls, options, settings, trees):
+   return cls(portdb=trees[porttree].dbapi,
+   vardb=trees[vartree].dbapi)
+
+   singleBuilder = classmethod(singleBuilder)
-- 
2.0.2




[gentoo-portage-dev] [PATCH] QA-warn about systemd units using /etc/conf.d.

2014-07-24 Thread Michał Górny
---
 bin/misc-functions.sh | 15 +++
 1 file changed, 15 insertions(+)

diff --git a/bin/misc-functions.sh b/bin/misc-functions.sh
index 5ccf7c2..f24e78c 100755
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@ -595,6 +595,21 @@ install_qa_check() {
done
fi
 
+   # Common mistakes in systemd service files.
+   if type -P pkg-config /dev/null  pkg-config --exists systemd; then
+   systemddir=$(pkg-config --variable=systemdsystemunitdir systemd)
+   else
+   systemddir=/usr/lib/systemd/system
+   fi
+   if [[ -d ${ED%/}${systemddir} ]]; then
+   f=$(grep -sH '^EnvironmentFile.*=.*/etc/conf\.d' 
${ED%/}${systemddir}/*.service)
+   if [[ -n ${f} ]] ; then
+   eqawarn QA Notice: systemd units using /etc/conf.d 
detected:
+   eqawarn ${f//${D}}
+   eqawarn See: 
https://wiki.gentoo.org/wiki/Project:Systemd/conf.d_files;
+   fi
+   fi
+
# Look for leaking LDFLAGS into pkg-config files
f=$(egrep -sH '^Libs.*-Wl,(-O[012]|--hash-style)' 
${ED}/usr/*/pkgconfig/*.pc)
if [[ -n ${f} ]] ; then
-- 
2.0.2




Re: [gentoo-portage-dev] New meeting

2014-07-24 Thread Alexander Berntsen
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA256

The Portage team meeting will be Thursday 24th at 6pm. If you have
some really good reason for it not be, let me know and I will at least
consider rearranging it.
- -- 
Alexander
berna...@gentoo.org
https://secure.plaimi.net/~alexander
-BEGIN PGP SIGNATURE-
Version: GnuPG v2
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iF4EAREIAAYFAlPP2OUACgkQRtClrXBQc7VNWgEAkDDPA68teIb5A9vq6y+/lb8e
cXh6RkVRZ5AiO386nI8A/1zXT8RTyNoCGOIbv+q2cwwCt4B1cBo+hPD5AN+Fd614
=wLZQ
-END PGP SIGNATURE-



[gentoo-portage-dev] [PATCH] repoman: warn when herd's email appears in maintaineremail section

2014-07-24 Thread Sergei Trofimovich
Manuel Rüger noticed that most of haskell packages's 'metadata.xml'
contain duplicate information:
herdhaskell/herd
maintaineremailhask...@gentoo.org/email/maintainer

I've added a check against 'herds.xml's email aliases.

Now repoman warns about such redundancy:
  metadata.warning  1
   dev-haskell/text/metadata.xml: use herdhaskell/herd instead of 
maintainer 'hask...@gentoo.org'

Quick scan [1] of tree revealed a lot of non-haskell packages
having redundancy: samba, xemacs, sci, gpe, etc, etc.

[1]: https://github.com/trofi/gentoo-qa/blob/master/check_herd.sh
Run in the root tree of gentoo-x86:
gentoo-x86 $ ~/portage/gentoo-qa/check_herd.sh  | wc -l
571
# some examples:
gentoo-x86 $ ~/portage/gentoo-qa/check_herd.sh
./app-admin/haskell-updater/metadata.xml:  emailhask...@gentoo.org/email
./app-editors/xemacs/metadata.xml:emailxem...@gentoo.org/email
./app-i18n/ibus-table-chinese/metadata.xml: 
emailc...@gentoo.org/email
./app-portage/fquery/metadata.xml:  
emailhask...@gentoo.org/email
./app-text/glosung/metadata.xml:  emailtheol...@gentoo.org/email
... # a lot of haskell
./dev-lang/tcl/metadata.xml:emailtc...@gentoo.org/email
./dev-libs/Ice/metadata.xml:emailc...@gentoo.org/email
./dev-libs/cloog/metadata.xml:  emailtoolch...@gentoo.org/email
./dev-libs/cvector/metadata.xml:emails...@gentoo.org/email
./dev-libs/iniparser/metadata.xml:  emailsa...@gentoo.org/email
./dev-libs/isl/metadata.xml:emailtoolch...@gentoo.org/email
...

Signed-off-by: Sergei Trofimovich sly...@gentoo.org
---
 bin/repoman  | 13 +
 pym/repoman/herdbase.py  | 21 +
 pym/repoman/utilities.py | 19 +++
 3 files changed, 49 insertions(+), 4 deletions(-)

diff --git a/bin/repoman b/bin/repoman
index c36ace1..74a4d44 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -1762,6 +1762,19 @@ for x in effective_scanlist:
fails[metadata.bad].append(%s/metadata.xml: 
%s % (x, e))
del e
 
+   # check if 'metadata.xml' contains redundant
+   #   
'maintaineremailsome-h...@gentoo.org/email/maintainer'
+   # email address. Instead it should contain
+   #   'herdsome-herd/herd'
+   if herd_base is not None:
+   for m_email in 
utilities.get_maintainer_emails_from_metadata(_metadata_xml):
+   herd_name = 
herd_base.herd_by_herd_email(m_email)
+   if herd_name is not None:
+   stats[metadata.warning] += 1
+   
fails[metadata.warning].append(%s/metadata.xml:
+use herd%s/herd 
instead of maintainer '%s' % \
+   (x, herd_name, m_email))
+
# Only carry out if in package directory or check forced
if xmllint_capable and not metadata_bad:
# xmlint can produce garbage output even on success, so 
only dump
diff --git a/pym/repoman/herdbase.py b/pym/repoman/herdbase.py
index c5b88ff..ae7c4e4 100644
--- a/pym/repoman/herdbase.py
+++ b/pym/repoman/herdbase.py
@@ -34,9 +34,10 @@ def _make_email(nick_name):
 
 
 class HerdBase(object):
-   def __init__(self, herd_to_emails, all_emails):
+   def __init__(self, herd_to_emails, all_emails, herd_email_to_herd):
self.herd_to_emails = herd_to_emails
self.all_emails = all_emails
+   self.herd_email_to_herd = herd_email_to_herd
 
def known_herd(self, herd_name):
return herd_name in self.herd_to_emails
@@ -47,6 +48,9 @@ class HerdBase(object):
def maintainer_in_herd(self, nick_name, herd_name):
return _make_email(nick_name) in self.herd_to_emails[herd_name]
 
+   def herd_by_herd_email(self, email):
+   return self.herd_email_to_herd.get(email)
+
 class _HerdsTreeBuilder(xml.etree.ElementTree.TreeBuilder):

Implements doctype() as required to avoid deprecation warnings with
@@ -57,6 +61,7 @@ class _HerdsTreeBuilder(xml.etree.ElementTree.TreeBuilder):
 
 def make_herd_base(filename):
herd_to_emails = dict()
+   herd_email_to_herd = dict()
all_emails = set()
 
try:
@@ -82,6 +87,11 @@ def make_herd_base(filename):
herd_name = _herd_name.text.strip()
del _herd_name
 
+   _herd_email = h.find('email')
+   herd_email = _herd_email.text.strip()
+   del _herd_email
+   herd_email_to_herd[herd_email] = herd_name
+
maintainers = h.findall('maintainer')

Re: [gentoo-portage-dev] New meeting

2014-07-24 Thread Alexander Berntsen
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA256

Sorry, I got timezone confused! That's 7pm UTC 0.
- -- 
Alexander
berna...@gentoo.org
https://secure.plaimi.net/~alexander
-BEGIN PGP SIGNATURE-
Version: GnuPG v2
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iF4EAREIAAYFAlPP2bsACgkQRtClrXBQc7Ve0gD/RAubU24M5RFRqcnJQCi5IkF8
zbPrZjqidLSB62//UP0BAIr0JZW7qX8OUcYtjADJal7mnpPe8UML/WtKCsmk7UKr
=1FRm
-END PGP SIGNATURE-