Index: b/doc/arm/conf.py =================================================================== --- a/doc/arm/conf.py +++ b/doc/arm/conf.py @@ -18,54 +18,58 @@ from docutils.nodes import Node, system_ from docutils.parsers.rst import roles from sphinx import addnodes -from sphinx.util.docutils import ReferenceRole +try: + from sphinx.util.docutils import ReferenceRole + GITLAB_BASE_URL = 'https://gitlab.isc.org/isc-projects/bind9/-/' -GITLAB_BASE_URL = 'https://gitlab.isc.org/isc-projects/bind9/-/' - -# Custom Sphinx role enabling automatic hyperlinking to GitLab issues/MRs. -class GitLabRefRole(ReferenceRole): - def __init__(self, base_url: str) -> None: - self.base_url = base_url - super().__init__() - - def run(self) -> Tuple[List[Node], List[system_message]]: - gl_identifier = '[GL %s]' % self.target - - target_id = 'index-%s' % self.env.new_serialno('index') - entries = [('single', 'GitLab; ' + gl_identifier, target_id, '', None)] - - index = addnodes.index(entries=entries) - target = nodes.target('', '', ids=[target_id]) - self.inliner.document.note_explicit_target(target) - - try: - refuri = self.build_uri() - reference = nodes.reference('', '', internal=False, refuri=refuri, - classes=['gl']) - if self.has_explicit_title: - reference += nodes.strong(self.title, self.title) - else: - reference += nodes.strong(gl_identifier, gl_identifier) - except ValueError: - error_text = 'invalid GitLab identifier %s' % self.target - msg = self.inliner.reporter.error(error_text, line=self.lineno) - prb = self.inliner.problematic(self.rawtext, self.rawtext, msg) - return [prb], [msg] - - return [index, target, reference], [] - - def build_uri(self): - if self.target[0] == '#': - return self.base_url + 'issues/%d' % int(self.target[1:]) - if self.target[0] == '!': - return self.base_url + 'merge_requests/%d' % int(self.target[1:]) - raise ValueError - - -def setup(_): - roles.register_local_role('gl', GitLabRefRole(GITLAB_BASE_URL)) + # Custom Sphinx role enabling automatic hyperlinking to GitLab issues/MRs. + class GitLabRefRole(ReferenceRole): + def __init__(self, base_url: str) -> None: + self.base_url = base_url + super().__init__() + + def run(self) -> Tuple[List[Node], List[system_message]]: + gl_identifier = '[GL %s]' % self.target + + target_id = 'index-%s' % self.env.new_serialno('index') + entries = [('single', 'GitLab; ' + gl_identifier, target_id, '', None)] + + index = addnodes.index(entries=entries) + target = nodes.target('', '', ids=[target_id]) + self.inliner.document.note_explicit_target(target) + + try: + refuri = self.build_uri() + reference = nodes.reference('', '', internal=False, refuri=refuri, + classes=['gl']) + if self.has_explicit_title: + reference += nodes.strong(self.title, self.title) + else: + reference += nodes.strong(gl_identifier, gl_identifier) + except ValueError: + error_text = 'invalid GitLab identifier %s' % self.target + msg = self.inliner.reporter.error(error_text, line=self.lineno) + prb = self.inliner.problematic(self.rawtext, self.rawtext, msg) + return [prb], [msg] + + return [index, target, reference], [] + + def build_uri(self): + if self.target[0] == '#': + return self.base_url + 'issues/%d' % int(self.target[1:]) + if self.target[0] == '!': + return self.base_url + 'merge_requests/%d' % int(self.target[1:]) + raise ValueError + + + def setup(_): + roles.register_local_role('gl', GitLabRefRole(GITLAB_BASE_URL)) + +except ImportError: + # better loose this feature, than failing the build + pass # # Configuration file for the Sphinx documentation builder.