From eb6446878b28ad53064dffa1f7eb09d55bbb8cdd Mon Sep 17 00:00:00 2001 From: Sadeep Madurange Date: Sat, 11 Apr 2026 23:10:40 +0800 Subject: wip: read paged index. --- vcx | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/vcx b/vcx index 8c68681..404a144 100644 --- a/vcx +++ b/vcx @@ -407,17 +407,32 @@ sub stream_tree { } sub stream_index { - $index = INDEX; - open(my $fh, "<:utf8", $index) or die "Could not open index: $!"; + my $index = INDEX; + my $offset_len = 8; + + return sub { return; } unless -e $index && -s $index > $offset_len; + + open(my $fh, "<:raw", $index) or die "Could not open index: $!"; + + my $file_size = -s $index_path; + seek($fh, $file_size - $offset_len, 0); + read($fh, my $buf, $offset_len); + my $offset = unpack("Q", $buf); + seek($fh, $offset, 0); return sub { + my $pos = tell($fh); + return if $pos >= ($file_size - $offset_len); + my $line = <$fh>; unless (defined $line) { close $fh; return; } + chomp $line; my ($path, $size, $mtime, $hash) = split(/\t/, $line); + return { path => $path, size => $size, -- cgit v1.2.3