From 5d45170b02fc3055f9a80d06f7ab1f508c8de98f Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Tue, 17 Dec 2013 12:05:36 -0500 Subject: [PATCH 1/2] Add a rustdoc test This is just a smoke test which verifies that the expected files are generated. Also makes the rmake tests have the right deps. --- mk/tests.mk | 5 +++-- src/etc/maketest.py | 1 + src/test/run-make/rustdoc-smoke/Makefile | 5 +++++ src/test/run-make/rustdoc-smoke/foo.rs | 15 +++++++++++++++ src/test/run-make/rustdoc-smoke/verify.sh | 17 +++++++++++++++++ 5 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 src/test/run-make/rustdoc-smoke/Makefile create mode 100644 src/test/run-make/rustdoc-smoke/foo.rs create mode 100755 src/test/run-make/rustdoc-smoke/verify.sh diff --git a/mk/tests.mk b/mk/tests.mk index f266a8975b4b3..b026055ab25b4 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -920,14 +920,15 @@ $$(call TEST_OK_FILE,$(1),$(2),$(3),rmake): \ $(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \ $(S)src/test/run-make/%/Makefile \ - $$(HSREQ$(1)_H_$(3)) + $$(CSREQ$(1)_T_$(2)_H_$(3)) @rm -rf $(3)/test/run-make/$$* @mkdir -p $(3)/test/run-make/$$* @echo maketest: $$* $$(Q)$$(CFG_PYTHON) $(S)src/etc/maketest.py $$(dir $$<) \ $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ $(3)/test/run-make/$$* \ - "$$(CC_$(3)) $$(CFG_GCCISH_CFLAGS_$(3))" + "$$(CC_$(3)) $$(CFG_GCCISH_CFLAGS_$(3))" \ + $$(HBIN$(1)_H_$(3))/rustdoc$$(X_$(3)) @touch $$@ endef diff --git a/src/etc/maketest.py b/src/etc/maketest.py index 96c658e56864b..00d80e1bf4d1d 100644 --- a/src/etc/maketest.py +++ b/src/etc/maketest.py @@ -7,6 +7,7 @@ os.putenv('RUSTC', os.path.abspath(sys.argv[2])) os.putenv('TMPDIR', os.path.abspath(sys.argv[3])) os.putenv('CC', sys.argv[4]) +os.putenv('RUSTDOC', os.path.abspath(sys.argv[5])) proc = subprocess.Popen(['make', '-C', sys.argv[1]], stdout = subprocess.PIPE, diff --git a/src/test/run-make/rustdoc-smoke/Makefile b/src/test/run-make/rustdoc-smoke/Makefile new file mode 100644 index 0000000000000..0de678e72488b --- /dev/null +++ b/src/test/run-make/rustdoc-smoke/Makefile @@ -0,0 +1,5 @@ +-include ../tools.mk +all: + $(RUSTDOC) -w html -o $(TMPDIR)/doc foo.rs + cp verify.sh $(TMPDIR) + $(call RUN,verify.sh) $(TMPDIR) diff --git a/src/test/run-make/rustdoc-smoke/foo.rs b/src/test/run-make/rustdoc-smoke/foo.rs new file mode 100644 index 0000000000000..7a86bf4d1e86f --- /dev/null +++ b/src/test/run-make/rustdoc-smoke/foo.rs @@ -0,0 +1,15 @@ +#[pkgid = "foo#0.1"]; + +//! Very docs + +pub mod bar { + + /// So correct + pub mod baz { + /// Much detail + pub fn baz() { } + } + + /// *wow* + pub trait Doge { } +} diff --git a/src/test/run-make/rustdoc-smoke/verify.sh b/src/test/run-make/rustdoc-smoke/verify.sh new file mode 100755 index 0000000000000..18f3939794e47 --- /dev/null +++ b/src/test/run-make/rustdoc-smoke/verify.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +# $1 is the TMPDIR + +dirs="doc doc/foo doc/foo/bar doc/foo/bar/baz doc/src doc/src/foo" + +for dir in $dirs; do if [ ! -d $1/$dir ]; then + echo "$1/$dir is not a directory!" + exit 1 +fi done + +files="doc/foo/index.html doc/foo/bar/index.html doc/foo/bar/baz/fn.baz.html doc/foo/bar/trait.Doge.html doc/src/foo/foo.rs.html" + +for file in $files; do if [ ! -f $1/$file ]; then + echo "$1/$file is not a file!" + exit 1 +fi done From 21bec4f11bd66f9ff7e74eb878efe3d487057329 Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Wed, 18 Dec 2013 12:26:19 -0500 Subject: [PATCH 2/2] rustdoc: thread through the context for rendering This partially reverts 8b5a317. --- src/librustdoc/html/render.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 3d2e03785ed91..c84caf8acdd3a 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -678,7 +678,13 @@ impl Context { // using a rwarc makes this parallelizable in the future local_data::set(cache_key, Arc::new(cache)); - self.item(item); + let mut work = ~[(self, item)]; + while work.len() > 0 { + let (mut cx, item) = work.pop(); + cx.item(item, |cx, item| { + work.push((cx.clone(), item)); + }) + } } /// Non-parellelized version of rendering an item. This will take the input @@ -686,7 +692,7 @@ impl Context { /// all sub-items which need to be rendered. /// /// The rendering driver uses this closure to queue up more work. - fn item(&mut self, item: clean::Item) { + fn item(&mut self, item: clean::Item, f: |&mut Context, clean::Item|) { fn render(w: io::File, cx: &mut Context, it: &clean::Item, pushname: bool) { info!("Rendering an item to {}", w.path().display()); @@ -733,7 +739,7 @@ impl Context { }; this.sidebar = build_sidebar(&m); for item in m.items.move_iter() { - this.item(item); + f(this,item); } }) }