tj.git-extras/bin/git-ignore-io
2015-09-19 00:37:38 +08:00

140 lines
3.6 KiB
Bash
Executable file

#!/usr/bin/env bash
gitignore_io_url="https://www.gitignore.io/api/"
default_path="$HOME/.gi_list"
update_gi_list() {
curl -L -s "${gitignore_io_url}/list" > ~/.gi_list
}
print_in_alphabetical_order() {
for i in {a..z};
do
echo "$gi_list" | grep "^$i" | tr "\n" " "
echo
done
}
print_in_table_format() {
table_width=5
echo "$gi_list" | xargs -n $table_width | column -t
}
search() {
for type in $gi_list;
do
if [[ "$type" == *$1* ]]
then
echo "$type"
fi
done
}
print_last_modified_time() {
gi_list_date=$(stat -c "%y" "$default_path" 2> /dev/null)
if [ "$?" -ne 0 ]; then
gi_list_date=$(stat -f "%t%Sm" "$default_path" 2> /dev/null)
if [ "$?" -ne 0 ]; then
gi_list_date=$(date -r "$default_path" +%s 2> /dev/null)
[ "$?" -ne 0 ] && gi_list_date=0
fi
fi
echo "Last update time: $gi_list_date"
}
gi() {
curl -L -s $gitignore_io_url/"$1"
}
gi_export() {
gi "$1" > .gitignore
}
gi_append() {
gi "$1" >> .gitignore
}
show_usage() {
echo "Usage:"
echo " git ignore-io <types>... Show gitignore template"
echo " [-a|--append] <types>... Append new .gitignore content to .gitignore under the current directory"
echo " [-e|--export] <types>... Export new .gitignore to the current directory (The old one will be replaced)"
echo " [-l|--list-in-table] Print available types in table format"
echo " [-L|--list-alphabetically] Print available types in alphabetical order "
echo " [-s|--search] <word> Search word in available types"
echo " [-t|--show-update-time] Show the last modified time of ~/.gi_list (where the list of available types is stored)"
echo " [-u|--update-list] Update ~/.gi_list"
}
check_list_exist() {
if ! [ -f "$default_path" ]; then
echo "-----Initial gitignore.io list----"
update_gi_list &
echo "-----Save to $default_path-----"
echo
fi
gi_list=$(tr "," "\n" < "$default_path" 2>/dev/null)
}
check_list_exist
if [[ $# -eq 0 ]]; then
show_usage
else
case $1 in
-a|--append|-e|--export)
opt=$1
shift
if [[ $# -eq 0 ]]; then
echo "There should be at least one type!!!"
echo
show_usage
exit
fi
gi_to_curl=$(echo "$@" | tr " " ",")
case $opt in
-a|--append)
gi_append "$gi_to_curl"
;;
-e|--export)
gi_export "$gi_to_curl"
;;
esac
exit
;;
-t|--show-update-time)
print_last_modified_time
;;
-u|--update-list)
update_gi_list
;;
-s|--search)
opt=$1
shift
if [[ $# -eq 0 ]]; then
echo "There should be one word to be searched!!!"
echo
show_usage
exit
fi
search "$2"
;;
-L|--list-alphabetically)
print_in_alphabetical_order
;;
-l|--list-in-table)
print_in_table_format
;;
-*)
echo No Such option
show_usage
;;
*)
gi_to_curl=$(echo "$@" | tr " " ",")
gi "$gi_to_curl"
;;
esac
fi