added .gitignore manipulation utility
This commit is contained in:
115
autodeploy/gitignore.sh
Executable file
115
autodeploy/gitignore.sh
Executable file
@ -0,0 +1,115 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
|
||||
GITIGNORE=".gitignore"
|
||||
|
||||
|
||||
function print_help() {
|
||||
cat <<EOF
|
||||
Usage: $(basename "$0") <command> [pattern]
|
||||
|
||||
Commands:
|
||||
add <pattern> Add a pattern to $GITIGNORE, if not present
|
||||
remove <pattern> Remove a pattern from $GITIGNORE, if present
|
||||
has <pattern> Check if a pattern is present in $GITIGNORE
|
||||
show Print $GITIGNORE
|
||||
list Print sorted $GITIGNORE, skipping blanks and comments
|
||||
-h, --help Show this help message
|
||||
EOF
|
||||
}
|
||||
|
||||
|
||||
function add_pattern() {
|
||||
local pat="$1"
|
||||
if pattern_exists "$pat"; then
|
||||
echo "Already present: $pat"
|
||||
return 1
|
||||
fi
|
||||
echo "$pat" >> "$GITIGNORE"
|
||||
echo "Added: $pat"
|
||||
}
|
||||
|
||||
function remove_pattern() {
|
||||
local pat="$1"
|
||||
if ! pattern_exists "$pat"; then
|
||||
echo "Not present: $pat"
|
||||
return 1
|
||||
fi
|
||||
grep -Fxv "$pat" "$GITIGNORE" > "$GITIGNORE.tmp"
|
||||
mv "$GITIGNORE.tmp" "$GITIGNORE"
|
||||
echo "Removed: $pat"
|
||||
}
|
||||
|
||||
function has_pattern() {
|
||||
local pat="$1"
|
||||
if pattern_exists "$pat"; then
|
||||
echo "yes"
|
||||
return 0
|
||||
else
|
||||
echo "no"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
function show_patterns() {
|
||||
cat "$GITIGNORE"
|
||||
}
|
||||
|
||||
function list_patterns() {
|
||||
grep -v -e '^\s*#' -e '^\s*$' "$GITIGNORE" | sort -u
|
||||
}
|
||||
|
||||
function pattern_exists() {
|
||||
local pat="$1"
|
||||
grep -Fxq "$pat" "$GITIGNORE"
|
||||
}
|
||||
|
||||
|
||||
# Check if -h or --help is anywhere in the arguments
|
||||
if [[ " $* " == *" -h "* ]] || [[ " $* " == *" --help "* ]]; then
|
||||
print_help
|
||||
exit
|
||||
fi
|
||||
|
||||
|
||||
cmd="${1:-}"
|
||||
pat="${2:-}"
|
||||
|
||||
|
||||
# validate number of arguments
|
||||
case "$cmd" in
|
||||
add|remove|has)
|
||||
if [[ $# -ne 2 ]]; then
|
||||
echo "Usage: gitignore $cmd <pattern>"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
show|list)
|
||||
if [[ $# -ne 1 ]]; then
|
||||
echo "Usage: gitignore $cmd"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
print_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
# ensure .gitignore exists
|
||||
touch "$GITIGNORE"
|
||||
|
||||
# dispatch command
|
||||
case "$cmd" in
|
||||
add) add_pattern "$pat" ;;
|
||||
remove) remove_pattern "$pat" ;;
|
||||
has) has_pattern "$pat" ;;
|
||||
show) show_patterns ;;
|
||||
list) list_patterns ;;
|
||||
esac
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user