authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2025-06-25 12:56:07 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2025-06-25 12:56:07 -07:00
log3835107c3034398b00c58b6341d017a4893b9126
tree8f2abc1dbda0ba73a25e34e5e9f758c1d0927c37
parent597e9945f6e210c7e6591888b3a283f4076fae56

parse timezone part


1 files changed, 15 insertions(+), 2 deletions(-)

git.zig+15-2
...@@ -226,12 +226,11 @@ fn parseCommitUserAndAt(input: string) !UserAndAt {...@@ -226,12 +226,11 @@ fn parseCommitUserAndAt(input: string) !UserAndAt {
226 const time_part = maybe_bad_parser.next() orelse return error.BadCommitTime;226 const time_part = maybe_bad_parser.next() orelse return error.BadCommitTime;
227 const email_part = maybe_bad_parser.next() orelse return error.BadCommitEmail;227 const email_part = maybe_bad_parser.next() orelse return error.BadCommitEmail;
228 const name_part = maybe_bad_parser.rest();228 const name_part = maybe_bad_parser.rest();
229 _ = tz_part;
230 std.debug.assert(email_part[0] == '<');229 std.debug.assert(email_part[0] == '<');
231 std.debug.assert(email_part[email_part.len - 1] == '>');230 std.debug.assert(email_part[email_part.len - 1] == '>');
232 const name = name_part;231 const name = name_part;
233 const email = std.mem.trim(u8, email_part, "<>");232 const email = std.mem.trim(u8, email_part, "<>");
234 const at = time.DateTime.initUnix(try std.fmt.parseInt(u64, time_part, 10));233 const at = parseAt(time_part, tz_part);
235234
236 return .{235 return .{
237 .name = name,236 .name = name,
...@@ -240,6 +239,20 @@ fn parseCommitUserAndAt(input: string) !UserAndAt {...@@ -240,6 +239,20 @@ fn parseCommitUserAndAt(input: string) !UserAndAt {
240 };239 };
241}240}
242241
242fn parseAt(time_part: string, tz_part: string) time.DateTime {
243 var at = time.DateTime.initUnix(std.fmt.parseInt(u64, time_part, 10) catch unreachable);
244 std.debug.assert(tz_part.len == 5);
245 std.debug.assert(tz_part[0] == '-' or tz_part[0] == '+');
246 const sign: i8 = if (tz_part[0] == '+') 1 else -1;
247 const hrs = std.fmt.parseInt(u8, tz_part[1..][0..2], 10) catch unreachable;
248 const mins = std.fmt.parseInt(u8, tz_part[3..][0..2], 10) catch unreachable;
249 if (sign > 0) at = at.addHours(hrs);
250 if (sign > 0) at = at.addMins(mins);
251 // if (sign < 0) at = at.subHours(hrs); // TODO:
252 // if (sign < 0) at = at.subMins(mins); // TODO:
253 return at;
254}
255
243pub const Commit = struct {256pub const Commit = struct {
244 tree: TreeId,257 tree: TreeId,
245 parents: []const CommitId,258 parents: []const CommitId,