summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--README.md7
-rwxr-xr-xbin/fmt40
-rw-r--r--kokoro/Dockerfile2
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