Password-store (pass) extremely slow on OSX

🖊️ 🔖 code 💬 0

password-store (installed via homebrew) on OSX is very slow.

Austins-MacBook% time pass testpass
thisisatestpass
pass testpass  0.55s user 0.25s system 83% cpu 0.969 total

Over half a second to print out a password. Pass is just a bash script. This would not do.

After doing some sleuthing, it turns out it is this line in the platform specific code for OSX that is causing the problem:

{{< highlight shell >}} GETOPT=”$(brew –prefix gnu-getopt 2>/dev/null || { which port &>/dev/null && echo /opt/local; } || echo /usr/local)/bin/getopt” {{< / highlight >}}

Every time pass is run on OSX, it first has to run homebrew to find out where gnu-getopt is installed.

It seems silly to default to such a heavy handed approach. It would make sense to first test a well known location (perhaps, the default location where homebrew installs gnu-getopt?) first, and then resort to the other methods after:

{{< highlight shell >}} GETOPT=”$({ [ -x /usr/local/opt/gnu-getopt ] && echo /usr/local/opt/gnu-getopt; } || brew –prefix gnu-getopt 2>/dev/null || { which port &>/dev/null && echo /opt/local; } || echo /usr/local)/bin/getopt” {{< / highlight >}}

Using that method, things are improved considerably:

Austins-MacBook% time pass testpass
thisisatestpass
pass testpass  0.02s user 0.01s system 19% cpu 0.177 total

There have been patches submitted upstream in the past for this issue, but none have been merged. So I forked the upstream repo and applied the fix. You can install this version of pass using homebrew:

Uninstall pass if you already have it installed via brew:

brew uninstall pass

Then “tap” the repo:

brew tap Fingel/pass-osx

Finally, install the formula:

brew install fingel/pass-osx/pass

Enjoy a properly fast pass. This should be helpful for anyone using pass on OSX, who doesn’t mind installing their password manager via some random guy’s fork on Github… 🤔