]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t/lib-git-svn: make hash size independent
authorbrian m. carlson <sandals@crustytoothpaste.net>
Mon, 22 Jun 2020 18:04:11 +0000 (18:04 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 22 Jun 2020 18:21:07 +0000 (11:21 -0700)
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>
t/lib-git-svn.sh

index 7d248e6588063565596681e6e306f4f6b74f1177..547eb3c31a5a1ad7610f640bfccde823153bd283 100644 (file)
@@ -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 $!;