authorgravatar for igor.anic@gmail.comIgor Anić <igor.anic@gmail.com> 2023-12-12 18:50:25+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-01-13 19:37:33-07:00
log7923a53996f8d24ad27823db3a45a6dd4a2bf317
treefed74f66e4b311f1dfbf9a235ab957e529da511f
parente21a12e56b21aee956132dd5f68bc2349ce37c1a

tar: rename reader to iterator

Itarator has `next` function, iterates over tar files. When using from outside of module with `tar.` prefix makes more sense. var iter = tar.iterator(reader, null); while (try iter.next()) |file| { ... }

2 files changed, 24 insertions(+), 24 deletions(-)

lib/std/tar.zig+14-13
...@@ -225,14 +225,16 @@ fn nullStr(str: []const u8) []const u8 {...@@ -225,14 +225,16 @@ fn nullStr(str: []const u8) []const u8 {
225 return str;225 return str;
226}226}
227227
228pub fn tarReader(reader: anytype, diagnostics: ?*Options.Diagnostics) TarReader(@TypeOf(reader)) {228/// Iterates over files in tar archive.
229/// `next` returns each file in `reader` tar archive.
230pub fn iterator(reader: anytype, diagnostics: ?*Options.Diagnostics) Iterator(@TypeOf(reader)) {
229 return .{231 return .{
230 .reader = reader,232 .reader = reader,
231 .diagnostics = diagnostics,233 .diagnostics = diagnostics,
232 };234 };
233}235}
234236
235fn TarReader(comptime ReaderType: type) type {237fn Iterator(comptime ReaderType: type) type {
236 return struct {238 return struct {
237 reader: ReaderType,239 reader: ReaderType,
238 diagnostics: ?*Options.Diagnostics,240 diagnostics: ?*Options.Diagnostics,
...@@ -358,7 +360,7 @@ fn TarReader(comptime ReaderType: type) type {...@@ -358,7 +360,7 @@ fn TarReader(comptime ReaderType: type) type {
358 // Use just attributes from last extended header.360 // Use just attributes from last extended header.
359 self.initFile();361 self.initFile();
360362
361 var rdr = paxReader(self.reader, @intCast(size));363 var rdr = paxIterator(self.reader, @intCast(size));
362 while (try rdr.next()) |attr| {364 while (try rdr.next()) |attr| {
363 switch (attr.kind) {365 switch (attr.kind) {
364 .path => {366 .path => {
...@@ -393,10 +395,10 @@ fn TarReader(comptime ReaderType: type) type {...@@ -393,10 +395,10 @@ fn TarReader(comptime ReaderType: type) type {
393 };395 };
394}396}
395397
396// Pax attributes reader.398/// Pax attributes iterator.
397// Size is length of pax extended header in reader.399/// Size is length of pax extended header in reader.
398fn paxReader(reader: anytype, size: usize) PaxReader(@TypeOf(reader)) {400fn paxIterator(reader: anytype, size: usize) PaxIterator(@TypeOf(reader)) {
399 return PaxReader(@TypeOf(reader)){401 return PaxIterator(@TypeOf(reader)){
400 .reader = reader,402 .reader = reader,
401 .size = size,403 .size = size,
402 };404 };
...@@ -408,7 +410,7 @@ const PaxAttributeKind = enum {...@@ -408,7 +410,7 @@ const PaxAttributeKind = enum {
408 size,410 size,
409};411};
410412
411fn PaxReader(comptime ReaderType: type) type {413fn PaxIterator(comptime ReaderType: type) type {
412 return struct {414 return struct {
413 size: usize, // cumulative size of all pax attributes415 size: usize, // cumulative size of all pax attributes
414 reader: ReaderType,416 reader: ReaderType,
...@@ -508,8 +510,7 @@ pub fn pipeToFileSystem(dir: std.fs.Dir, reader: anytype, options: Options) !voi...@@ -508,8 +510,7 @@ pub fn pipeToFileSystem(dir: std.fs.Dir, reader: anytype, options: Options) !voi
508 },510 },
509 }511 }
510512
511 var iter = tarReader(reader, options.diagnostics);513 var iter = iterator(reader, options.diagnostics);
512
513 while (try iter.next()) |file| {514 while (try iter.next()) |file| {
514 switch (file.kind) {515 switch (file.kind) {
515 .directory => {516 .directory => {
...@@ -601,7 +602,7 @@ test "tar stripComponents" {...@@ -601,7 +602,7 @@ test "tar stripComponents" {
601 try expectEqualStrings("c", try stripComponents("a/b/c", 2));602 try expectEqualStrings("c", try stripComponents("a/b/c", 2));
602}603}
603604
604test "tar PaxReader" {605test "tar PaxIterator" {
605 const Attr = struct {606 const Attr = struct {
606 kind: PaxAttributeKind,607 kind: PaxAttributeKind,
607 value: []const u8 = undefined,608 value: []const u8 = undefined,
...@@ -699,10 +700,10 @@ test "tar PaxReader" {...@@ -699,10 +700,10 @@ test "tar PaxReader" {
699700
700 outer: for (cases) |case| {701 outer: for (cases) |case| {
701 var stream = std.io.fixedBufferStream(case.data);702 var stream = std.io.fixedBufferStream(case.data);
702 var rdr = paxReader(stream.reader(), case.data.len);703 var iter = paxIterator(stream.reader(), case.data.len);
703704
704 var i: usize = 0;705 var i: usize = 0;
705 while (rdr.next() catch |err| {706 while (iter.next() catch |err| {
706 if (case.err) |e| {707 if (case.err) |e| {
707 try std.testing.expectEqual(e, err);708 try std.testing.expectEqual(e, err);
708 continue;709 continue;
lib/std/tar/test.zig+10-11
...@@ -1,7 +1,6 @@...@@ -1,7 +1,6 @@
1const std = @import("../std.zig");1const std = @import("../std.zig");
2const builtin = @import("builtin");
3const tar = std.tar;2const tar = std.tar;
4const assert = std.debug.assert;3const testing = std.testing;
54
6test "tar run Go test cases" {5test "tar run Go test cases" {
7 const Case = struct {6 const Case = struct {
...@@ -318,33 +317,33 @@ test "tar run Go test cases" {...@@ -318,33 +317,33 @@ test "tar run Go test cases" {
318317
319 for (cases) |case| {318 for (cases) |case| {
320 var fsb = std.io.fixedBufferStream(case.data);319 var fsb = std.io.fixedBufferStream(case.data);
321 var iter = tar.tarReader(fsb.reader(), null);320 var iter = tar.iterator(fsb.reader(), null);
322 var i: usize = 0;321 var i: usize = 0;
323 while (iter.next() catch |err| {322 while (iter.next() catch |err| {
324 if (case.err) |e| {323 if (case.err) |e| {
325 try std.testing.expectEqual(e, err);324 try testing.expectEqual(e, err);
326 continue;325 continue;
327 } else {326 } else {
328 return err;327 return err;
329 }328 }
330 }) |actual| : (i += 1) {329 }) |actual| : (i += 1) {
331 const expected = case.files[i];330 const expected = case.files[i];
332 try std.testing.expectEqualStrings(expected.name, actual.name);331 try testing.expectEqualStrings(expected.name, actual.name);
333 try std.testing.expectEqual(expected.size, actual.size);332 try testing.expectEqual(expected.size, actual.size);
334 try std.testing.expectEqual(expected.kind, actual.kind);333 try testing.expectEqual(expected.kind, actual.kind);
335 try std.testing.expectEqual(expected.mode, actual.mode);334 try testing.expectEqual(expected.mode, actual.mode);
336 try std.testing.expectEqualStrings(expected.link_name, actual.link_name);335 try testing.expectEqualStrings(expected.link_name, actual.link_name);
337336
338 if (case.chksums.len > i) {337 if (case.chksums.len > i) {
339 var md5writer = Md5Writer{};338 var md5writer = Md5Writer{};
340 try actual.write(&md5writer);339 try actual.write(&md5writer);
341 const chksum = md5writer.chksum();340 const chksum = md5writer.chksum();
342 try std.testing.expectEqualStrings(case.chksums[i], &chksum);341 try testing.expectEqualStrings(case.chksums[i], &chksum);
343 } else {342 } else {
344 if (!expected.truncated) try actual.skip(); // skip file content343 if (!expected.truncated) try actual.skip(); // skip file content
345 }344 }
346 }345 }
347 try std.testing.expectEqual(case.files.len, i);346 try testing.expectEqual(case.files.len, i);
348 }347 }
349}348}
350349