From 2dfb478e3678c2b6b02052013fdda1c47467163b Mon Sep 17 00:00:00 2001 From: Kasi Date: Fri, 8 Jun 2018 11:33:29 +0100 Subject: [PATCH 1/4] Exposed TreeEntry.mode, changed EntryMode to hex. --- tree_entry.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/tree_entry.go b/tree_entry.go index 6201eef8f..350776e8f 100644 --- a/tree_entry.go +++ b/tree_entry.go @@ -18,15 +18,15 @@ type EntryMode int // one of these. const ( // EntryModeBlob - EntryModeBlob EntryMode = 0100644 + EntryModeBlob EntryMode = 0x0100644 // EntryModeExec - EntryModeExec EntryMode = 0100755 + EntryModeExec EntryMode = 0x0100755 // EntryModeSymlink - EntryModeSymlink EntryMode = 0120000 + EntryModeSymlink EntryMode = 0x0120000 // EntryModeCommit - EntryModeCommit EntryMode = 0160000 + EntryModeCommit EntryMode = 0x0160000 // EntryModeTree - EntryModeTree EntryMode = 0040000 + EntryModeTree EntryMode = 0x0040000 ) // TreeEntry the leaf in the git tree @@ -50,6 +50,10 @@ func (te *TreeEntry) Name() string { return te.name } +func (te *TreeEntry) Mode() EntryMode { + return te.mode +} + // Size returns the size of the entry func (te *TreeEntry) Size() int64 { if te.IsDir() { From 7f4a5b66a1fc25d1c81679e7f275c0ebf4327107 Mon Sep 17 00:00:00 2001 From: Kasi Date: Fri, 8 Jun 2018 11:49:25 +0100 Subject: [PATCH 2/4] Added reference parsing (HEAD, HEAD~1, etc) for trees --- repo_tree.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/repo_tree.go b/repo_tree.go index 6e3843f7e..146b919d7 100644 --- a/repo_tree.go +++ b/repo_tree.go @@ -18,6 +18,15 @@ func (repo *Repository) getTree(id SHA1) (*Tree, error) { // GetTree find the tree object in the repository. func (repo *Repository) GetTree(idStr string) (*Tree, error) { + if len(idStr) != 40 { + res, err := NewCommand("rev-parse", idStr).RunInDir(repo.Path) + if err != nil { + return nil, err; + } + if len(res) > 0 { + idStr = res[:len(res)-1] + } + } id, err := NewIDFromString(idStr) if err != nil { return nil, err From 4e5a911246f76cf101ccb7dea7e8bf3e1f9ad069 Mon Sep 17 00:00:00 2001 From: Kasi Date: Fri, 8 Jun 2018 18:25:48 +0100 Subject: [PATCH 3/4] Added missing description --- tree_entry.go | 1 + 1 file changed, 1 insertion(+) diff --git a/tree_entry.go b/tree_entry.go index 350776e8f..ead0d4f5d 100644 --- a/tree_entry.go +++ b/tree_entry.go @@ -50,6 +50,7 @@ func (te *TreeEntry) Name() string { return te.name } +// Mode returns the mode of the entry func (te *TreeEntry) Mode() EntryMode { return te.mode } From 537cbeee9dc8b0e7c16be8b741545f80fb77d34b Mon Sep 17 00:00:00 2001 From: Kasi Date: Sat, 9 Jun 2018 16:10:53 +0100 Subject: [PATCH 4/4] Added Tree.ListEntriesRecursive() - utilizes the git ls-tree -r command --- tree.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tree.go b/tree.go index 4654dac30..b67bf5584 100644 --- a/tree.go +++ b/tree.go @@ -70,3 +70,17 @@ func (t *Tree) ListEntries() (Entries, error) { t.entries, err = parseTreeEntries(stdout, t) return t.entries, err } + +// ListEntriesRecursive returns all entries of current tree recursively including all subtrees +func (t *Tree) ListEntriesRecursive() (Entries, error) { + if t.entriesParsed { + return t.entries, nil + } + stdout, err := NewCommand("ls-tree", "-t", "-r", t.ID.String()).RunInDirBytes(t.repo.Path) + + if err != nil { + return nil, err + } + t.entries, err = parseTreeEntries(stdout, t) + return t.entries, err +}