Speedup pass on macOS and brew

Allan Odgaard lists+pass at simplit.com
Tue Oct 23 05:54:13 CEST 2018


On 22 Oct 2018, at 23:50, pass-maillinglist at artursterz.de wrote:

> currently (and as I can tell also in the past, see 
> [1],[2],[3],[4],[5]), brew —prefix <FORMULA> is really slow (see the 
> example output below), which makes it somewhat annoying using pass on 
> macOS. I hunted this down and found that the problem is the following: 
> brew runs git rev-parse --short=4 --verify -q HEAD every time to find 
> the currently installed version of the formula (which seems somewhat 
> unreasonable). Depending on your git and network connectivity, this 
> may take longer. Using brew —prefix without a formula is reasonably 
> fast. As far as I can tell, there is currently no way to change the 
> prefix path in brew, thus using $(brew —prefix)/opt/gnu-getopt 
> should be a save way for determining the path to gnu-getopt.

Great find! I’ve been somewhat annoyed myself by the ~1s delay when 
using `pass`, but always assumed it was just GPG being slow.

> I patched this and attached the patch to this mail. Since my 
> implementation is somewhat longer, I think it should not be 
> implemented in one line anymore, but split it up as I did (see the 
> patch). If you come up with something better let me know (or, of 
> course, patch it yourself). Additionally, since I am not using 
> Macports, I can not test if this also works with ports. Before 
> considering pushing my patch upstream, someone needs to test this! For 
> brew, it works fine.

The `elif` and `else` branches look wrong, as we are not in a command 
context, so shouldn’t prefix with `echo`, plus including the `which` 
line is redundant when the `elif` already test for the presence of 
`port`.

I also find it cleaner to test the exit status of `command` instead of 
testing against non-zero output.

Here’s my revised proposal for the relevant code to setup `GETOPT`:

	if command -v brew >/dev/null; then
		GETOPT_PREFIX="$(brew --prefix)/opt/gnu-getopt"
	elif command -v port >/dev/null; then
		GETOPT_PREFIX="/opt/local"
	fi
	GETOPT="${GETOPT_PREFIX:-/usr/local}/bin/getopt"

If we find neither `brew` nor `port` then we use `GETOPT_PREFIX` before 
falling back to `/usr/local`.

Don’t think we actually need this, but it makes the code look nicer :)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.zx2c4.com/pipermail/password-store/attachments/20181023/77635299/attachment.html>


More information about the Password-Store mailing list