diff options
author | David Tolnay <dtolnay@chromium.org> | 2019-02-19 17:08:53 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-02-21 06:29:42 -0800 |
commit | 18ce5713e6cb99c40aafec52b67c28ba12a44f31 (patch) | |
tree | 12e5e21344a2b942edf9de4cc7a234a6efc84b0a | |
parent | fc7427eb2b7c262722bbc0c2e9d062c48203d7a2 (diff) | |
download | crosvm-18ce5713e6cb99c40aafec52b67c28ba12a44f31.tar crosvm-18ce5713e6cb99c40aafec52b67c28ba12a44f31.tar.gz crosvm-18ce5713e6cb99c40aafec52b67c28ba12a44f31.tar.bz2 crosvm-18ce5713e6cb99c40aafec52b67c28ba12a44f31.tar.lz crosvm-18ce5713e6cb99c40aafec52b67c28ba12a44f31.tar.xz crosvm-18ce5713e6cb99c40aafec52b67c28ba12a44f31.tar.zst crosvm-18ce5713e6cb99c40aafec52b67c28ba12a44f31.zip |
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 <dtolnay@chromium.org> Tested-by: David Tolnay <dtolnay@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Zach Reizner <zachr@chromium.org>
-rw-r--r-- | README.md | 7 | ||||
-rwxr-xr-x | bin/fmt | 40 | ||||
-rw-r--r-- | kokoro/Dockerfile | 2 |
3 files changed, 46 insertions, 3 deletions
diff --git a/README.md b/README.md index bde48ea..8c590d9 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 0000000..37e6070 --- /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 68a910f..cc0d952 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 |