I've said it before; sometimes the best automations are the tiny ones that save a few knob-twirls, keystrokes or (as in this case) a drag-copy-paste, each and every day.
It's just a tiny thing, but I like it when a workflow gets streamlined. If you work on a modern Github-hosted codebase with a Pull-Request-based flow, you'll spend more than a few seconds a week looking at this kind of output, which happens the first time you try to git push to a remote that doesn't have your branch:
mymac:foo john$ git push
fatal: The current branch red-text has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin red-text
mymac:foo john$ git push --set-upstream origin red-text
Counting objects: 24, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (16/16), done.
Writing objects: 100% (24/24), 2.79 KiB | 953.00 KiB/s, done.
Total 24 (delta 9), reused 0 (delta 0)
remote: Resolving deltas: 100% (9/9), completed with 9 local objects.
remote:
remote: Create a pull request for 'red-text' on GitHub by visiting:
remote: https://github.com/my-org/foo/pull/new/red-text
remote:
To https://github.com/my-org/foo.git
* [new branch] red-text -> red-text
Branch 'red-text' set up to track remote branch 'red-text' from 'origin'.
The desired workflow is clear and simple:
- Push and set the upstream as suggested
- Grab the suggested PR URL
- Use the Mac open command to launch a new browser window for that URL
#!/bin/bash
# Try and push, catch the suggested action if there is one:
SUGG=`git push --porcelain 2>&1 | grep "git push --set-upstream origin"`
if [[ ! -z ${SUGG} ]]; then
echo "Doing suggested: ${SUGG}"
URL=`${SUGG} --porcelain 2>&1 | grep remote | grep new | grep -o "https.*"`
if [[ ! -z ${URL} ]]; then
echo "Opening URL ${URL}"
open $URL
else
echo "No PR URL found, doing nothing"
fi
fi
I run it using this alias:
alias gpgh='~/bin/push-to-github.sh'
So a typical execution looks like this:
mymac:foo john$ gpgh Doing suggested: git push --set-upstream origin mybranch Opening URL https://github.com/my-org/someproject/pull/new/mybranch mymac:foo john$
No comments:
Post a Comment
Comments welcome - spam is not. Spam will be detected, deleted and the source IP blocked.