summary refs log tree commit diff
path: root/bin/fmt
blob: 39eac2c2f3bb6f5273875c971b80dbace77b96e1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/bin/bash

# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# 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