Have 'mach doc' copy Rust documentation.

This commit is contained in:
Simon Sapin 2014-11-28 18:27:11 +00:00
parent 873ca6cadd
commit d25c66904e
2 changed files with 33 additions and 18 deletions

View file

@ -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,6 +78,27 @@ 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())
@ -81,16 +110,7 @@ class MachCommands(CommandBase):
help="Port to serve documentation at (default is 8888)")
def serve_docs(self, port):
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)
chdir(path.join("components", "servo", "target", "doc"))
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", port), Handler)