diff options
author | bors-servo <metajack+bors@gmail.com> | 2014-12-03 16:27:56 -0700 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2014-12-03 16:27:56 -0700 |
commit | 6d1193547b3d6cb1f36edcd61ff0a2572a817bf8 (patch) | |
tree | 17e48384384386ec08af75e81c0d0d8c781ebad6 /python/servo | |
parent | 68c90e27970808bddcb8c8a4e782bd4405e67a5c (diff) | |
parent | 96c3c6fd434ac9493e9f877acfe666965b1d02cc (diff) | |
download | servo-6d1193547b3d6cb1f36edcd61ff0a2572a817bf8.tar.gz servo-6d1193547b3d6cb1f36edcd61ff0a2572a817bf8.zip |
auto merge of #4142 : SimonSapin/servo/refactor-doc, r=Manishearth
Diffstat (limited to 'python/servo')
-rw-r--r-- | python/servo/post_build_commands.py | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/python/servo/post_build_commands.py b/python/servo/post_build_commands.py index 972dea7429b..236726f4771 100644 --- a/python/servo/post_build_commands.py +++ b/python/servo/post_build_commands.py @@ -1,13 +1,14 @@ from __future__ import print_function, unicode_literals import argparse +import os import os.path as path from os import chdir import subprocess import SimpleHTTPServer import SocketServer import mozdebug -from shutil import copytree, rmtree, ignore_patterns +from shutil import copytree, rmtree, ignore_patterns, copy2 from mach.decorators import ( CommandArgument, @@ -18,6 +19,13 @@ from mach.decorators import ( from servo.command_base import CommandBase +def read_file(filename, if_exists=False): + if if_exists and not path.exists(filename): + return None + with open(filename) as f: + return f.read() + + @CommandProvider class MachCommands(CommandBase): @Command('run', @@ -70,30 +78,35 @@ class MachCommands(CommandBase): help="Command-line arguments to be passed through to cargo doc") def doc(self, params): self.ensure_bootstrapped() + + rust_docs = path.join(self.config["tools"]["rust-root"], "doc") + docs = path.join("components", "servo", "target", "doc") + if not path.exists(docs): + os.mkdir(docs) + + if read_file(path.join(docs, "version_info.html"), if_exists=True) != \ + read_file(path.join(rust_docs, "version_info.html")): + print("Copying Rust documentation.") + # copytree doesn't like the destination already existing. + for name in os.listdir(rust_docs): + if not name.startswith('.'): + full_name = path.join(rust_docs, name) + destination = path.join(docs, name) + if path.isdir(full_name): + if path.exists(destination): + rmtree(destination) + copytree(full_name, destination) + else: + copy2(full_name, destination) + return subprocess.call(["cargo", "doc"] + params, env=self.build_env(), cwd=self.servo_crate()) - @Command('serve-docs', - description='Locally serve Servo and Rust documentation', + @Command('browse-doc', + description='Generate documentation and open it in a web browser', category='post-build') - @CommandArgument( - 'port', default=8888, nargs='?', type=int, metavar='PORT', - help="Port to serve documentation at (default is 8888)") - def serve_docs(self, port): + def serve_docs(self): self.doc([]) - servedir = path.join("components", "servo", "target", "serve-docs") - docdir = path.join("components", "servo", "target", "doc") - - rmtree(servedir, True) - copytree(docdir, servedir, ignore=ignore_patterns('.*')) - - rustdocs = path.join(self.config["tools"]["rust-root"], "doc") - copytree(rustdocs, path.join(servedir, "rust"), ignore=ignore_patterns('.*')) - - chdir(servedir) - Handler = SimpleHTTPServer.SimpleHTTPRequestHandler - - httpd = SocketServer.TCPServer(("", port), Handler) - - print("serving at port", port) - httpd.serve_forever() + import webbrowser + webbrowser.open("file://" + path.abspath(path.join( + "target", "doc", "servo", "index.html"))) |