aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pkgdev/scripts/pkgdev_bugs.py28
-rw-r--r--tests/scripts/test_pkgdev_bugs.py6
2 files changed, 27 insertions, 7 deletions
diff --git a/src/pkgdev/scripts/pkgdev_bugs.py b/src/pkgdev/scripts/pkgdev_bugs.py
index e6cac18..924e9e4 100644
--- a/src/pkgdev/scripts/pkgdev_bugs.py
+++ b/src/pkgdev/scripts/pkgdev_bugs.py
@@ -5,6 +5,7 @@ import json
import sys
import urllib.request as urllib
from collections import defaultdict
+from datetime import datetime
from functools import partial
from itertools import chain
from pathlib import Path
@@ -13,6 +14,7 @@ from urllib.parse import urlencode
from pkgcheck import const as pkgcheck_const
from pkgcheck.addons import ArchesAddon, init_addon
from pkgcheck.addons.profiles import ProfileAddon
+from pkgcheck.addons.git import GitAddon, GitModifiedRepo
from pkgcheck.checks import visibility
from pkgcheck.scripts import argparse_actions
from pkgcore.ebuild.atom import atom
@@ -113,6 +115,7 @@ bugs_state.add_argument(
)
ArchesAddon.mangle_argparser(bugs)
+GitAddon.mangle_argparser(bugs)
ProfileAddon.mangle_argparser(bugs)
@@ -199,13 +202,18 @@ class GraphNode:
keywords.add("*")
def file_bug(
- self, api_key: str, auto_cc_arches: frozenset[str], block_bugs: list[int], observer=None
+ self,
+ api_key: str,
+ auto_cc_arches: frozenset[str],
+ block_bugs: list[int],
+ modified_repo: multiplex.tree,
+ observer=None,
) -> int:
if self.bugno is not None:
return self.bugno
for dep in self.edges:
if dep.bugno is None:
- dep.file_bug(api_key, auto_cc_arches, (), observer)
+ dep.file_bug(api_key, auto_cc_arches, (), modified_repo, observer)
maintainers = dict.fromkeys(
maintainer.email for pkg, _ in self.pkgs for maintainer in pkg.maintainers
)
@@ -219,6 +227,17 @@ class GraphNode:
if len(summary) > 90 and len(self.pkgs) > 1:
summary = f"{self.pkgs[0][0].versioned_atom.cpvstr} and friends: stablereq"
+ description = ["Please stabilize", ""]
+ if modified_repo is not None:
+ for pkg, _ in self.pkgs:
+ with contextlib.suppress(StopIteration):
+ match = next(modified_repo.itermatch(pkg.versioned_atom))
+ added = datetime.fromtimestamp(match.time)
+ days_old = (datetime.today() - added).days
+ description.append(
+ f" {pkg.versioned_atom.cpvstr}: no change for {days_old} days, since {added:%Y-%m-%d}"
+ )
+
request_data = dict(
Bugzilla_api_key=api_key,
product="Gentoo Linux",
@@ -226,7 +245,7 @@ class GraphNode:
severity="enhancement",
version="unspecified",
summary=summary,
- description="Please stabilize",
+ description="\n".join(description).strip(),
keywords=keywords,
cf_stabilisation_atoms="\n".join(self.lines()),
assigned_to=maintainers[0],
@@ -505,8 +524,9 @@ class DependencyGraph:
)
self.out.flush()
+ modified_repo = init_addon(GitAddon, self.options).cached_repo(GitModifiedRepo)
for node in self.starting_nodes:
- node.file_bug(api_key, auto_cc_arches, block_bugs, observe)
+ node.file_bug(api_key, auto_cc_arches, block_bugs, modified_repo, observe)
def _load_from_stdin(out: Formatter, err: Formatter):
diff --git a/tests/scripts/test_pkgdev_bugs.py b/tests/scripts/test_pkgdev_bugs.py
index e020ffd..641e5f0 100644
--- a/tests/scripts/test_pkgdev_bugs.py
+++ b/tests/scripts/test_pkgdev_bugs.py
@@ -68,7 +68,7 @@ class TestBugFiling:
session = BugsSession()
pkg = max(repo.itermatch(atom("=cat/u-0")))
with patch("pkgdev.scripts.pkgdev_bugs.urllib.urlopen", session):
- bugs.GraphNode(((pkg, {"*"}),)).file_bug("API", frozenset(), ())
+ bugs.GraphNode(((pkg, {"*"}),)).file_bug("API", frozenset(), (), None)
assert len(session.calls) == 1
call = session.calls[0]
assert call["Bugzilla_api_key"] == "API"
@@ -83,7 +83,7 @@ class TestBugFiling:
session = BugsSession()
pkg = max(repo.itermatch(atom("=cat/z-0")))
with patch("pkgdev.scripts.pkgdev_bugs.urllib.urlopen", session):
- bugs.GraphNode(((pkg, {"*"}),)).file_bug("API", frozenset(), ())
+ bugs.GraphNode(((pkg, {"*"}),)).file_bug("API", frozenset(), (), None)
assert len(session.calls) == 1
call = session.calls[0]
assert call["assigned_to"] == "maintainer-needed@gentoo.org"
@@ -99,7 +99,7 @@ class TestBugFiling:
node = bugs.GraphNode(((pkgX, {"*"}), (pkgY, {"*"}), (pkgZ, {"*"})))
node.edges.add(dep)
with patch("pkgdev.scripts.pkgdev_bugs.urllib.urlopen", session):
- node.file_bug("API", frozenset(), ())
+ node.file_bug("API", frozenset(), (), None)
assert len(session.calls) == 1
call = session.calls[0]
assert call["summary"] == "cat/x-0, cat/y-0, cat/z-0: stablereq"