A basic git cli for staging/unstaging files (#76)

This commit is contained in:
Nickiel12 2022-08-02 08:27:52 -07:00 committed by GitHub
parent 7eb1e7e322
commit 4194c3116b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

45
examples/basic-git-cli.sh Executable file
View file

@ -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