diff options
author | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-08-22 15:47:16 +0100 |
---|---|---|
committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-08-22 15:47:16 +0100 |
commit | 25335618bf8755ce6b116ee14f47f5a1f2c821e9 (patch) | |
tree | d889d7ab3f9f985d0c54c534cb8052bd2e6d7163 /tools/package_docs.py | |
download | bzr-tarball-25335618bf8755ce6b116ee14f47f5a1f2c821e9.tar.gz |
Tarball conversion
Diffstat (limited to 'tools/package_docs.py')
-rw-r--r-- | tools/package_docs.py | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/tools/package_docs.py b/tools/package_docs.py new file mode 100644 index 0000000..4742f59 --- /dev/null +++ b/tools/package_docs.py @@ -0,0 +1,109 @@ +#!/usr/bin/python + +# Copyright 2009 Canonical Ltd. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import sys +import tarfile +from optparse import OptionParser +from shutil import copy2, copytree, rmtree + +sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) + + +def package_docs(section, src_build, dest_html, dest_downloads): + """Package docs from a Sphinx _build directory into target directories. + + :param section: section in the website being built + :param src_build: the _build directory + :param dest_html: the directory where html should go + :param downloads: the directory where downloads should go + """ + # Copy across the HTML. Explicitly delete the html destination + # directory first though because copytree insists on it not existing. + src_html = os.path.join(src_build, 'html') + if os.path.exists(dest_html): + rmtree(dest_html) + copytree(src_html, dest_html) + + # Package the html as a downloadable archive + archive_root = "bzr-%s-html" % (section,) + archive_basename = "%s.tar.bz2" % (archive_root,) + archive_name = os.path.join(dest_downloads, archive_basename) + build_archive(src_html, archive_name, archive_root, 'bz2') + + # Copy across the PDF docs, if any, including the quick ref card + pdf_files = [] + quick_ref = os.path.join(src_html, + '_static/%s/bzr-%s-quick-reference.pdf' % (section, section)) + if os.path.exists(quick_ref): + pdf_files.append(quick_ref) + src_pdf = os.path.join(src_build, 'latex') + if os.path.exists(src_pdf): + for name in os.listdir(src_pdf): + if name.endswith('.pdf'): + pdf_files.append(os.path.join(src_pdf, name)) + if pdf_files: + dest_pdf = os.path.join(dest_downloads, 'pdf-%s' % (section,)) + if not os.path.exists(dest_pdf): + os.mkdir(dest_pdf) + for pdf in pdf_files: + copy2(pdf, dest_pdf) + + # TODO: copy across the CHM files, if any + + +def build_archive(src_dir, archive_name, archive_root, format): + print "creating %s ..." % (archive_name,) + tar = tarfile.open(archive_name, "w:%s" % (format,)) + for relpath in os.listdir(src_dir): + src_path = os.path.join(src_dir, relpath) + archive_path = os.path.join(archive_root, relpath) + tar.add(src_path, arcname=archive_path) + tar.close() + + +def main(argv): + # Check usage. The first argument is the parent directory of + # the Sphinx _build directory. It will typically be 'doc/xx'. + # The second argument is the website build directory. + parser = OptionParser(usage="%prog SOURCE-DIR WEBSITE-BUILD-DIR") + (options, args) = parser.parse_args(argv) + if len(args) != 2: + parser.print_help() + sys.exit(1) + + # Get the section - locale code or 'developers' + src_dir = args[0] + section = os.path.basename(src_dir) + src_build = os.path.join(src_dir, '_build') + + # Create the destination directories if they doesn't exist. + dest_dir = args[1] + dest_html = os.path.join(dest_dir, section) + dest_downloads = os.path.join(dest_dir, 'downloads') + for d in [dest_dir, dest_downloads]: + if not os.path.exists(d): + print "creating directory %s ..." % (d,) + os.mkdir(d) + + # Package and copy the files across + package_docs(section, src_build, dest_html, dest_downloads) + + +if __name__ == '__main__': + main(sys.argv[1:]) |