Re: [PATCH 07/10] rev-list: call new "filter_skip" function
- From
Christian Couder <chriscool@tuxfamily.org>
- Date
- Apr 1, 2009, 06:09 UTC
- Message-ID
- <200904010809.41110.chriscool@tuxfamily.org>
- In-Reply-To
- <alpine.DEB.1.00.0903311117400.10279@pacific.mpi-cbg.de>
Le mardi 31 mars 2009, Johannes Schindelin a écrit :
Show 24 quoted lines
> Hi, > > On Tue, 31 Mar 2009, Christian Couder wrote: > > Le lundi 30 mars 2009, Johannes Schindelin a écrit : > > > On Mon, 30 Mar 2009, Christian Couder wrote: > > > > Le jeudi 26 mars 2009, Junio C Hamano a écrit : > > > > > I've learned to suspect without reading a qsort() callback that > > > > > does not derefence its arguments. Is this doing the right thing? > > > > > > > > I think so. > > > > > > I suspect something much worse: you are trying to build a list of > > > sha1s of commits that need to be skipped, later to look up every > > > commit via binary search. > > > > > > But it has been proven a lot of times that using a hash set is > > > superior to that approach, and even better: we already have the > > > framework in place in the form of struct decorate. > > > > I had a look, and "struct decorate" can be used to store objects, but I > > want to store only sha1s. > > No, you want to _look up_ sha1s. And struct decorate is not about > storing objects, but to attach things to objects.
The problem is that I don't have any object to attach things to when I read the bisect skip refs. I just need to store the sha1 from the skip refs in some sha1 container.
Here is the related code:
static int register_ref(const char *refname, const unsigned char *sha1,
int flags, void *cb_data)
{
if (!strcmp(refname, "bad")) {
...
} else if (!prefixcmp(refname, "good-")) {
...
} else if (!prefixcmp(refname, "skip-")) {
ALLOC_GROW(skipped_sha1, skipped_sha1_nr + 1,
skipped_sha1_alloc);
hashcpy(skipped_sha1[skipped_sha1_nr++], sha1);
}return 0; }
static int read_bisect_refs(void)
{
return for_each_bisect_ref(register_ref, NULL);
}Best regards, Christian.