fdd2c4b236
Currently there is no description of dependencies in the generated documentation of the elements: therefore a user of an element does not know which other elements are automatically included and e.g. which configuration options are available. In addition there are some copy&pastes of parts of the README.rst scattered thought different Ubuntu and Debian specific elements. This patch adds a semi-automatic generation of dependency information of all elements. Nevertheless these are not automatically included. The author of the element's README.rst can decide if and where the dependency information should appear and can use the descriptor .. element_deps:: for this. This patch adds the dependency information for some Debian and Ubuntu patches - and creates the base for later removing the duplicated parts. A call is added to element_dependencies._find_all_elements() to populate reverse dependencies for Element objects. (This is a reworking of I31d2b6050b6c46fefe37378698e9a330025db430 for the feature/v2 branch) Change-Id: Iebb83916fed71565071246baa550849eef40560b
69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
#
|
|
# Copyright 2017 Andreas Florath (andreas@florath.net)
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
#
|
|
# Scan the element directory, looks for element dependencies and
|
|
# writes them out when the directive
|
|
# .. element_deps::
|
|
# is used.
|
|
# This was developed only for internal use and must be called
|
|
# from the source top directory.
|
|
|
|
from diskimage_builder.element_dependencies import _find_all_elements
|
|
from diskimage_builder.paths import get_path
|
|
|
|
from docutils.parsers.rst import Directive
|
|
import os
|
|
|
|
all_elements = _find_all_elements(get_path("elements"))
|
|
|
|
|
|
def append_dependency_list(lines, title, element, deps):
|
|
if not deps:
|
|
return
|
|
lines.append(title)
|
|
lines.append("+" * len(title))
|
|
for dep in deps:
|
|
lines.append("* :doc:`../%s/README`\n" % dep)
|
|
|
|
|
|
class ElementDepsDirective(Directive):
|
|
|
|
# this enables content in the directive
|
|
has_content = True
|
|
|
|
def run(self):
|
|
source = self.state_machine.input_lines.source(
|
|
self.lineno - self.state_machine.input_offset - 1)
|
|
# Extract the element from the source attribute of the document
|
|
element_name = os.path.basename(os.path.dirname(
|
|
self.state_machine.document.attributes['source']))
|
|
|
|
lines = ["Element Dependencies",
|
|
"--------------------"]
|
|
|
|
# This should not fail -- sphinx would be finding an element
|
|
# that dib doesn't know about?
|
|
element = all_elements[element_name]
|
|
|
|
append_dependency_list(lines, "Uses", element, element.depends)
|
|
append_dependency_list(lines, "Used by", element, element.r_depends)
|
|
|
|
self.state_machine.insert_input(lines, source)
|
|
return []
|
|
|
|
|
|
def setup(app):
|
|
app.add_directive('element_deps', ElementDepsDirective)
|