diff --git a/examples/basic-git-cli.sh b/examples/basic-git-cli.sh new file mode 100755 index 0000000..0f5561d --- /dev/null +++ b/examples/basic-git-cli.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +# A basic cli for handling the staging with git +# +# This is a simple cli that utilizes the output from several git commands, and +# pipes them into `gum filter` and `gum choose` to provide a simple cli wrapper +# for `git add` and `git reset`. +# +# For a more feature complete version of this script check out +# [Nickiel12's Git-Gum](https://github.com/Nickiel12/Git-Gum). + +git_add_filter(){ + input=$1 + if [[ $input == "M "* ]]; then + if [ ! -z "$(git ls-files . --exclude-standard --others -m | grep "${input:2}")" ]; then + echo ${input:2} + fi + else + if [ ! -z "$(git ls-files . --exclude-standard --others -m | grep "${input:3}")" ]; then + echo ${input:3} + fi + fi +} + +choice=$(echo -e "add\nreset" | gum filter) + +case $choice in + add ) + export -f git_add_filter + selection=`git status --short | xargs -I{} bash -c 'git_add_filter "{}"' | sed "$ a None" | gum choose --no-limit` + if [ "$selection" = "None" ]; then + echo "No files selected" + else + git add -- "$selection" + fi + ;; + reset ) + selection=`git diff --staged --name-only | sed "$ a None" | gum choose --no-limit` + if [ "$selection" = "None" ]; then + echo "None selected - skipping" + else + echo "$selection" | git reset + fi + ;; +esac