|
|
|
#! /usr/bin/env python
|
|
|
|
|
|
|
|
from docutils.core import publish_file
|
|
|
|
import fileinput
|
|
|
|
import glob
|
|
|
|
import os
|
|
|
|
import shutil
|
|
|
|
import subprocess
|
|
|
|
import sys
|
|
|
|
|
|
|
|
stylesheets = {
|
|
|
|
"stylesheet_path": ["basic.css", "nature.css"]
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
def get_git_ver_string():
|
|
|
|
null = open(os.devnull, 'w')
|
|
|
|
cwd = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
try:
|
|
|
|
git_branch = subprocess.check_output(
|
|
|
|
['git', 'rev-parse', '--abbrev-ref', 'HEAD'],
|
|
|
|
stderr=null,
|
|
|
|
cwd=cwd,
|
|
|
|
).strip()
|
|
|
|
except subprocess.CalledProcessError:
|
|
|
|
git_branch = ""
|
|
|
|
try:
|
|
|
|
git_tag = subprocess.check_output(
|
|
|
|
['git', 'describe', '--exact-match'],
|
|
|
|
stderr=null,
|
|
|
|
cwd=cwd,
|
|
|
|
).strip()
|
|
|
|
git_tag = "tag=" + git_tag
|
|
|
|
except subprocess.CalledProcessError:
|
|
|
|
git_tag = ""
|
|
|
|
try:
|
|
|
|
git_commit = subprocess.check_output(
|
|
|
|
['git', 'rev-parse', '--short', 'HEAD'],
|
|
|
|
stderr=null,
|
|
|
|
cwd=cwd,
|
|
|
|
).strip()
|
|
|
|
except subprocess.CalledProcessError:
|
|
|
|
git_commit = ""
|
|
|
|
try:
|
|
|
|
dirty_string = "-this_is_a_dirty_checkout"
|
|
|
|
is_dirty = subprocess.check_output(
|
|
|
|
['git', 'describe', '--dirty=' + dirty_string, "--all"],
|
|
|
|
stderr=null,
|
|
|
|
cwd=cwd,
|
|
|
|
).strip().endswith(dirty_string)
|
|
|
|
git_dirty = "dirty" if is_dirty else ""
|
|
|
|
except subprocess.CalledProcessError:
|
|
|
|
git_dirty = ""
|
|
|
|
|
|
|
|
if git_branch or git_tag or git_commit or git_dirty:
|
|
|
|
git_version = ",".join(
|
|
|
|
s for s in
|
|
|
|
(git_branch, git_tag, git_commit, git_dirty,)
|
|
|
|
if s
|
|
|
|
)
|
|
|
|
return git_version.encode("ascii")
|
|
|
|
return "Unknown rev"
|
|
|
|
|
|
|
|
|
|
|
|
def glob_spec_to(out_file_name):
|
|
|
|
with open(out_file_name, "wb") as outfile:
|
|
|
|
for f in sorted(glob.glob("../specification/*.rst")):
|
|
|
|
with open(f, "rb") as infile:
|
|
|
|
outfile.write(infile.read())
|
|
|
|
|
|
|
|
def set_git_version(filename):
|
|
|
|
git_ver = get_git_ver_string()
|
|
|
|
# inplace search and replace, stdout is redirected to the output
|
|
|
|
# file, hence the "print" lines here.
|
|
|
|
for line in fileinput.input(filename, inplace=True):
|
|
|
|
if "$GIT_VERSION" in line:
|
|
|
|
line = line.replace("$GIT_VERSION", git_ver)
|
|
|
|
print line.rstrip("\n")
|
|
|
|
|
|
|
|
|
|
|
|
def rst2html(i, o):
|
|
|
|
with open(i, "r") as in_file:
|
|
|
|
with open(o, "w") as out_file:
|
|
|
|
publish_file(
|
|
|
|
source=in_file,
|
|
|
|
destination=out_file,
|
|
|
|
reader_name="standalone",
|
|
|
|
parser_name="restructuredtext",
|
|
|
|
writer_name="html",
|
|
|
|
settings_overrides=stylesheets
|
|
|
|
)
|
|
|
|
|
|
|
|
def prepare_env():
|
|
|
|
try:
|
|
|
|
os.makedirs("./gen")
|
|
|
|
except OSError:
|
|
|
|
pass
|
|
|
|
try:
|
|
|
|
os.makedirs("./tmp")
|
|
|
|
except OSError:
|
|
|
|
pass
|
|
|
|
|
|
|
|
def cleanup_env():
|
|
|
|
pass
|
|
|
|
#shutil.rmtree("./tmp")
|
|
|
|
|
|
|
|
def main():
|
|
|
|
prepare_env()
|
|
|
|
glob_spec_to("tmp/full_spec.rst")
|
|
|
|
shutil.copy("../supporting-docs/howtos/client-server.rst", "tmp/howto.rst")
|
|
|
|
set_git_version("tmp/full_spec.rst")
|
|
|
|
set_git_version("tmp/howto.rst")
|
|
|
|
rst2html("tmp/full_spec.rst", "gen/specification.html")
|
|
|
|
rst2html("tmp/howto.rst", "gen/howtos.html")
|
|
|
|
cleanup_env()
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
main()
|