Ignore theme specific lines in git using a filter
This commit is contained in:
87
scripts/.local/share/scripts/git-ignore-line.sh
Executable file
87
scripts/.local/share/scripts/git-ignore-line.sh
Executable file
@@ -0,0 +1,87 @@
|
||||
#!/bin/sh
|
||||
# Git filter to ignore lines in your files.
|
||||
#
|
||||
# Copyright (c) 2017-2019 Aryel Mota Góis <aryel.gois@gmail.com>
|
||||
#
|
||||
# MIT License
|
||||
#
|
||||
#
|
||||
# SETUP:
|
||||
#
|
||||
# cp git-ignore-line.sh ~/bin/git-ignore-line
|
||||
#
|
||||
#
|
||||
# USAGE:
|
||||
#
|
||||
# Mark single lines you want to ignore with 'GITIGNORE'. It ignores
|
||||
# the whole line. It is recommended to be inside a comment in your code.
|
||||
#
|
||||
# Mark multiple lines surrounding them with 'GITIGNORE START' and
|
||||
# 'GITIGNORE END'. It can not be nested.
|
||||
#
|
||||
# NOTE: Ignored lines might be lost on checkout.
|
||||
#
|
||||
#
|
||||
# Add files to ignore:
|
||||
#
|
||||
# git ignore-line <pattern>
|
||||
#
|
||||
# Remove patterns with:
|
||||
#
|
||||
# git ignore-line -r <pattern>
|
||||
#
|
||||
# List configured patterns:
|
||||
#
|
||||
# git ignore-line -l
|
||||
#
|
||||
# PATTERN can be a file or a glob pattern: '*.html'. Remember to
|
||||
# escape the `*`.
|
||||
#
|
||||
#
|
||||
# TODO:
|
||||
#
|
||||
# - Stash the lines ignored by this filter before a git checkout.
|
||||
|
||||
|
||||
set -eu
|
||||
|
||||
|
||||
# Check if stdin is not tty and remove ignored lines from it.
|
||||
|
||||
[ -t 0 ] || exec sed \
|
||||
'/GITIGNORE START/,/GITIGNORE END/d; /GITIGNORE/d' \
|
||||
/dev/stdin
|
||||
|
||||
|
||||
# Running from tty.
|
||||
|
||||
program=$(basename "$0")
|
||||
|
||||
# Find git repository.
|
||||
git_dir=$(git rev-parse --git-dir)
|
||||
|
||||
# Path to attributes file.
|
||||
attr_file=$git_dir/info/attributes
|
||||
|
||||
# Check arguments.
|
||||
if [ $# -eq 2 ] && [ "$1" = '-r' ]; then
|
||||
# Remove filter for pattern.
|
||||
sed "s|^$2 filter=$program||" "$attr_file" > "$attr_file.tmp"
|
||||
mv -- "$attr_file.tmp" "$attr_file"
|
||||
elif [ $# -eq 1 ]; then
|
||||
if [ "$1" = '-l' ]; then
|
||||
# List patterns.
|
||||
grep "filter=$program" "$attr_file" || true
|
||||
else
|
||||
# Add filter for pattern.
|
||||
echo "$1 filter=$program" >> "$attr_file"
|
||||
# Configure filter.
|
||||
git config --global "filter.$program.clean" "$program"
|
||||
git config --global "filter.$program.smudge" cat
|
||||
fi
|
||||
else
|
||||
# Show help.
|
||||
>&2 echo "Usage: $program [-r] <pattern>"
|
||||
>&2 echo " or: $program -l"
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user