Skip to content

Commit 1e2bf79

Browse files
committed
remove use of _G.repo by sending all reports back to master process
1 parent 20362f2 commit 1e2bf79

File tree

4 files changed

+41
-22
lines changed

4 files changed

+41
-22
lines changed

lilac2/api.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -426,8 +426,7 @@ def update_aur_repo() -> None:
426426
_update_aur_repo_real(pkgbase)
427427
except Exception as e:
428428
l10n = intl.get_l10n('mail')
429-
_G.repo.send_error_report(
430-
_G.mod,
429+
_G.add_report(
431430
exc = e,
432431
subject = l10n.format_value('aur-submit-error'),
433432
)

lilac2/building.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import signal
1414
from contextlib import suppress
1515

16-
from .typing import LilacInfo, Cmd, RUsage, PkgToBuild, OnBuildVers
16+
from .typing import LilacInfo, Cmd, RUsage, PkgToBuild, OnBuildVers, Report
1717
from .nvchecker import NvResults
1818
from .packages import Dependency, get_built_package_files
1919
from .tools import reap_zombies
@@ -255,13 +255,15 @@ def call_worker(
255255
elif st == 'skipped':
256256
error = SkipBuild(r['msg'])
257257
elif st == 'failed':
258-
if report := r.get('report'):
259-
repo.send_error_report(
260-
lilacinfo,
261-
subject = report['subject'],
262-
msg = report['msg'],
263-
logfile = logfile,
264-
)
258+
if reports := r.get('reports'):
259+
for r in reports:
260+
report = Report(**r)
261+
repo.send_error_report(
262+
lilacinfo,
263+
subject = report.subject,
264+
msg = report.msg,
265+
logfile = logfile if report.sendlog else None,
266+
)
265267
error = BuildFailed(r['msg'])
266268
else:
267269
error = RuntimeError('unknown status from worker', st)

lilac2/typing.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,9 @@ class PkgToBuild:
120120
pkgbase: str
121121
on_build_vers: OnBuildVers = dataclasses.field(default_factory=list)
122122
workerman: Optional[WorkerManager] = None
123+
124+
@dataclasses.dataclass
125+
class Report:
126+
subject: str
127+
msg: str
128+
sendlog: bool = True

lilac2/worker.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,16 @@
1111
from pathlib import Path
1212
import platform
1313
import traceback
14+
from functools import partial
15+
import dataclasses
1416

1517
import pyalpm
1618

1719
from .vendor.nicelogger import enable_pretty_logging
1820
from .vendor.myutils import file_lock
1921

2022
from . import pkgbuild
21-
from .typing import LilacMod, Cmd, OnBuildVers
23+
from .typing import LilacMod, Cmd, OnBuildVers, Report
2224
from .cmd import run_cmd, UNTRUSTED_PREFIX
2325
from .api import (
2426
vcs_update, get_pkgver_and_pkgrel, update_pkgrel,
@@ -219,6 +221,8 @@ def main() -> None:
219221

220222
_G.commit_msg_template = input['commit_msg_template']
221223
_G.reponame = input['reponame']
224+
reports: list[Report] = []
225+
_G.add_report = partial(add_report, reports)
222226

223227
r: dict[str, Any]
224228
try:
@@ -245,7 +249,8 @@ def main() -> None:
245249
'msg': repr(e),
246250
}
247251
sys.stdout.flush()
248-
r['report'] = gen_failure_report(e)
252+
logger.error('build failed', exc_info=e)
253+
reports.append(gen_failure_report(e))
249254
except KeyboardInterrupt:
250255
logger.info('KeyboardInterrupt received')
251256
r = {
@@ -257,33 +262,31 @@ def main() -> None:
257262
kill_child_processes()
258263

259264
r['version'] = getattr(_G, 'built_version', None)
265+
r['reports'] = [dataclasses.asdict(r) for r in reports]
260266

261267
with open(input['result'], 'w') as f:
262268
json.dump(r, f)
263269

264-
def gen_failure_report(e: Exception) -> dict[str, str]:
265-
logger.error('build failed', exc_info=e)
270+
def gen_failure_report(e: Exception) -> Report:
266271
l10n = intl.get_l10n('mail')
267272

268-
report = {}
269-
270273
if isinstance(e, pkgbuild.ConflictWithOfficialError):
271274
reason = ''
272275
if e.groups:
273276
reason += l10n.format_value('package-in-official-group', {'groups': repr(e.groups)}) + '\n'
274277
if e.packages:
275278
reason += l10n.format_value('package-replacing-official-package', {'packages': repr(e.packages)}) + '\n'
276279
subj = l10n.format_value('package-conflicts-with-official-repos')
277-
report['subject'] = subj
278-
report['msg'] = reason,
280+
report = Report(subject=subj, msg=reason)
279281

280282
elif isinstance(e, pkgbuild.DowngradingError):
281-
report['subject'] = l10n.format_value('package-older-subject')
282-
report['msg'] = l10n.format_value('package-older-body', {
283+
subj = l10n.format_value('package-older-subject')
284+
msg = l10n.format_value('package-older-body', {
283285
'pkg': e.pkgname,
284286
'built_version': e.built_version,
285287
'repo_version': e.repo_version,
286288
}) + '\n'
289+
report = Report(subject=subj, msg=msg)
287290

288291
else:
289292
msgs = []
@@ -310,10 +313,19 @@ def gen_failure_report(e: Exception) -> dict[str, str]:
310313
subject = l10n.format_value('packaging-error-unknown-subject')
311314
msg1 = l10n.format_value('packaging-error-unknown')
312315
msgs.append(msg1 + '\n\n' + tb)
313-
report['subject'] = subject
314-
report['msg'] = '\n'.join(msgs)
316+
report = Report(subject=subject, msg='\n'.join(msgs))
315317

316318
return report
317319

320+
def add_report(
321+
reports: list[Report],
322+
exc: Exception,
323+
subject: str,
324+
) -> None:
325+
report = gen_failure_report(exc)
326+
report.subject = subject
327+
report.sendlog = False
328+
reports.append(report)
329+
318330
if __name__ == '__main__':
319331
main()

0 commit comments

Comments
 (0)