From dcb2f7b07ece90ff3128e3006cd154c0ddfef74e Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 21 Sep 2025 03:18:50 +0800 Subject: [PATCH] Git show object for tags --- cmd/show-object/main.ha | 45 +++++++++++++++++++++++++++++++++++++++------ diff --git a/cmd/show-object/main.ha b/cmd/show-object/main.ha index 0c691699e1a435dda3d49fb3f23738df8cc89c74..e7839ab96e7683d201d0ef4bdc4f05d05b32a584 100644 --- a/cmd/show-object/main.ha +++ b/cmd/show-object/main.ha @@ -53,6 +53,41 @@ const msg = strings::fromutf8_unsafe(c.message); fmt::println(msg)!; }; +fn print_tag(t: git::tag) void = { + const tgt = git::oid_string(t.target)!; + defer free(tgt); + + let ty: str = ""; + switch (t.target_type) { + case git::objtype::OBJ_COMMIT => + ty = "commit"; + case git::objtype::OBJ_TREE => + ty = "tree"; + case git::objtype::OBJ_BLOB => + ty = "blob"; + case git::objtype::OBJ_TAG => + ty = "tag"; + }; + + const name = strings::fromutf8_unsafe(t.name); + + fmt::printfln("object {}", tgt)!; + fmt::printfln("type {}", ty)!; + fmt::printfln("tag {}", name)!; + + match (t.tagger) { + case let id: git::ident => + print_ident("tagger", id); + case void => + void; + }; + + fmt::println("")!; + + const msg = strings::fromutf8_unsafe(t.message); + fmt::println(msg)!; +}; + export fn main() void = { let repo_path: (str | void) = void; @@ -73,12 +108,7 @@ abort(); }; }; - if (len(cmd.args) != 1) { - usage(&cmd); - os::exit(2); - }; - - if (repo_path is void) { + if (len(cmd.args) != 1 || repo_path is void) { usage(&cmd); os::exit(2); }; @@ -127,5 +157,8 @@ git::tree_finish(t); case let c: git::commit => print_commit(c); git::commit_finish(c); + case let g: git::tag => + print_tag(g); + git::tag_finish(g); }; }; -- 2.48.1