Skip to content

Commit fd2d7cd

Browse files
committed
bugs: auto extend maintainers with projects
When ``--projects`` is passed, fetch ``projects.xml``, and extent the maintainers list with projects whose members include maintainers. Resolves: #157 Signed-off-by: Arthur Zamarin <arthurzam@gentoo.org>
1 parent eb2960c commit fd2d7cd

2 files changed

Lines changed: 30 additions & 1 deletion

File tree

data/share/bash-completion/completions/pkgdev

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ _pkgdev() {
247247
--api-key
248248
--auto-cc-arches
249249
--find-by-maintainer
250+
--projects
250251
--filter-stablereqs
251252
--stabletime
252253
--blocks

src/pkgdev/scripts/pkgdev_bugs.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@
2020
from pkgcore.ebuild.ebuild_src import package
2121
from pkgcore.ebuild.errors import MalformedAtom
2222
from pkgcore.ebuild.misc import sort_keywords
23-
from pkgcore.ebuild.repo_objs import LocalMetadataXml
23+
from pkgcore.ebuild.repo_objs import LocalMetadataXml, ProjectsXml
2424
from pkgcore.repository import multiplex
2525
from pkgcore.restrictions import boolean, packages, values
2626
from pkgcore.test.misc import FakePkg
2727
from pkgcore.util import commandline, parserestrict
2828
from snakeoil.cli import arghparse
2929
from snakeoil.cli.input import userquery
30+
from snakeoil.data_source import bytes_data_source
3031
from snakeoil.formatters import Formatter
3132
from snakeoil.osutils import pjoin
3233

@@ -77,6 +78,18 @@
7778
to find matches, which can be slow (between 1 to 3 seconds).
7879
""",
7980
)
81+
bugs.add_argument(
82+
"--projects",
83+
action="store_true",
84+
help="include packages maintained by projects",
85+
docs="""
86+
Include packages maintained by projects, whose members include the
87+
emails of maintainers passed to ``--find-by-maintainer``.
88+
89+
Note that this flag requires to fetch the ``projects.xml`` file from
90+
``https://api.gentoo.org``.
91+
""",
92+
)
8093
bugs.add_argument(
8194
"--filter-stablereqs",
8295
action="store_true",
@@ -340,8 +353,23 @@ def extend_targets_stable_groups(self, groups):
340353
except (ValueError, IndexError):
341354
self.err.write(f"Unable to find match for {pkg.unversioned_atom}")
342355

356+
def _extend_projects(self, disabled, enabled):
357+
members = defaultdict(set)
358+
self.out.write("Fetching projects.xml")
359+
self.out.flush()
360+
with urllib.urlopen("https://api.gentoo.org/metastructure/projects.xml", timeout=30) as f:
361+
for email, project in ProjectsXml(bytes_data_source(f.read())).projects.items():
362+
for member in project.members:
363+
members[member.email].add(email)
364+
365+
disabled = frozenset(disabled).union(*(members[email] for email in disabled))
366+
enabled = frozenset(enabled).union(*(members[email] for email in enabled))
367+
return disabled, enabled
368+
343369
def extend_maintainers(self):
344370
disabled, enabled = self.options.find_by_maintainer
371+
if self.options.projects:
372+
disabled, enabled = self._extend_projects(disabled, enabled)
345373
emails = frozenset(enabled).difference(disabled)
346374
if not emails:
347375
return

0 commit comments

Comments
 (0)