diff --git a/.gitignore b/.gitignore index 02bae73d..7602defe 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ .tox/ .coverage coverage.xml +.tidyall.d/ diff --git a/.tidyallrc b/.tidyallrc new file mode 100644 index 00000000..a516a41c --- /dev/null +++ b/.tidyallrc @@ -0,0 +1,3 @@ +[PerlTidy] +select = **/*.pm +argv = --profile=$ROOT/.perltidyrc diff --git a/tidy b/tidy new file mode 100755 index 00000000..683aaf20 --- /dev/null +++ b/tidy @@ -0,0 +1,61 @@ +#!/bin/bash + +# +# perltidy rules can be found in ../.perltidyrc +# +usage() { + cat << EOF +Usage: + tidy [-c|--check] [-f|--force] [-o|--only-changed] [-l|--list] [path/to/file] + +Options: + -h, -?, --help display this help + -c, --check Only check for style check differences + -f, --force Force check even if tidy version mismatches + -o --only-changed Only tidy files with uncommitted changes in git. This can + speed up execution a lot. +-l --list List files tidy would touch + path/to/file When passing a file as argument, tidy will run perltidy + wether it is added to the git tree or not + +perltidy rules can be found in .perltidyrc +EOF + exit +} + +set -eo pipefail +dir="$(dirname "$0")" + +args="" +selection='--all' +[[ -e "$dir/perlfiles" ]] && selection=$("$dir"/perlfiles) +opts=$(getopt -o hcfol --long help,check,force,only-changed,list -n "$0" -- "$@") || usage +eval set -- "$opts" +while true; do + case "$1" in + -h | --help ) usage; shift ;; + -c | --check ) args+=' --check-only'; shift ;; + -f | --force ) force=true; shift ;; + -o | --only-changed ) selection='--git'; shift ;; + -l | --list ) args+='--list'; shift ;; + -- ) shift; break ;; + * ) break ;; + esac +done + +shift $((OPTIND - 1)) +filename=${*:-"$selection"} + +if ! command -v perltidy > /dev/null 2>&1; then + echo "No perltidy found, install it first!" + exit 1 +fi + +# go to caller directory +cd "$dir" + +# just to make sure we are at the right location +test -e tidy || exit 1 + +# shellcheck disable=SC2086 +tidyall $args $filename