Re: [PATCH] cvsimport move over to using git for each ref to read refs V3
- From
Andy Whitcroft <apw@shadowen.org>
- Date
- Sep 20, 2006, 17:00 UTC
- Message-ID
- <451173B1.4060305@shadowen.org>
- In-Reply-To
- <7vodtaiijt.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano wrote:
Show 22 quoted lines
> Andy Whitcroft <apw@shadowen.org> writes:
>
>> + my $fmt = '($ref, $author) = (%(refname), %(author));';
>> + open(H, "git-for-each-ref --perl --format='$fmt'|") or
>> + die "Cannot run git-for-each-ref: $!\n";
>> + while(defined(my $entry = <H>)) {
>> + my ($ref, $author);
>> + eval($entry) || die "cannot eval refs list: $@";
>> +
>> + next if ($ref !~ m@^refs/heads/(.*)$@);
>> + my ($head) = ($1);
>> + $author =~ /^.*\s(\d+)\s[-+]\d{4}$/;
>> + $branch_date{$head} = $1;
>> }
>> - closedir(D);
>> + close(H);
>> }
>
> for-each-ref let's you limit the refs by leading path, so I do
> not think "next if" inside the loop is needed if you say
>
> for-each-ref --perl --format=$fmt refs/headsStupid boy :)
> > Any reason you did not like my version that allows you to get > rid of the while() loop altogether? (hint: replace eval in my > example with "print" and see what you are evaling)
To my mind we avoid the 'mozilla repo' issue of 1000's of heads busting some string length limit, or requiring some _vast_ string to hold it (as perl is likely to cope). Given we are sifting a small percentage of the data out of it.
Let me know which way you want it and we'll go that way :).
-apw