From 91545c51b2a2da2d9ae37599a88f355f976a9be6 Mon Sep 17 00:00:00 2001 From: Sven Lechner Date: Tue, 11 Feb 2020 19:42:42 +0100 Subject: [PATCH] chore(git): add git pre-commit and setup script The pre-commit hook ensures multiple things before commiting code: 1) All Rust code is properly formatted 2) All linting errors are fixed 3) All tests are passing 4) The project can be compiled inside of the local development env --- hooks/pre-commit | 49 ++++++++++++++++++++++++++++++++++++++++++ setup-dev-workspace.sh | 6 ++++++ 2 files changed, 55 insertions(+) create mode 100755 hooks/pre-commit create mode 100755 setup-dev-workspace.sh diff --git a/hooks/pre-commit b/hooks/pre-commit new file mode 100755 index 00000000..c07342f9 --- /dev/null +++ b/hooks/pre-commit @@ -0,0 +1,49 @@ +#!/bin/sh +# Author: Sven Lechner (SirWindfield) +# License: GPLv3 + +require_clean_work_tree() { + # Update index + git update-index -q --ignore-submodules --refresh + err=0 + + # Disallow unstaged changes in the working tree + if ! git diff-files --quiet --ignore-submodules --; then + echo >&2 "Cannot commit: you have unstaged changes." + git diff-files --name-status -r --ignore-submodules -- >&2 + err=1 + fi + + if [ $err = 1 ]; then + echo >&2 "Please stage or stash them." + exit 1 + fi +} + +echo "→ Checking for local changes..." +require_clean_work_tree + +echo "→ Formatting Rust code..." +cargo fmt +if [ $? -ne 0 ]; then + exit 1 +fi + +for path in $(git diff --name-only --cached); do + git update-index --add $path +done + +echo "→ Building pre-commit build artifacts..." +cargo check --quiet --no-default-features --features "rodio_backend,dbus_keyring" +if [ $? -ne 0 ]; then + exit 1 +fi +cargo build --quiet --no-default-features --features "rodio_backend,dbus_keyring" + +# Linting is only done with the rodio backend and the keyring feature as those should be +# compilable for every supported platform without external library needs. +echo "→ Linting Rust code..." +cargo clippy --no-default-features --features "rodio_backend,dbus_keyring" -- -D warnings + +echo "→ Testing Rust code..." +cargo test --no-default-features --features "rodio_backend,dbus_keyring" diff --git a/setup-dev-workspace.sh b/setup-dev-workspace.sh new file mode 100755 index 00000000..2c8eb6ab --- /dev/null +++ b/setup-dev-workspace.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# Author: Sven Lechner (SirWindfield) +# License: GPLv3 + +# Copies all hooks into the .git/hooks directory +cp hooks/* .git/hooks