Aktualizacja: od dodania tej odpowiedzi wydano wersję 1.15, a dodanie cargo test --all
spowoduje porównanie tego z niestandardowym skryptem.
Ten skrypt powłoki przeprowadza testy rekurencyjnie na repozytorium git do wszystkich katalogów zawierających Cargo.toml
plik (dość łatwe do edycji dla innych VCS).
- Wyjścia przy pierwszym błędzie.
- Używa
nocapture
, więc stdout jest wyświetlany
(w zależności od osobistych preferencji, łatwe do dostosowania).
- Przeprowadza testy z zestawem
RUST_BACKTRACE
, aby uzyskać bardziej przydatne dane wyjściowe.
- Buduje i uruchamia w dwóch osobnych krokach
(obejście dla this bug w 1,14 stabilnej).
- Opcjonalnie zmienna
CARGO_BIN
środowisko zastąpić komendę ciężarowy
(przydatne, jeśli chcemy korzystać z cargo-wrapper takich jak cargo-out-of-source builder).
Scenariusz:
#!/bin/bash
# exit on first error, see: http://stackoverflow.com/a/185900/432509
error() {
local parent_lineno="$1"
local message="$2"
local code="${3:-1}"
if [[ -n "$message" ]] ; then
echo "Error on or near line ${parent_lineno}: ${message}; exiting with status ${code}"
else
echo "Error on or near line ${parent_lineno}; exiting with status ${code}"
fi
exit "${code}"
}
trap 'error ${LINENO}' ERR
# done with trap
# support cargo command override
if [[ -z $CARGO_BIN ]]; then
CARGO_BIN=cargo
fi
# toplevel git repo
ROOT=$(git rev-parse --show-toplevel)
for cargo_dir in $(find "$ROOT" -name Cargo.toml -printf '%h\n'); do
echo "Running tests in: $cargo_dir"
pushd "$cargo_dir"
RUST_BACKTRACE=0 $CARGO_BIN test --no-run
RUST_BACKTRACE=1 $CARGO_BIN test -- --nocapture
popd
done
Dzięki użytkownika @ набиячлэвэли odpowiedź, że jest to wersja rozszerzona.
Cieszę się, że nie jestem jedynym, chcąc pakiet wielu skrzynek w tym samym repozytorium. Jestem zaskoczony, że ładunek nie ma na to lepszego wsparcia. –