From 0e376a69ed9b29fd9490756bb4340d91884b72ef Mon Sep 17 00:00:00 2001 From: Julien Palard Date: Tue, 30 Jun 2020 17:56:47 +0200 Subject: [PATCH 1/3] Doc: fix parallel build. --- Doc/tools/extensions/pyspecific.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Doc/tools/extensions/pyspecific.py b/Doc/tools/extensions/pyspecific.py index 46064fa3b6b00c..3ea261b48c6777 100644 --- a/Doc/tools/extensions/pyspecific.py +++ b/Doc/tools/extensions/pyspecific.py @@ -125,6 +125,24 @@ def run(self): # Support for documenting audit event +def audit_events_merge(app, env, docnames, other): + """In Sphinx parallel builds, this merges env.all_audit_events from + subprocesses. + + all_audit_events is a dict of names, with values like: + {'source': [...], 'args': args} + """ + if not hasattr(other, 'all_audit_events'): + return + if not hasattr(env, 'all_audit_events'): + env.all_audit_events = {} + for name, value in other.all_audit_events.items(): + if name in env.all_audit_events: + env.all_audit_events[name]["source"].extend(value["source"]) + else: + env.all_audit_events[name] = value + + class AuditEvent(Directive): has_content = True @@ -589,4 +607,5 @@ def setup(app): app.add_directive_to_domain('py', 'abstractmethod', PyAbstractMethod) app.add_directive('miscnews', MiscNews) app.connect('doctree-resolved', process_audit_events) + app.connect('env-merge-info', audit_events_merge) return {'version': '1.0', 'parallel_read_safe': True} From a9709dd8bf601dc325420313b39a7e3771464e97 Mon Sep 17 00:00:00 2001 From: Julien Palard Date: Tue, 30 Jun 2020 18:17:21 +0200 Subject: [PATCH 2/3] Doc: Purge audit event table as documents gets removed (or freshly read). --- Doc/tools/extensions/pyspecific.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Doc/tools/extensions/pyspecific.py b/Doc/tools/extensions/pyspecific.py index 3ea261b48c6777..f9c808f8e8037d 100644 --- a/Doc/tools/extensions/pyspecific.py +++ b/Doc/tools/extensions/pyspecific.py @@ -125,12 +125,27 @@ def run(self): # Support for documenting audit event +def audit_events_purge(app, env, docname): + """This is to remove from env.all_audit_events old traces of removed + documents. + """ + if not hasattr(env, 'all_audit_events'): + return + fresh_all_audit_events = {} + for name, event in env.all_audit_events: + event["source"] = [(d, t) for d, t in event["source"] if d != docname] + if event["source"]: + # Only keep audit_events that have at least one source. + fresh_all_audit_events[name] = event + env.all_audit_events = fresh_all_audit_events + + def audit_events_merge(app, env, docnames, other): """In Sphinx parallel builds, this merges env.all_audit_events from subprocesses. all_audit_events is a dict of names, with values like: - {'source': [...], 'args': args} + {'source': [(docname, target), ...], 'args': args} """ if not hasattr(other, 'all_audit_events'): return @@ -608,4 +623,5 @@ def setup(app): app.add_directive('miscnews', MiscNews) app.connect('doctree-resolved', process_audit_events) app.connect('env-merge-info', audit_events_merge) + app.connect('env-purge-doc', audit_events_purge) return {'version': '1.0', 'parallel_read_safe': True} From 72b13bf7e2944b529374d61da832189c509ed1e2 Mon Sep 17 00:00:00 2001 From: Julien Palard Date: Tue, 30 Jun 2020 23:17:35 +0200 Subject: [PATCH 3/3] FIX: Missing .items() --- Doc/tools/extensions/pyspecific.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/tools/extensions/pyspecific.py b/Doc/tools/extensions/pyspecific.py index f9c808f8e8037d..008dd8a6f7c8cd 100644 --- a/Doc/tools/extensions/pyspecific.py +++ b/Doc/tools/extensions/pyspecific.py @@ -132,7 +132,7 @@ def audit_events_purge(app, env, docname): if not hasattr(env, 'all_audit_events'): return fresh_all_audit_events = {} - for name, event in env.all_audit_events: + for name, event in env.all_audit_events.items(): event["source"] = [(d, t) for d, t in event["source"] if d != docname] if event["source"]: # Only keep audit_events that have at least one source.