Hacker News new | ask | show | jobs
by stepanhruda 3782 days ago
You don't even need to maintain a separate custom tap repo. Keep the formula in the same repo in a Formula directory, and include the repo URL when tapping (gets rid of the homebrew- restriction)

The brew command for users would be:

brew tap octavore/delta https://github.com/octavore/delta.git

brew install delta

---

Example above of course doesn't currently work because the formula is not there

(I successfully use it in my repo: https://github.com/stepanhruda/ios-simulator-app-installer)

4 comments

Keep in mind that Homebrew clones tap repositories when you do 'brew tap'-- this has two major implications if you're keeping your formula in your main source repository:

(1) You're pushing down bits onto users' machines that may not be necessary (like developer documentation, or development versions of your source code if you're developing on master), and

(2) 'brew update' will need to download (via 'git pull') all changes to your repository any time you update, even when the Homebrew formula doesn't change.

Keeping formulas in a separate repository allows Homebrew to work like it's supposed to (and like it does for built-in formulas): an update to your tap repository means there's updates for the formulas that it contains, and you're not downloading any source code except what's actually going to be used, at the time it's going to be used (during 'brew install').

I find the method described in the post to be cleaner UX. Sure, it requires a little extra work on your part to setup, but running a single `brew install octavore/tools/delta` is much nicer and easier to remember than

brew tap octavore/delta https://github.com/octavore/delta.git brew install delta

You're definitely right, just wanted to provide an alternative I found useful. 95% of the time I copy & paste brew commands for custom taps from the repo, I wouldn't remember the 3-part path anyway.

This is probably asking for a PR to hombrew, the ideal command would be

brew install delta https://github.com/octavore/delta.git

A downside of using a tap is that your users subsequent `brew update`s will also have to pull from your repo each time. My current `brew update` has to check 12 separate repos, and takes almost a minute to complete. As a heavy brew user, I'd prefer a packaging convention with less performance impact.
We recently shipped a new updater that parallelizes network requests. The speedup is really appreciable; I have 27 taps and `brew update` now runs under 10 seconds.
Awesome! That's great news
That's awesome, I didn't know about that. I'll update the post with your tip. Thank you!