1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #!/usr/bin/env bash
- #
- # ghpc (GitHub Push Current)
- #
- # - Push current branch to its remote. Try the following until it works:
- # - Plain 'git push'
- # - 'git push -f'
- # - Try the 'git push' command from the 'git push' error message
- # - Try adding '-f' to that command
- #
- yay() { echo "SUCCESS" ; }
- boo() { echo "FAIL" ; }
- FORCE=$([[ "$1" == "--force" || "$1" == "-f" ]] && echo 1)
- if [[ ! $FORCE ]]; then
- echo -n "trying 'git push' ...... "
- git push >/dev/null 2>&1 && { yay ; exit ; }
- boo
- fi
- echo -n "trying 'git push -f' ... "
- # Get the error output from the failed push
- # and get the recommended 'git push' line
- git push -f 2>&1 | {
- CMD=""
- ltrim() {
- [[ "$1" =~ [^[:space:]].* ]]
- printf "%s" "$BASH_REMATCH"
- }
- while IFS= read -r line
- do
- #echo "$line"
- if [[ -z "$CMD" && $line =~ "git push" ]]; then
- CMD=$(ltrim "$line")
- fi
- done
- # if a command was found try it
- if [[ -n "$CMD" ]]; then
- boo
- if [[ ! $FORCE ]]; then
- echo -n "trying '$CMD' ...... "
- $CMD >/dev/null 2>&1 && { yay ; exit ; }
- boo
- fi
- fCMD=${CMD/ push / push -f }
- echo -n "trying '$fCMD' ... "
- $fCMD >/dev/null 2>&1 && { yay ; exit ; }
- boo
- exit 1
- else
- yay
- fi
- }
- [[ ${PIPESTATUS[1]} == 1 ]] && echo "Sorry! Failed to push current branch."
|