Thread (12 messages) 12 messages, 4 authors, 2016-06-15

Re: [PATCH] describe: Don’t look up commits with --exact-match

From: Anders Kaseorg <hidden>
Date: 2016-06-15 22:50:11

On Fri, 3 Dec 2010, Jonathan Nieder wrote:
 - static?
 - the convention in git is to leave off the zero-initializers
   for bss-allocated vars (static and globals).
Will fix.
The usual convention is to use !hashcmp(...) to match the !strcmp(...)
idiom.
Will fix (I hate that idiom, but yeah, match existing style).
quoted
+	for (e = names; e; e = e->next) {
+		if (!hashcmp(e->peeled, cmit->object.sha1) &&
+		    replace_name(n, e->prio, e->sha1, &e->tag))
+			n = e;
+	}
Instead of looking up the commit to be matched exactly in the commits
hash table, this makes a linear search.

No change to the assymptotic running time, but would this make things
much slower in the case of many tags?  How many before it's a problem
(if ever)?
I don’t think it’s ever a problem: in my repository with 1800 tags on a 
warm cache, that loop accounts for about 0.1% of even the fastest 
non-exact-match query (a commit right after a tag).
(If it's a problem in ordinary cases, I think the optimization could be 
limited to --exact-match pretty easily.)
Then you’d lose the speedup in the case where --exact-match wasn’t 
specified but a tag happens to match exactly (which isn’t critical, but 
seemed nice).
quoted
-	for_each_ref(get_name, NULL);
+	for_each_rawref(get_name, NULL);
Orthogonal change snuck in?
This does fall under the category of “Don’t lookup commits,” and is 
necessary to get the speedup (otherwise for_each_ref has already looked up 
the commits that the rest of the patch is trying to avoid looking up).  
But I could split it out if you want.

Anders
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help