From 698f8c2f01ea549d77d7dc3338a12e04c11057b9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:02:58 +0200 Subject: Adding upstream version 1.64.0+dfsg1. Signed-off-by: Daniel Baumann --- src/doc/book/tools/update-rustc.sh | 93 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100755 src/doc/book/tools/update-rustc.sh (limited to 'src/doc/book/tools/update-rustc.sh') diff --git a/src/doc/book/tools/update-rustc.sh b/src/doc/book/tools/update-rustc.sh new file mode 100755 index 000000000..45a0ce4f6 --- /dev/null +++ b/src/doc/book/tools/update-rustc.sh @@ -0,0 +1,93 @@ +#!/bin/bash + +set -eu + +# Build the book before making any changes for comparison of the output. +echo 'Building book into tmp/book-before before updating...' +mdbook build -d tmp/book-before + +# Rustfmt all listings +echo 'Formatting all listings...' +find -s listings -name Cargo.toml -print0 | while IFS= read -r -d '' f; do + dir_to_fmt=$(dirname "$f") + + # There are a handful of listings we don't want to rustfmt and skipping + # doesn't work; those will have a file in their directory that explains why. + if [ ! -f "${dir_to_fmt}/rustfmt-ignore" ]; then + cd "$dir_to_fmt" + cargo fmt --all && true + cd - > /dev/null + fi +done + +# Get listings without anchor comments in tmp by compiling a release listings +# artifact +echo 'Generate listings without anchor comments...' +cargo run --bin release_listings + +root_dir=$(pwd) + +echo 'Regenerating output...' +# For any listings where we show the output, +find -s listings -name output.txt -print0 | while IFS= read -r -d '' f; do + build_directory=$(dirname "$f") + full_build_directory="${root_dir}/${build_directory}" + full_output_path="${full_build_directory}/output.txt" + tmp_build_directory="tmp/${build_directory}" + + cd "$tmp_build_directory" + + # Save the previous compile time; we're going to keep it to minimize diff + # churn + compile_time=$(sed -E -ne 's/.*Finished (dev|test) \[unoptimized \+ debuginfo] target\(s\) in ([0-9.]*).*/\2/p' "${full_output_path}") + + # Save the hash from the first test binary; we're going to keep it to + # minimize diff churn + test_binary_hash=$(sed -E -ne 's@.*Running [^[:space:]]+( [^[:space:]\(\)]+)? \(target/debug/deps/[^-]*-([^\s]*)\)@\2@p' "${full_output_path}" | head -n 1) + + # Act like this is the first time this listing has been built + cargo clean + + # Run the command in the existing output file + cargo_command=$(sed -ne 's/$ \(.*\)/\1/p' "${full_output_path}") + + # Clear the output file of everything except the command + echo "$ ${cargo_command}" > "${full_output_path}" + + # Regenerate the output and append to the output file. Turn some warnings + # off to reduce output noise, and use one test thread to get consistent + # ordering of tests in the output when the command is `cargo test`. + RUSTFLAGS="-A unused_variables -A dead_code" RUST_TEST_THREADS=1 $cargo_command >> "${full_output_path}" 2>&1 || true + + # Set the project file path to the projects directory plus the crate name + # instead of a path to the computer of whoever is running this + sed -i '' -E -e 's@(Compiling|Checking) ([^\)]*) v0.1.0 (.*)@\1 \2 v0.1.0 (file:///projects/\2)@' "${full_output_path}" + + # Restore the previous compile time, if there is one + if [ -n "${compile_time}" ]; then + sed -i '' -E -e "s/Finished (dev|test) \[unoptimized \+ debuginfo] target\(s\) in [0-9.]*/Finished \1 [unoptimized + debuginfo] target(s) in ${compile_time}/" "${full_output_path}" + fi + + # Restore the previous test binary hash, if there is one + if [ -n "${test_binary_hash}" ]; then + replacement='s@Running ([^[:space:]]+)( [^[:space:]\(\)]+)? \(target/debug/deps/([^-]*)-([^\s]*)\)@Running \1\2 (target/debug/deps/\3-' + replacement+="${test_binary_hash}" + replacement+=')@g' + sed -i '' -E -e "${replacement}" "${full_output_path}" + fi + + # Clean again + cargo clean + + cd - > /dev/null +done + +# Build the book after making all the changes +echo 'Building book into tmp/book-after after updating...' +mdbook build -d tmp/book-after + +# Run the megadiff script that removes all files that are the same, leaving only files to audit +echo 'Removing tmp files that had no changes from the update...' +./tools/megadiff.sh + +echo 'Done.' -- cgit v1.2.3