From b1b744b33ab2e8c040ed75bfeb9f96bf4c0233c7 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 14 Sep 2025 03:22:21 +0800 Subject: [PATCH] Split object.ha --- git/obj_blob.ha | 8 ++++++++ git/obj_commit.ha | 16 ++++++++++++++++ git/obj_tree.ha | 19 +++++++++++++++++++ git/object.ha | 55 ----------------------------------------------------- git/person.ha | 11 +++++++++++ diff --git a/git/obj_blob.ha b/git/obj_blob.ha new file mode 100644 index 0000000000000000000000000000000000000000..db0d94fdec19d469747fdd2ad210d13d9ca99e13 --- /dev/null +++ b/git/obj_blob.ha @@ -0,0 +1,8 @@ +export type blob = struct { + oid: oid, + data: []u8, +}; +export fn blob_finish(b: blob) void = { + free(b.data); +}; + diff --git a/git/obj_commit.ha b/git/obj_commit.ha new file mode 100644 index 0000000000000000000000000000000000000000..c260ae5d4a3380919f5fc2b2da2c3a7d4e8bbf5a --- /dev/null +++ b/git/obj_commit.ha @@ -0,0 +1,16 @@ +export type commit = struct { + oid: oid, + tree: oid, + parents: []oid, + author: person, + committer: person, + message: []u8, + // other raw headers? +}; +export fn commit_finish(c: commit) void = { + free(c.parents); + person_finish(c.author); + person_finish(c.committer); + free(c.message); +}; + diff --git a/git/obj_tree.ha b/git/obj_tree.ha new file mode 100644 index 0000000000000000000000000000000000000000..4082b28e4a028dd1559574be571d14daf5b76a0a --- /dev/null +++ b/git/obj_tree.ha @@ -0,0 +1,19 @@ +export type tree = struct { + oid: oid, + entries: []tree_entry, +}; +export fn tree_finish(t: tree) void = { + for (let entry .. t.entries) { + tree_entry_finish(entry); + }; + free(t.entries); +}; + +export type tree_entry = struct { + mode: u32, + name: []u8, + oid: oid, +}; +export fn tree_entry_finish(te: tree_entry) void = { + free(te.name); +}; diff --git a/git/object.ha b/git/object.ha index 04100a8d86e7b9d74c8fd16e39299166724f25e7..8146d084b73688f3f4b602fe6b34903141f565f0 100644 --- a/git/object.ha +++ b/git/object.ha @@ -1,58 +1,3 @@ -export type blob = struct { - oid: oid, - data: []u8, -}; -export fn blob_finish(b: blob) void = { - free(b.data); -}; - -export type tree_entry = struct { - mode: u32, - name: []u8, - oid: oid, -}; -export fn tree_entry_finish(te: tree_entry) void = { - free(te.name); -}; - -export type tree = struct { - oid: oid, - entries: []tree_entry, -}; -export fn tree_finish(t: tree) void = { - for (let entry .. t.entries) { - tree_entry_finish(entry); - }; - free(t.entries); -}; - -export type person = struct { - name: []u8, - email: []u8, - when: i64, - ofs: i32, -}; -export fn person_finish(p: person) void = { - free(p.name); - free(p.email); -}; - -export type commit = struct { - oid: oid, - tree: oid, - parents: []oid, - author: person, - committer: person, - message: []u8, - // other raw headers? -}; -export fn commit_finish(c: commit) void = { - free(c.parents); - person_finish(c.author); - person_finish(c.committer); - free(c.message); -}; - export type object = (blob | tree | commit); export fn object_finish(o: object) void = { match (o) { diff --git a/git/person.ha b/git/person.ha new file mode 100644 index 0000000000000000000000000000000000000000..53b3b5d89de93ea177ab1020d9eb6c712f93da17 --- /dev/null +++ b/git/person.ha @@ -0,0 +1,11 @@ +export type person = struct { + name: []u8, + email: []u8, + when: i64, + ofs: i32, +}; +export fn person_finish(p: person) void = { + free(p.name); + free(p.email); +}; + -- 2.48.1