"git notes show" is orders of magnitude slower than doing it manually with ls-tree and cat-file
- From
Mike Hommey <mh@glandium.org>
- Date
- Nov 26, 2014, 00:42 UTC
- Message-ID
- <20141126004242.GA13915@glandium.org>
Hi,
I have a note tree with a bit more than 200k notes.
$ time git notes --ref foo show $sha1 > /dev/null real 0m0.147s user 0m0.136s sys 0m0.008s
That's a lot of time, especially when you have a script that does that on a fair amount of sha1s.
Now, the interesting thing is this:
$ time git ls-tree -r refs/notes/foo $sha1 ${sha1:0:2}/${sha1:2:38} ${sha1:0:2}/${sha1:2:2}/${sha1:4:36} > /dev/null real 0m0.006s user 0m0.008s sys 0m0.000s
$ time git cat-file blob $objsha1 > /dev/null real 0m0.002s user 0m0.000s sys 0m0.000s
And even better:
$ wc -l /tmp/note 39 /tmp/note $ time git ls-tree refs/notes/foo $(awk '{print $1, substr($1,1,2) "/" substr($1,3), substr($1,1,2) "/" substr($1,3,2) "/" substr($1,5)}' /tmp/note) | awk '{print $3}' | git cat-file --batch > /dev/null real 0m0.035s user 0m0.028s sys 0m0.004s
Reading 39 notes with ls-tree and cat-file --batch takes less time than using git notes show for only one of them...
(and reading all 39 of them with git notes show takes 5.5s)
Mike