60 lines
1.2 KiB
Plaintext
60 lines
1.2 KiB
Plaintext
|
#!/bin/env bash
|
||
|
|
||
|
# simple script to take a list of path in system of
|
||
|
# git repos then doing specified action for it
|
||
|
|
||
|
starting_dir=$(pwd)
|
||
|
|
||
|
Push () {
|
||
|
cd "$Path"
|
||
|
[ -z "$(git status -s)" ] && printf '\n%s\n' "Repo $Path already up to date." && return
|
||
|
|
||
|
printf '\n%s\n' "In repo $Path"
|
||
|
|
||
|
commited="n"
|
||
|
done="n"
|
||
|
while [ ! -z "$(git status -s)" ] && [ "$done" != "y" ]; do
|
||
|
|
||
|
toCommit=$(git status -s | awk '{ print $2 }' | fzf -m)
|
||
|
|
||
|
if [ ! -z "$toCommit" ]; then
|
||
|
git add "$toCommit"
|
||
|
|
||
|
read -p 'Commit message: ' message < /dev/tty
|
||
|
git commit -m "$message"
|
||
|
commited="y"
|
||
|
fi
|
||
|
|
||
|
[ ! -z "$(git status -s )" ] && read -p "Have you commited everything you wanted to [y/n]: " done < /dev/tty
|
||
|
done
|
||
|
|
||
|
[ "$commited" = "y" ] && git push
|
||
|
|
||
|
printf '\n%s\n' "Repo $Path pushed completely."
|
||
|
}
|
||
|
|
||
|
Pull () {
|
||
|
cd $Path
|
||
|
|
||
|
printf '\n%s\n' "In repo $Path"
|
||
|
|
||
|
git pull
|
||
|
|
||
|
printf '\n%s\n' "Repo $Path updated."
|
||
|
}
|
||
|
|
||
|
while read -a Line; do
|
||
|
Action=${Line[0]}
|
||
|
Path=${Line[1]}
|
||
|
|
||
|
if [ "$Action" = "push" ]; then
|
||
|
Push
|
||
|
fi
|
||
|
|
||
|
if [ "$Action" = "pull" ]; then
|
||
|
Pull
|
||
|
fi
|
||
|
done <<< "$(< $HOME/.config/gupdate/repos)"
|
||
|
|
||
|
cd "$starting_dir"
|