diff --git a/.husky/pre-commit b/.husky/pre-commit index a3cb5805d..b5217365a 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,22 @@ npx lint-staged -cd src-tauri && cargo fmt && git add -u . -cd "$(git rev-parse --show-toplevel)/crates/dbx-core" && cargo fmt --all && git add -u . -cd "$(git rev-parse --show-toplevel)/crates/dbx-web" && cargo fmt && git add -u . + +# Only format and re-add Rust files that are already staged +TOPLEVEL=$(git rev-parse --show-toplevel) + +format_staged_rust() { + local dir="$1" + local staged="" + staged=$(git diff --staged --name-only --diff-filter=ACM -- ":(top,literal)$dir/*.rs" ":(top,literal)$dir/**/*.rs" 2>/dev/null) + if [ -n "$staged" ]; then + echo "$staged" | while IFS= read -r f; do + rustfmt "$TOPLEVEL/$f" 2>/dev/null || true + done + echo "$staged" | while IFS= read -r f; do + git add "$TOPLEVEL/$f" 2>/dev/null || true + done + fi +} + +format_staged_rust "src-tauri" +format_staged_rust "crates/dbx-core" +format_staged_rust "crates/dbx-web"