Skip to content

Commit b03405e

Browse files
committed
More efficient way
1 parent e159adc commit b03405e

File tree

2 files changed

+30
-28
lines changed

2 files changed

+30
-28
lines changed

tree.go

+5
Original file line numberDiff line numberDiff line change
@@ -147,5 +147,10 @@ func (t *Tree) ListEntries() (Entries, error) {
147147
return nil, err
148148
}
149149
t.entries, err = parseTreeData(t, stdout)
150+
151+
for _, entry := range t.entries {
152+
entry.parseLastUniqueEntry()
153+
}
154+
150155
return t.entries, err
151156
}

tree_entry.go

+25-28
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,23 @@ type TreeEntry struct {
3535

3636
ptree *Tree
3737

38+
lastUniqueEntry *TreeEntry
39+
lastUniquePath string
40+
3841
commited bool
3942

4043
size int64
4144
sized bool
4245
}
4346

47+
func (te *TreeEntry) LastUniqueEntry() *TreeEntry {
48+
return te.lastUniqueEntry
49+
}
50+
51+
func (te *TreeEntry) LastUniquePath() string {
52+
return te.lastUniquePath
53+
}
54+
4455
func (te *TreeEntry) Name() string {
4556
return te.name
4657
}
@@ -66,37 +77,23 @@ func (te *TreeEntry) IsSubModule() bool {
6677
return te.mode == ENTRY_MODE_COMMIT
6778
}
6879

69-
func (te *TreeEntry) JumpableName() string {
70-
entry := te
71-
for entry.IsJumpableDir() {
72-
tree, _ := entry.ptree.SubTree(entry.name)
73-
entries, _ := tree.ListEntries()
74-
entry = entries[0]
75-
}
76-
return entry.name
77-
}
78-
func (te *TreeEntry) JumpablePath() string {
79-
path := ""
80-
entry := te
81-
for entry.IsJumpableDir() {
82-
path += entry.name + "/"
83-
tree, _ := entry.ptree.SubTree(entry.name)
84-
entries, _ := tree.ListEntries()
85-
entry = entries[0]
86-
}
87-
return path
88-
}
80+
func (te *TreeEntry) parseLastUniqueEntry() *TreeEntry {
81+
te.lastUniqueEntry = te
82+
te.lastUniquePath = ""
8983

90-
func (te *TreeEntry) IsJumpableDir() bool {
91-
if te.IsSubModule() || !te.IsDir() {
92-
return false
84+
if te.lastUniqueEntry.IsSubModule() || !te.lastUniqueEntry.IsDir() {
85+
return te.lastUniqueEntry
9386
}
94-
tree, err := te.ptree.SubTree(te.name)
95-
if err != nil {
96-
return false
87+
88+
tree, _ := te.lastUniqueEntry.ptree.SubTree(te.lastUniqueEntry.name)
89+
entries, _ := tree.ListEntries()
90+
for !(te.lastUniqueEntry.IsSubModule() || !te.lastUniqueEntry.IsDir()) && len(entries) == 1 {
91+
te.lastUniquePath += te.lastUniqueEntry.name + "/"
92+
te.lastUniqueEntry = entries[0]
93+
tree, _ = te.lastUniqueEntry.ptree.SubTree(te.lastUniqueEntry.name)
94+
entries, _ = tree.ListEntries()
9795
}
98-
entries, err := tree.ListEntries()
99-
return len(entries) == 1
96+
return te.lastUniqueEntry
10097
}
10198

10299
func (te *TreeEntry) IsDir() bool {

0 commit comments

Comments
 (0)