srctree

Jeremy Hertel parent bca3f492 59de4715
don't include <> in email for commit and add test for parsing a commit

inlinesplit
src/git.zig added: 30, removed: 3, total 27
@@ -1330,6 +1330,30 @@ test "list remotes" {
try std.testing.expectEqualStrings("gr.ht", remotes[1].name);
}
 
test "parse commit" {
const commit_data =
\\tree 863dce25c7370ca052f0efddd1e3aa73569fb37b
\\parent ac7bc0f8c6d88e2595d6147f79d88b91476acdde
\\author Gregory Mullen <github@gr.ht> 1747760721 -0700
\\committer Gregory Mullen <github@gr.ht> 1747760721 -0700
\\
\\clean up blame.zig
;
 
const commit = try Commit.init(SHA.init("ac7bc0f8c6d88e2595d6147f79d88b91476acdde"), commit_data);
const parents: [9]?SHA = .{ SHA.init("ac7bc0f8c6d88e2595d6147f79d88b91476acdde"), null, null, null, null, null, null, null, null };
try std.testing.expectEqualSlices(?SHA, &parents, &commit.parent);
try std.testing.expectEqual(SHA.init("863dce25c7370ca052f0efddd1e3aa73569fb37b"), commit.tree);
try std.testing.expectEqualStrings("Gregory Mullen", commit.author.name);
try std.testing.expectEqualStrings("github@gr.ht", commit.author.email);
try std.testing.expectEqual(1747760721, commit.author.timestamp);
try std.testing.expectEqualStrings("-0700", commit.author.tzstr);
try std.testing.expectEqualStrings("Gregory Mullen", commit.committer.name);
try std.testing.expectEqualStrings("github@gr.ht", commit.committer.email);
try std.testing.expectEqual(1747760721, commit.committer.timestamp);
try std.testing.expectEqualStrings("-0700", commit.committer.tzstr);
}
 
const Ini = @import("ini.zig");
 
const std = @import("std");
 
src/git/actor.zig added: 30, removed: 3, total 27
@@ -18,9 +18,12 @@ pub fn make(data: []const u8) !Actor {
const email = itr.next() orelse return error.ActorParse;
const name = itr.rest();
 
const email_start = if (std.mem.indexOfScalar(u8, email, '<')) |index| index + 1 else 0;
const email_end = std.mem.indexOfScalar(u8, email, '>') orelse email.len;
 
return .{
.name = name,
.email = email,
.email = email[email_start..email_end],
.timestr = data[epstart..data.len],
.tzstr = tzstr,
.timestamp = std.fmt.parseInt(i64, epoch, 10) catch return error.ActorParse,