aboutsummaryrefslogtreecommitdiff
path: root/git_misc.go
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-02-10 16:14:01 +0800
committerRunxi Yu <me@runxiyu.org>2025-02-10 16:14:01 +0800
commite8c9cd78b13d19bac6865b9fdb89fe1e4d55ee19 (patch)
tree35eafb6f1efa17ea162b9d0d684b9ccbc38ca7bf /git_misc.go
parentrepo_tree: Use x--- to indicate modes that aren't convertable (diff)
downloadforge-e8c9cd78b13d19bac6865b9fdb89fe1e4d55ee19.tar.gz
forge-e8c9cd78b13d19bac6865b9fdb89fe1e4d55ee19.tar.zst
forge-e8c9cd78b13d19bac6865b9fdb89fe1e4d55ee19.zip
git_misc: Abstract tree-listing into build_display_git_tree
Diffstat (limited to 'git_misc.go')
-rw-r--r--git_misc.go24
1 files changed, 24 insertions, 0 deletions
diff --git a/git_misc.go b/git_misc.go
new file mode 100644
index 0000000..c463cc4
--- /dev/null
+++ b/git_misc.go
@@ -0,0 +1,24 @@
+package main
+
+import "github.com/go-git/go-git/v5/plumbing/object"
+
+func build_display_git_tree(tree *object.Tree) []display_git_tree_entry_t {
+ display_git_tree := make([]display_git_tree_entry_t, 0)
+ for _, entry := range tree.Entries {
+ display_git_tree_entry := display_git_tree_entry_t{}
+ os_mode, err := entry.Mode.ToOSFileMode()
+ if err != nil {
+ display_git_tree_entry.Mode = "x---"
+ } else {
+ display_git_tree_entry.Mode = os_mode.String()[:4]
+ }
+ display_git_tree_entry.Is_file = entry.Mode.IsFile()
+ display_git_tree_entry.Size, err = tree.Size(entry.Name)
+ if err != nil {
+ display_git_tree_entry.Size = 0
+ }
+ display_git_tree_entry.Name = entry.Name
+ display_git_tree = append(display_git_tree, display_git_tree_entry)
+ }
+ return display_git_tree
+}