+def version_from_git():
+ git_describe = 'git describe'
+ rv = run(git_describe.split(), stdout=PIPE, stderr=PIPE)
+ if rv.returncode != 0:
+ sys.exit(rv.returncode)
+ return rv.stdout.decode('ascii').split('\n')[0]
+
+class MarkDown():
+ _dispatch = {}
+
+ def __init__(self, stream):
+ self.stream = stream
+ self.toc = []
+
+ def print_maintainer(self, o):
+ write = self.stream.write
+ if type(o) is list:
+ write('Maintainers: ' +
+ ', '.join(f'{m}' for m in
+ o) + ' \n')
+ else:
+ write(f'Maintainer: {o} \n')
+
+ _dispatch['maintainer'] = print_maintainer
+
+ def print_features(self, o, indent=0):
+ write = self.stream.write
+ for f in o:
+ indentstr = ' ' * indent
+ if type(f) is dict:
+ for k, v in f.items():
+ write(f'{indentstr}- {k}\n')
+ self.print_features(v, indent + 2)
+ else:
+ write(f'{indentstr}- {f}\n')
+ write('\n')
+ _dispatch['features'] = print_features
+
+ def print_markdown_header(self, o):
+ write = self.stream.write
+ write(f'## {o}\n')
+ version = version_from_git()
+ write(f'VPP version: {version}\n\n')
+ _dispatch['markdown_header'] = print_markdown_header
+
+ def print_name(self, o):
+ write = self.stream.write
+ write(f'### {o}\n')
+ self.toc.append(o)
+ _dispatch['name'] = print_name