From 4194c3116b9e9f825b256f20706909ae7c1a2108 Mon Sep 17 00:00:00 2001 From: Nickiel12 <35903114+Nickiel12@users.noreply.github.com> Date: Tue, 2 Aug 2022 08:27:52 -0700 Subject: [PATCH] A basic git cli for staging/unstaging files (#76) --- examples/basic-git-cli.sh | 45 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100755 examples/basic-git-cli.sh 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