Scott Lahteine
6 years ago
2 changed files with 73 additions and 4 deletions
@ -0,0 +1,68 @@ |
|||||
|
#!/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." |
Loading…
Reference in new issue