You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

68 lines
1.3 KiB

#!/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."