about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWeihang Lo <me@weihanglo.tw>2023-04-19 21:31:43 +0100
committerWeihang Lo <me@weihanglo.tw>2023-04-20 09:27:52 +0100
commit60f17908fa57a8315f8ea7d238e7b3285d8f7d65 (patch)
tree2a24533e89b03f4b6f606ceb0485bdc4a674c166
parent4e463012580415a932ae4fc255aff45982c70369 (diff)
downloadrust-60f17908fa57a8315f8ea7d238e7b3285d8f7d65.tar.gz
rust-60f17908fa57a8315f8ea7d238e7b3285d8f7d65.zip
linkchecker: running from a directory separate from the book
Since rust-lang/cargo#11851, Cargo became a Cargo workspace of
itself. However, since `src/tools/linkchecker` cannot run inside
a workspace, Cargo needs a workaround that excludes `src/doc`
from workspace member probing.

To remove this hack, this PR adds a new optional argument `--path`
for `linkchecker.sh`. With this new argument, `linkchecker.sh` can
be run from a directory separate from the book. This also benefits
other projects using linkchecker, as they can run it under target
directory or any other directory, reducing leftover.
-rwxr-xr-xsrc/tools/linkchecker/linkcheck.sh26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/tools/linkchecker/linkcheck.sh b/src/tools/linkchecker/linkcheck.sh
index 9eeebf444a4..6c1e668a7f0 100755
--- a/src/tools/linkchecker/linkcheck.sh
+++ b/src/tools/linkchecker/linkcheck.sh
@@ -16,15 +16,13 @@
 #
 # --all     Check all books. This can help make sure you don't break links
 #           from other books into your book.
+#
+# --path <book-path>
+#           Path to the root directory for the book. Default to the current
+#           working directory if omitted.
 
 set -e
 
-if [ ! -f book.toml ] && [ ! -f src/SUMMARY.md ]
-then
-    echo "Run command in root directory of the book."
-    exit 1
-fi
-
 html_dir="$(rustc +nightly --print sysroot)/share/doc/rust/html"
 
 if [ ! -d "$html_dir" ]
@@ -38,6 +36,8 @@ fi
 export MDBOOK_OUTPUT__HTML__INPUT_404=""
 
 book_name=""
+# Default to the current directory
+book_path="."
 # Iterative will avoid cleaning up, so you can quickly run it repeatedly.
 iterative=0
 # If "1", test all books, else only this book.
@@ -52,6 +52,10 @@ do
         --all)
             all_books=1
             ;;
+        --path)
+            book_path="${2:-.}"
+            shift
+            ;;
         *)
             if [ -n "$book_name" ]
             then
@@ -70,6 +74,12 @@ then
     exit 1
 fi
 
+if [ ! -f "$book_path/book.toml" ] && [ ! -f "$book_path/src/SUMMARY.md" ]
+then
+    echo "Run command in root directory of the book or provide a path to the book"
+    exit 1
+fi
+
 if [ ! -d "$html_dir/$book_name" ]
 then
     echo "book name \"$book_name\" not found in sysroot \"$html_dir\""
@@ -93,11 +103,11 @@ then
 fi
 
 echo "Building book \"$book_name\"..."
-mdbook build
+mdbook build "$book_path"
 
 cp -R "$html_dir" linkcheck
 rm -rf "linkcheck/$book_name"
-cp -R book "linkcheck/$book_name"
+cp -R "$book_path/book" "linkcheck/$book_name"
 
 if [ "$all_books" = "1" ]
 then