mirror of
https://github.com/git/git.git
synced 2024-11-23 18:05:29 +08:00
t/lib-git-svn: make hash size independent
The record size used in the git svn storage is four bytes plus the length of the binary hash. Pass the hash length into our Perl invocation and use it to compute the size of the records. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Acked-by: Eric Wong <e@80x24.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
3e04b6e1b6
commit
148f193d16
@ -78,21 +78,24 @@ maybe_start_httpd () {
|
||||
}
|
||||
|
||||
convert_to_rev_db () {
|
||||
perl -w -- - "$@" <<\EOF
|
||||
perl -w -- - "$(test_oid rawsz)" "$@" <<\EOF
|
||||
use strict;
|
||||
my $oidlen = shift;
|
||||
@ARGV == 2 or die "usage: convert_to_rev_db <input> <output>";
|
||||
my $record_size = $oidlen + 4;
|
||||
my $hexlen = $oidlen * 2;
|
||||
open my $wr, '+>', $ARGV[1] or die "$!: couldn't open: $ARGV[1]";
|
||||
open my $rd, '<', $ARGV[0] or die "$!: couldn't open: $ARGV[0]";
|
||||
my $size = (stat($rd))[7];
|
||||
($size % 24) == 0 or die "Inconsistent size: $size";
|
||||
while (sysread($rd, my $buf, 24) == 24) {
|
||||
my ($r, $c) = unpack('NH40', $buf);
|
||||
my $offset = $r * 41;
|
||||
($size % $record_size) == 0 or die "Inconsistent size: $size";
|
||||
while (sysread($rd, my $buf, $record_size) == $record_size) {
|
||||
my ($r, $c) = unpack("NH$hexlen", $buf);
|
||||
my $offset = $r * ($hexlen + 1);
|
||||
seek $wr, 0, 2 or die $!;
|
||||
my $pos = tell $wr;
|
||||
if ($pos < $offset) {
|
||||
for (1 .. (($offset - $pos) / 41)) {
|
||||
print $wr (('0' x 40),"\n") or die $!;
|
||||
for (1 .. (($offset - $pos) / ($hexlen + 1))) {
|
||||
print $wr (('0' x $hexlen),"\n") or die $!;
|
||||
}
|
||||
}
|
||||
seek $wr, $offset, 0 or die $!;
|
||||
|
Loading…
Reference in New Issue
Block a user