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.