#!/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"