From 18ce5713e6cb99c40aafec52b67c28ba12a44f31 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Tue, 19 Feb 2019 17:08:53 -0800 Subject: [PATCH] bin: Add script to run rustfmt against all workspaces Add a script to run `cargo fmt` on all Rust code contained in crosvm. This is different from `cargo fmt --all` which formats multiple crates but a single workspace only. Crosvm consists of multiple workspaces. Usage: $ bin/fmt To print a diff and exit 1 if code is not formatted, but without changing any files, use: $ bin/fmt --check TEST=those commands TEST=local kokoro Change-Id: I4194509ad3a1bbc829c4b1069d54d940b927113b Reviewed-on: https://chromium-review.googlesource.com/1477498 Commit-Ready: David Tolnay Tested-by: David Tolnay Tested-by: kokoro Reviewed-by: Zach Reizner --- README.md | 7 +++++-- bin/fmt | 40 ++++++++++++++++++++++++++++++++++++++++ kokoro/Dockerfile | 2 +- 3 files changed, 46 insertions(+), 3 deletions(-) create mode 100755 bin/fmt diff --git a/README.md b/README.md index bde48ea9fa..8c590d9849 100644 --- a/README.md +++ b/README.md @@ -138,8 +138,11 @@ for each architecture. See `build_test -h` for more information. #### `rustfmt` -All code should be formatted with `rustfmt`. Run `cargo fmt --all` to autoformat -your code before checking in a change. +All code should be formatted with `rustfmt`. We have a script that applies +rustfmt to all Rust code in the crosvm repo: please run `bin/fmt` before +checking in a change. This is different from `cargo fmt --all` which formats +multiple crates but a single workspace only; crosvm consists of multiple +workspaces. #### Dependencies diff --git a/bin/fmt b/bin/fmt new file mode 100755 index 0000000000..37e60706dc --- /dev/null +++ b/bin/fmt @@ -0,0 +1,40 @@ +#!/bin/bash + +# Run `cargo fmt` on all Rust code contained in crosvm. This is different from +# `cargo fmt --all` which formats multiple crates but a single workspace only. +# Crosvm consists of multiple workspaces. +# +# Usage: +# +# $ bin/fmt +# +# To print a diff and exit 1 if code is not formatted, but without changing any +# files, use: +# +# $ bin/fmt --check +# + +set -euo pipefail + +# Change into directory of script, which is crosvm/bin. +cd "$(dirname "${BASH_SOURCE[0]}")" + +# Jump up to root directory of crosvm repo. +cd .. + +# Keep track of whether any cargo fmt invocation exited with error. +EXIT=0 + +FIND_CARGO_TOMLS="$(find "$PWD" -name Cargo.toml)" + +while read path_to_cargo_toml; do + cd "$(dirname "$path_to_cargo_toml")" + + if grep --quiet '\[workspace\]' Cargo.toml; then + if ! cargo fmt --all -- "$@"; then + EXIT=1 + fi + fi +done <<< "$FIND_CARGO_TOMLS" + +exit $EXIT diff --git a/kokoro/Dockerfile b/kokoro/Dockerfile index 68a910f833..cc0d95213f 100644 --- a/kokoro/Dockerfile +++ b/kokoro/Dockerfile @@ -131,4 +131,4 @@ CMD rustup default "$(cat rust-toolchain)" && \ cargo test --no-fail-fast --all-features --all --exclude aarch64 $TEST_FLAGS -- \ --test-threads=1 $TEST_RUNNER_FLAGS && \ echo "Running cargo fmt" && \ - cargo fmt --all -- --check + bin/fmt --check