gpt4 book ai didi

perl - git-svn fetch 在大小> LONG_MAX 的文件上失败

转载 作者:太空狗 更新时间:2023-10-29 14:47:58 27 4
gpt4 key购买 nike

我正在尝试使用 git-svn 从 subversion 迁移。

现在我被失败阻塞了

$ git svn fetch 

在 Git.pm 的第 900 行失败(来自 git-svn 包)

...
my $read = read($in, $blob, $bytesToReadd);

在名为 cat_blob() 的子程序中问题是文件是 2567089913 字节,当 git-svn 达到 2147484672 时,它会显示一条消息“Offset outside of string”。cat_blob 尝试在将整个文件写入磁盘之前将其保存在一个变量中。

我尝试将文件的写入从子循环的末尾移动到读取循环内部,

(这是我修改后的代码的样子)

890         my $size = $1;
891
892 my $blob;
893 my $bytesRead = 0;
894
895 while (1) {
896 my $bytesLeft = $size - $bytesRead;
897 last unless $bytesLeft;
898
899 my $bytesToRead = $bytesLeft < 1024 ? $bytesLeft : 1024;
900 print $size, " ", $bytesLeft, " ", $bytesRead, "\n";
901 my $read = read($in, $blob, $bytesToReadd);
902 unless (defined($read)) {
903 $self->_close_cat_blob();
904 throw Error::Simple("in pipe went bad");
905 unless (print $fh $blob) {
906 $self->_close_cat_blob();
907 throw Error::Simple("couldn't write to passed in filehandle");
908 }
909
910 }
911
912 $bytesRead += $read;
913 }

但是现在我得到了一个新的错误:

Checksum mismatch: root/Instruments/MY_DIR/MASSIVE_FILE.exe bca43a9cb6c3b7fdb76c460781eb410a34b6b9ec
expected: 52daf59b450b82a541e782dbfb803a32
got: d41d8cd98f00b204e9800998ecf8427e

我不是一个 perl 人。 perl 是否在 print 语句中添加了额外的废话?我有什么想法可以通过校验和吗?

最佳答案

修复缩进后错误会变得明显。

890         my $size = $1;
891
892 my $blob;
893 my $bytesRead = 0;
894
895 while (1) {
896 my $bytesLeft = $size - $bytesRead;
897 last unless $bytesLeft;
898
899 my $bytesToRead = $bytesLeft < 1024 ? $bytesLeft : 1024;
900 print $size, " ", $bytesLeft, " ", $bytesRead, "\n";
901 my $read = read($in, $blob, $bytesToReadd);
902 ---> unless (defined($read)) {
903 $self->_close_cat_blob();
904 throw Error::Simple("in pipe went bad");
905 ---> unless (print $fh $blob) {
906 $self->_close_cat_blob();
907 throw Error::Simple("couldn't write to passed in filehandle");
908 }
909
910 }
911
912 $bytesRead += $read;
913 }

永远不会到达print。只需将 905-909 移动到 912。

哦,你在第 901 行将 $bytesToRead 拼错为 $bytesToReadd。编译器没有发现吗?

您应该使用大于 1024 的 block 大小。64*1024 会快得多。

关于perl - git-svn fetch 在大小> LONG_MAX 的文件上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14969400/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com