Fix tree builder bugs related to dfs

This commit is contained in:
mcrakhman 2022-07-04 11:22:37 +02:00 committed by Mikhail Iudin
parent 70b2068f3f
commit 64a78a96cb
No known key found for this signature in database
GPG Key ID: FAAAA8BAABDFF1C0
2 changed files with 12 additions and 5 deletions

View File

@ -109,10 +109,12 @@ func (tb *ACLTreeBuilder) buildTreeFromStart(heads []string) (err error) {
return return
} }
func (tb *ACLTreeBuilder) dfsFromStart(stack []string) (buf []*Change, possibleRoots []*Change, err error) { func (tb *ACLTreeBuilder) dfsFromStart(heads []string) (buf []*Change, possibleRoots []*Change, err error) {
stack := make([]string, len(heads), len(heads)*2)
copy(stack, heads)
buf = make([]*Change, 0, len(stack)*2) buf = make([]*Change, 0, len(stack)*2)
uniqMap := make(map[string]struct{}) uniqMap := make(map[string]struct{})
for len(stack) > 0 { for len(stack) > 0 {
id := stack[len(stack)-1] id := stack[len(stack)-1]
stack = stack[:len(stack)-1] stack = stack[:len(stack)-1]

View File

@ -125,10 +125,12 @@ func (tb *TreeBuilder) buildTreeFromStart(heads []string) (err error) {
return return
} }
func (tb *TreeBuilder) dfsFromStart(stack []string) (buf []*Change, possibleRoots []*Change, err error) { func (tb *TreeBuilder) dfsFromStart(heads []string) (buf []*Change, possibleRoots []*Change, err error) {
stack := make([]string, len(heads), len(heads)*2)
copy(stack, heads)
buf = make([]*Change, 0, len(stack)*2) buf = make([]*Change, 0, len(stack)*2)
uniqMap := make(map[string]struct{}) uniqMap := make(map[string]struct{})
for len(stack) > 0 { for len(stack) > 0 {
id := stack[len(stack)-1] id := stack[len(stack)-1]
stack = stack[:len(stack)-1] stack = stack[:len(stack)-1]
@ -166,7 +168,10 @@ func (tb *TreeBuilder) buildTree(heads []string, breakpoint string) (err error)
return return
} }
func (tb *TreeBuilder) dfs(stack []string, breakpoint string) (buf []*Change, err error) { func (tb *TreeBuilder) dfs(heads []string, breakpoint string) (buf []*Change, err error) {
stack := make([]string, len(heads), len(heads)*2)
copy(stack, heads)
buf = make([]*Change, 0, len(stack)*2) buf = make([]*Change, 0, len(stack)*2)
uniqMap := map[string]struct{}{breakpoint: {}} uniqMap := map[string]struct{}{breakpoint: {}}
for len(stack) > 0 { for len(stack) > 0 {