tangled
alpha
login
or
join now
rockorager.dev
/
lsr
60
fork
atom
ls but with io_uring
60
fork
atom
overview
issues
9
pulls
1
pipelines
build: update for zig 0.15.1
rockorager.dev
5 months ago
a9cfda7e
0251e76c
verified
This commit was signed with the committer's
known signature
.
rockorager.dev
SSH Key Fingerprint:
SHA256:qn/Fjy7CpbcogGEPB14Y53hLnQleZNFY9lkQnuudFLs=
+41
-33
2 changed files
expand all
collapse all
unified
split
build.zig.zon
src
main.zig
+6
-6
build.zig.zon
···
7
8
.dependencies = .{
9
.ourio = .{
10
-
.url = "git+https://github.com/rockorager/ourio#c94a93d34c0b0082facdabc12b6b997f7ee8b648",
11
-
.hash = "ourio-0.0.0-_s-z0S0XAgB2nng8oxDng5AlACiqMTcFGq77494HMBXw",
12
},
13
.zeit = .{
14
-
.url = "git+https://github.com/rockorager/zeit#4496d1c40b2223c22a1341e175fc2ecd94cc0de9",
15
-
.hash = "zeit-0.6.0-5I6bk1J1AgA13rteb6E0steXiOUKBYTzJZMMIuK9oEmb",
16
},
17
.zzdoc = .{
18
-
.url = "git+https://github.com/rockorager/zzdoc#57e86eb4e621bc4a96fbe0dd89ad0986db6d0483",
19
-
.hash = "zzdoc-0.0.0-tzT1PuPZAACr1jIJxjTrdOsLbfXS6idWFGfTq0gwxJiv",
20
},
21
},
22
.paths = .{
···
7
8
.dependencies = .{
9
.ourio = .{
10
+
.url = "git+https://github.com/rockorager/ourio#07bf94db87a9aea70d6e1a1dd99cac6fb9d38b35",
11
+
.hash = "ourio-0.0.0-_s-z0Z0XAgBU_BFjdY8QjGhJ8vcdIONPSErlYRwLoxfg",
12
},
13
.zeit = .{
14
+
.url = "git+https://github.com/rockorager/zeit#74be5a2afb346b2a6a6349abbb609e89ec7e65a6",
15
+
.hash = "zeit-0.6.0-5I6bk4t8AgCP0UGGHVF_khlmWZkAF5XtfQWEKCyLoptU",
16
},
17
.zzdoc = .{
18
+
.url = "git+https://github.com/rockorager/zzdoc#a54223bdc13a80839ccf9f473edf3a171e777946",
19
+
.hash = "zzdoc-0.0.0-tzT1Ph7cAAC5YmXQXiBJHAg41_A5AUAC5VOm7ShnUxlz",
20
},
21
},
22
.paths = .{
+35
-27
src/main.zig
···
152
153
var cmd: Command = .{ .arena = allocator };
154
155
-
cmd.opts.winsize = getWinsize(std.io.getStdOut().handle);
156
157
cmd.opts.shortview = if (cmd.opts.isatty()) .columns else .oneline;
158
159
-
const stdout = std.io.getStdOut().writer();
160
-
const stderr = std.io.getStdErr().writer();
161
-
var bw = std.io.bufferedWriter(stdout);
0
0
0
162
163
var args = std.process.args();
164
// skip binary
···
261
} else if (eql(opt, "help")) {
262
return stderr.writeAll(usage);
263
} else if (eql(opt, "version")) {
264
-
try bw.writer().print("lsr {s}\r\n", .{build_options.version});
265
-
try bw.flush();
266
return;
267
} else {
268
try stderr.print("Invalid opt: '{s}'\n", .{opt});
···
326
327
if (cmd.entries.len == 0) {
328
if (multiple_dirs and dir_idx < cmd.opts.directories.items.len - 1) {
329
-
try bw.writer().writeAll("\r\n");
330
}
331
continue;
332
}
···
338
}
339
340
if (multiple_dirs and !cmd.opts.tree) {
341
-
if (dir_idx > 0) try bw.writer().writeAll("\r\n");
342
-
try bw.writer().print("{s}:\r\n", .{directory});
343
}
344
345
if (cmd.opts.tree) {
346
-
if (multiple_dirs and dir_idx > 0) try bw.writer().writeAll("\r\n");
347
-
try printTree(cmd, bw.writer());
348
} else if (cmd.opts.long) {
349
-
try printLong(&cmd, bw.writer());
350
} else switch (cmd.opts.shortview) {
351
-
.columns => try printShortColumns(cmd, bw.writer()),
352
-
.oneline => try printShortOnePerLine(cmd, bw.writer()),
353
}
354
}
355
-
try bw.flush();
356
}
357
358
fn printShortColumns(cmd: Command, writer: anytype) !void {
···
429
430
if (i < columns.items.len - 1) {
431
const spaces = column.width - (icon_width + entry.name.len);
432
-
try writer.writeByteNTimes(' ', spaces);
0
433
}
434
}
435
try writer.writeAll("\r\n");
···
519
try writer.print("{s}\n", .{dir_name});
520
521
const max_depth = cmd.opts.tree_depth orelse std.math.maxInt(usize);
522
-
var prefix_list = std.ArrayList(bool).init(cmd.arena);
523
524
for (cmd.entries, 0..) |entry, i| {
525
const is_last = i == cmd.entries.len - 1;
···
531
if (entry.kind == .directory and max_depth > 0) {
532
const full_path = try std.fs.path.joinZ(cmd.arena, &.{ cmd.current_directory, entry.name });
533
534
-
try prefix_list.append(is_last);
535
try recurseTree(cmd, writer, full_path, &prefix_list, 1, max_depth);
536
537
_ = prefix_list.pop();
···
545
};
546
defer dir.close();
547
548
-
var entries = std.ArrayList(Entry).init(cmd.arena);
549
var iter = dir.iterate();
550
551
while (try iter.next()) |dirent| {
552
if (!cmd.opts.showDotfiles() and std.mem.startsWith(u8, dirent.name, ".")) continue;
553
554
const nameZ = try cmd.arena.dupeZ(u8, dirent.name);
555
-
try entries.append(.{
556
.name = nameZ,
557
.kind = dirent.kind,
558
.statx = undefined,
···
575
if (entry.kind == .directory and depth < max_depth) {
576
const full_path = try std.fs.path.joinZ(cmd.arena, &.{ dir_path, entry.name });
577
578
-
try prefix_list.append(is_last);
579
try recurseTree(cmd, writer, full_path, prefix_list, depth + 1, max_depth);
580
581
_ = prefix_list.pop();
···
690
try writer.writeAll(&mode);
691
try writer.writeByte(' ');
692
try writer.writeAll(user.name);
693
-
try writer.writeByteNTimes(' ', longest_user - user.name.len);
0
694
try writer.writeByte(' ');
695
try writer.writeAll(group.name);
696
-
try writer.writeByteNTimes(' ', longest_group - group.name.len);
0
697
try writer.writeByte(' ');
698
699
var size_buf: [16]u8 = undefined;
700
const size = try entry.humanReadableSize(&size_buf);
701
const suffix = entry.humanReadableSuffix();
702
703
-
try writer.writeByteNTimes(' ', longest_size - size.len);
0
704
try writer.writeAll(size);
705
try writer.writeByte(' ');
706
try writer.writeAll(suffix);
707
-
try writer.writeByteNTimes(' ', longest_suffix - suffix.len);
0
708
try writer.writeByte(' ');
709
710
try writer.print("{d: >2} {s} ", .{
···
1109
const n = try result.read;
1110
_ = try io.close(task.req.read.fd, .{});
1111
const bytes = task.req.read.buffer[0..n];
1112
-
var fbs = std.io.fixedBufferStream(bytes);
1113
-
const tz = try zeit.timezone.TZInfo.parse(cmd.arena, fbs.reader());
1114
cmd.tz = .{ .tzinfo = tz };
1115
},
1116
···
152
153
var cmd: Command = .{ .arena = allocator };
154
155
+
cmd.opts.winsize = getWinsize(std.fs.File.stdout().handle);
156
157
cmd.opts.shortview = if (cmd.opts.isatty()) .columns else .oneline;
158
159
+
var stdout_buf: [4096]u8 = undefined;
160
+
var stderr_buf: [4096]u8 = undefined;
161
+
var stdout_writer = std.fs.File.stdout().writer(&stdout_buf);
162
+
var stderr_writer = std.fs.File.stderr().writer(&stderr_buf);
163
+
var stdout = &stdout_writer.interface;
164
+
var stderr = &stderr_writer.interface;
165
166
var args = std.process.args();
167
// skip binary
···
264
} else if (eql(opt, "help")) {
265
return stderr.writeAll(usage);
266
} else if (eql(opt, "version")) {
267
+
try stdout.print("lsr {s}\r\n", .{build_options.version});
268
+
try stdout.flush();
269
return;
270
} else {
271
try stderr.print("Invalid opt: '{s}'\n", .{opt});
···
329
330
if (cmd.entries.len == 0) {
331
if (multiple_dirs and dir_idx < cmd.opts.directories.items.len - 1) {
332
+
try stdout.writeAll("\r\n");
333
}
334
continue;
335
}
···
341
}
342
343
if (multiple_dirs and !cmd.opts.tree) {
344
+
if (dir_idx > 0) try stdout.writeAll("\r\n");
345
+
try stdout.print("{s}:\r\n", .{directory});
346
}
347
348
if (cmd.opts.tree) {
349
+
if (multiple_dirs and dir_idx > 0) try stdout.writeAll("\r\n");
350
+
try printTree(cmd, stdout);
351
} else if (cmd.opts.long) {
352
+
try printLong(&cmd, stdout);
353
} else switch (cmd.opts.shortview) {
354
+
.columns => try printShortColumns(cmd, stdout),
355
+
.oneline => try printShortOnePerLine(cmd, stdout),
356
}
357
}
358
+
try stdout.flush();
359
}
360
361
fn printShortColumns(cmd: Command, writer: anytype) !void {
···
432
433
if (i < columns.items.len - 1) {
434
const spaces = column.width - (icon_width + entry.name.len);
435
+
var space_buf = [_][]const u8{" "};
436
+
try writer.writeSplatAll(&space_buf, spaces);
437
}
438
}
439
try writer.writeAll("\r\n");
···
523
try writer.print("{s}\n", .{dir_name});
524
525
const max_depth = cmd.opts.tree_depth orelse std.math.maxInt(usize);
526
+
var prefix_list: std.ArrayList(bool) = .{};
527
528
for (cmd.entries, 0..) |entry, i| {
529
const is_last = i == cmd.entries.len - 1;
···
535
if (entry.kind == .directory and max_depth > 0) {
536
const full_path = try std.fs.path.joinZ(cmd.arena, &.{ cmd.current_directory, entry.name });
537
538
+
try prefix_list.append(cmd.arena, is_last);
539
try recurseTree(cmd, writer, full_path, &prefix_list, 1, max_depth);
540
541
_ = prefix_list.pop();
···
549
};
550
defer dir.close();
551
552
+
var entries: std.ArrayList(Entry) = .{};
553
var iter = dir.iterate();
554
555
while (try iter.next()) |dirent| {
556
if (!cmd.opts.showDotfiles() and std.mem.startsWith(u8, dirent.name, ".")) continue;
557
558
const nameZ = try cmd.arena.dupeZ(u8, dirent.name);
559
+
try entries.append(cmd.arena, .{
560
.name = nameZ,
561
.kind = dirent.kind,
562
.statx = undefined,
···
579
if (entry.kind == .directory and depth < max_depth) {
580
const full_path = try std.fs.path.joinZ(cmd.arena, &.{ dir_path, entry.name });
581
582
+
try prefix_list.append(cmd.arena, is_last);
583
try recurseTree(cmd, writer, full_path, prefix_list, depth + 1, max_depth);
584
585
_ = prefix_list.pop();
···
694
try writer.writeAll(&mode);
695
try writer.writeByte(' ');
696
try writer.writeAll(user.name);
697
+
var space_buf1 = [_][]const u8{" "};
698
+
try writer.writeSplatAll(&space_buf1, longest_user - user.name.len);
699
try writer.writeByte(' ');
700
try writer.writeAll(group.name);
701
+
var space_buf2 = [_][]const u8{" "};
702
+
try writer.writeSplatAll(&space_buf2, longest_group - group.name.len);
703
try writer.writeByte(' ');
704
705
var size_buf: [16]u8 = undefined;
706
const size = try entry.humanReadableSize(&size_buf);
707
const suffix = entry.humanReadableSuffix();
708
709
+
var space_buf3 = [_][]const u8{" "};
710
+
try writer.writeSplatAll(&space_buf3, longest_size - size.len);
711
try writer.writeAll(size);
712
try writer.writeByte(' ');
713
try writer.writeAll(suffix);
714
+
var space_buf4 = [_][]const u8{" "};
715
+
try writer.writeSplatAll(&space_buf4, longest_suffix - suffix.len);
716
try writer.writeByte(' ');
717
718
try writer.print("{d: >2} {s} ", .{
···
1117
const n = try result.read;
1118
_ = try io.close(task.req.read.fd, .{});
1119
const bytes = task.req.read.buffer[0..n];
1120
+
var reader = std.Io.Reader.fixed(bytes);
1121
+
const tz = try zeit.timezone.TZInfo.parse(cmd.arena, &reader);
1122
cmd.tz = .{ .tzinfo = tz };
1123
},
1124