refactor: git stage cli (simplified)

This commit is contained in:
Maas Lalani 2022-08-02 13:56:40 -04:00
parent f695901207
commit a9627edea4
No known key found for this signature in database
GPG key ID: 5A6ED5CBF1A0A000
2 changed files with 12 additions and 45 deletions

View file

@ -1,45 +0,0 @@
#!/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

12
examples/git-stage.sh Executable file
View file

@ -0,0 +1,12 @@
#!/bin/bash
ADD="Add"
RESET="Reset"
ACTION=$(gum choose "$ADD" "$RESET")
if [ "$ACTION" == "$ADD" ]; then
git status --short | cut -c 4- | gum choose --no-limit | xargs git add
else
git status --short | cut -c 4- | gum choose --no-limit | xargs git restore
fi