Skip to content
This repository was archived by the owner on Sep 27, 2024. It is now read-only.

Commit 129e255

Browse files
ianicRossComputerGuy
authored andcommitted
package: remove git fetch zlib lookahead fix
My first zlib implementation broke git fetch because it introduce [lookahead](ziglang#18967). That resulted in workarounds [1](ziglang@80f3ef6) [2](ziglang@d00faa2) After [fixing](ziglang#19163) lookahead in zlib decompressor this fixes are no longer necessary.
1 parent 4835175 commit 129e255

File tree

1 file changed

+13
-20
lines changed

1 file changed

+13
-20
lines changed

src/Package/Fetch/git.zig

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,24 +1111,21 @@ fn indexPackFirstPass(
11111111
index_entries: *std.AutoHashMapUnmanaged(Oid, IndexEntry),
11121112
pending_deltas: *std.ArrayListUnmanaged(IndexEntry),
11131113
) ![Sha1.digest_length]u8 {
1114-
var pack_counting_writer = std.io.countingWriter(std.io.null_writer);
1115-
var pack_hashed_writer = std.compress.hashedWriter(pack_counting_writer.writer(), Sha1.init(.{}));
1116-
var entry_crc32_writer = std.compress.hashedWriter(pack_hashed_writer.writer(), std.hash.Crc32.init());
1117-
var pack_buffered_reader = std.io.bufferedTee(4096, 8, pack.reader(), entry_crc32_writer.writer());
1118-
const pack_reader = pack_buffered_reader.reader();
1114+
var pack_buffered_reader = std.io.bufferedReader(pack.reader());
1115+
var pack_counting_reader = std.io.countingReader(pack_buffered_reader.reader());
1116+
var pack_hashed_reader = std.compress.hashedReader(pack_counting_reader.reader(), Sha1.init(.{}));
1117+
const pack_reader = pack_hashed_reader.reader();
11191118

11201119
const pack_header = try PackHeader.read(pack_reader);
1121-
try pack_buffered_reader.flush();
11221120

11231121
var current_entry: u32 = 0;
11241122
while (current_entry < pack_header.total_objects) : (current_entry += 1) {
1125-
const entry_offset = pack_counting_writer.bytes_written;
1126-
entry_crc32_writer.hasher = std.hash.Crc32.init(); // reset hasher
1127-
const entry_header = try EntryHeader.read(pack_reader);
1128-
1123+
const entry_offset = pack_counting_reader.bytes_read;
1124+
var entry_crc32_reader = std.compress.hashedReader(pack_reader, std.hash.Crc32.init());
1125+
const entry_header = try EntryHeader.read(entry_crc32_reader.reader());
11291126
switch (entry_header) {
11301127
.commit, .tree, .blob, .tag => |object| {
1131-
var entry_decompress_stream = std.compress.zlib.decompressor(pack_reader);
1128+
var entry_decompress_stream = std.compress.zlib.decompressor(entry_crc32_reader.reader());
11321129
var entry_counting_reader = std.io.countingReader(entry_decompress_stream.reader());
11331130
var entry_hashed_writer = hashedWriter(std.io.null_writer, Sha1.init(.{}));
11341131
const entry_writer = entry_hashed_writer.writer();
@@ -1141,33 +1138,29 @@ fn indexPackFirstPass(
11411138
return error.InvalidObject;
11421139
}
11431140
const oid = entry_hashed_writer.hasher.finalResult();
1144-
pack_buffered_reader.putBack(entry_decompress_stream.unreadBytes());
1145-
try pack_buffered_reader.flush();
11461141
try index_entries.put(allocator, oid, .{
11471142
.offset = entry_offset,
1148-
.crc32 = entry_crc32_writer.hasher.final(),
1143+
.crc32 = entry_crc32_reader.hasher.final(),
11491144
});
11501145
},
11511146
inline .ofs_delta, .ref_delta => |delta| {
1152-
var entry_decompress_stream = std.compress.zlib.decompressor(pack_reader);
1147+
var entry_decompress_stream = std.compress.zlib.decompressor(entry_crc32_reader.reader());
11531148
var entry_counting_reader = std.io.countingReader(entry_decompress_stream.reader());
11541149
var fifo = std.fifo.LinearFifo(u8, .{ .Static = 4096 }).init();
11551150
try fifo.pump(entry_counting_reader.reader(), std.io.null_writer);
11561151
if (entry_counting_reader.bytes_read != delta.uncompressed_length) {
11571152
return error.InvalidObject;
11581153
}
1159-
pack_buffered_reader.putBack(entry_decompress_stream.unreadBytes());
1160-
try pack_buffered_reader.flush();
11611154
try pending_deltas.append(allocator, .{
11621155
.offset = entry_offset,
1163-
.crc32 = entry_crc32_writer.hasher.final(),
1156+
.crc32 = entry_crc32_reader.hasher.final(),
11641157
});
11651158
},
11661159
}
11671160
}
11681161

1169-
const pack_checksum = pack_hashed_writer.hasher.finalResult();
1170-
const recorded_checksum = try pack_reader.readBytesNoEof(Sha1.digest_length);
1162+
const pack_checksum = pack_hashed_reader.hasher.finalResult();
1163+
const recorded_checksum = try pack_buffered_reader.reader().readBytesNoEof(Sha1.digest_length);
11711164
if (!mem.eql(u8, &pack_checksum, &recorded_checksum)) {
11721165
return error.CorruptedPack;
11731166
}

0 commit comments

Comments
 (0)