bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 
4634.39.21
by Ian Clatworthy
 First cut at a smart packaging script for the doc website  | 
1  | 
#!/usr/bin/python
 | 
2  | 
||
3  | 
# Copyright 2009 Canonical Ltd.
 | 
|
4  | 
#
 | 
|
5  | 
# This program is free software; you can redistribute it and/or modify
 | 
|
6  | 
# it under the terms of the GNU General Public License as published by
 | 
|
7  | 
# the Free Software Foundation; either version 2 of the License, or
 | 
|
8  | 
# (at your option) any later version.
 | 
|
9  | 
#
 | 
|
10  | 
# This program is distributed in the hope that it will be useful,
 | 
|
11  | 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
|
12  | 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
|
13  | 
# GNU General Public License for more details.
 | 
|
14  | 
#
 | 
|
15  | 
# You should have received a copy of the GNU General Public License
 | 
|
16  | 
# along with this program; if not, write to the Free Software
 | 
|
17  | 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
|
18  | 
||
19  | 
import os  | 
|
20  | 
import sys  | 
|
| 
4634.39.29
by Ian Clatworthy
 package html into bundles  | 
21  | 
import tarfile  | 
| 
4634.39.21
by Ian Clatworthy
 First cut at a smart packaging script for the doc website  | 
22  | 
from optparse import OptionParser  | 
23  | 
from shutil import copy2, copytree, rmtree  | 
|
24  | 
||
25  | 
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))  | 
|
26  | 
||
27  | 
||
28  | 
def package_docs(section, src_build, dest_html, dest_downloads):  | 
|
29  | 
"""Package docs from a Sphinx _build directory into target directories.  | 
|
30  | 
||
31  | 
    :param section: section in the website being built
 | 
|
32  | 
    :param src_build: the _build directory
 | 
|
33  | 
    :param dest_html: the directory where html should go
 | 
|
34  | 
    :param downloads: the directory where downloads should go
 | 
|
35  | 
    """
 | 
|
36  | 
    # Copy across the HTML. Explicitly delete the html destination
 | 
|
37  | 
    # directory first though because copytree insists on it not existing.
 | 
|
38  | 
src_html = os.path.join(src_build, 'html')  | 
|
39  | 
if os.path.exists(dest_html):  | 
|
40  | 
rmtree(dest_html)  | 
|
41  | 
copytree(src_html, dest_html)  | 
|
42  | 
||
| 
4634.39.29
by Ian Clatworthy
 package html into bundles  | 
43  | 
    # Package the html as a downloadable archive
 | 
44  | 
archive_root = "bzr-%s-html" % (section,)  | 
|
45  | 
archive_basename = "%s.tar.bz2" % (archive_root,)  | 
|
46  | 
archive_name = os.path.join(dest_downloads, archive_basename)  | 
|
47  | 
build_archive(src_html, archive_name, archive_root, 'bz2')  | 
|
| 
4634.39.21
by Ian Clatworthy
 First cut at a smart packaging script for the doc website  | 
48  | 
|
| 
4634.39.29
by Ian Clatworthy
 package html into bundles  | 
49  | 
    # Copy across the PDF docs, if any, including the quick ref card
 | 
| 
4634.39.21
by Ian Clatworthy
 First cut at a smart packaging script for the doc website  | 
50  | 
pdf_files = []  | 
51  | 
quick_ref = os.path.join(src_html,  | 
|
| 
4634.39.31
by Ian Clatworthy
 tweak quick reference naming to make it consistent with other PDFs  | 
52  | 
'_static/%s/bzr-%s-quick-reference.pdf' % (section, section))  | 
| 
4634.39.21
by Ian Clatworthy
 First cut at a smart packaging script for the doc website  | 
53  | 
if os.path.exists(quick_ref):  | 
54  | 
pdf_files.append(quick_ref)  | 
|
55  | 
src_pdf = os.path.join(src_build, 'latex')  | 
|
56  | 
if os.path.exists(src_pdf):  | 
|
57  | 
for name in os.listdir(src_pdf):  | 
|
58  | 
if name.endswith('.pdf'):  | 
|
59  | 
pdf_files.append(os.path.join(src_pdf, name))  | 
|
60  | 
if pdf_files:  | 
|
61  | 
dest_pdf = os.path.join(dest_downloads, 'pdf-%s' % (section,))  | 
|
62  | 
if not os.path.exists(dest_pdf):  | 
|
63  | 
os.mkdir(dest_pdf)  | 
|
64  | 
for pdf in pdf_files:  | 
|
65  | 
copy2(pdf, dest_pdf)  | 
|
66  | 
||
67  | 
    # TODO: copy across the CHM files, if any
 | 
|
68  | 
||
69  | 
||
| 
4634.39.29
by Ian Clatworthy
 package html into bundles  | 
70  | 
def build_archive(src_dir, archive_name, archive_root, format):  | 
71  | 
print "creating %s ..." % (archive_name,)  | 
|
72  | 
tar = tarfile.open(archive_name, "w:%s" % (format,))  | 
|
73  | 
for relpath in os.listdir(src_dir):  | 
|
74  | 
src_path = os.path.join(src_dir, relpath)  | 
|
75  | 
archive_path = os.path.join(archive_root, relpath)  | 
|
76  | 
tar.add(src_path, arcname=archive_path)  | 
|
77  | 
tar.close()  | 
|
78  | 
||
79  | 
||
| 
4634.39.21
by Ian Clatworthy
 First cut at a smart packaging script for the doc website  | 
80  | 
def main(argv):  | 
81  | 
    # Check usage. The first argument is the parent directory of
 | 
|
82  | 
    # the Sphinx _build directory. It will typically be 'doc/xx'.
 | 
|
83  | 
    # The second argument is the website build directory.
 | 
|
84  | 
parser = OptionParser(usage="%prog SOURCE-DIR WEBSITE-BUILD-DIR")  | 
|
85  | 
(options, args) = parser.parse_args(argv)  | 
|
86  | 
if len(args) != 2:  | 
|
87  | 
parser.print_help()  | 
|
88  | 
sys.exit(1)  | 
|
89  | 
||
90  | 
    # Get the section - locale code or 'developers'
 | 
|
91  | 
src_dir = args[0]  | 
|
92  | 
section = os.path.basename(src_dir)  | 
|
93  | 
src_build = os.path.join(src_dir, '_build')  | 
|
94  | 
||
95  | 
    # Create the destination directories if they doesn't exist.
 | 
|
96  | 
dest_dir = args[1]  | 
|
97  | 
dest_html = os.path.join(dest_dir, section)  | 
|
98  | 
dest_downloads = os.path.join(dest_dir, 'downloads')  | 
|
99  | 
for d in [dest_dir, dest_downloads]:  | 
|
100  | 
if not os.path.exists(d):  | 
|
101  | 
print "creating directory %s ..." % (d,)  | 
|
102  | 
os.mkdir(d)  | 
|
103  | 
||
104  | 
    # Package and copy the files across
 | 
|
105  | 
package_docs(section, src_build, dest_html, dest_downloads)  | 
|
106  | 
||
107  | 
||
108  | 
if __name__ == '__main__':  | 
|
109  | 
main(sys.argv[1:])  |