diff --git a/make-ring.py b/make-ring.py index 3d6629f821153ec67d332eeaae8648af4b089c6f..4c09b0da432cb034452b205cf2f98f3497691aee 100755 --- a/make-ring.py +++ b/make-ring.py @@ -282,6 +282,13 @@ def run_init(): for name in module_names: copy_file("./scripts/commit-msg", ".git/modules/"+name+"/hooks") + module_names_to_format = ['daemon', 'lrc', 'client-qt'] + for name in module_names_to_format: + execute_script( + ['./scripts/format.sh --install %(path)s'], + {"path": ".git/modules/" + name + "/hooks"} + ) + def copy_file(src, dest): print("Copying:" + src + " to " + dest) diff --git a/scripts/format.sh b/scripts/format.sh new file mode 100755 index 0000000000000000000000000000000000000000..ebd3774a11a19ed13c0c5fd37cb4fd196f226f9b --- /dev/null +++ b/scripts/format.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash + +set -e + +command_exists () +{ + type "$1" &> /dev/null ; +} + +CFVERSION="9" +CLANGFORMAT="" +if command_exists clang-format-${CFVERSION}; then + CLANGFORMAT=clang-format-${CFVERSION} +else + if command_exists clang-format; then + CLANGFORMAT=clang-format + fi +fi + +if ! command -v $CLANGFORMAT &> /dev/null; then + echo "Required version of clang-format not found" + exit 1 +fi + +format_file() +{ + if [ -f "${1}" ]; then + $CLANGFORMAT -i -style=file "${1}" || true + fi +} + +format_files() +{ + for file in $1; do + echo -ne "Formatting: ${file}\\033[0K\\r" + format_file "${file}" + done +} + +exit_if_no_files() +{ + echo No files to format + exit 0 +} + +install_hook() +{ + hooks_path=$1 + if [ ! -d "$hooks_path" ]; then + echo "$hooks_path" path does not exist + exit 1 + fi + echo Installing pre-commit hook in "$hooks_path" + echo "/bin/bash $(realpath $0)" > "$hooks_path"/pre-commit + chmod +x "$hooks_path"/pre-commit +} + +display_help() +{ + echo "Usage: $0 [OPTION...] -- Clang format source files with a .clang-format file" >&2 + echo + echo " --all format all files instead of only committed ones" + echo " --install <path> install a pre-commit hook to run this script" + echo +} + +if [ "$1" == "--help" ]; then + display_help + exit 0 +fi + +case "${1}" in + --all ) + files=$(find src -regex '.*\.\(cpp\|hpp\|cc\|cxx\|h\)') || true + echo Formatting all source files... + format_files "$files" + ;; + --install ) + install_hook "${2}" + ;; + * ) + files=$(git diff-index --cached --name-only HEAD | grep -iE '\.(cpp|cxx|cc|h|hpp)') || exit_if_no_files + echo Formatting committed source files... + format_files "$files" + ;; +esac