Skip to content

Commit 371df2f

Browse files
committed
fixup! Add merge options menu
1 parent 2268183 commit 371df2f

File tree

1 file changed

+34
-2
lines changed

1 file changed

+34
-2
lines changed

pkg/gui/controllers/files_controller.go

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,7 +1028,7 @@ func (self *FilesController) createStashMenu() error {
10281028
}
10291029

10301030
func (self *FilesController) openMergeConflictMenu(nodes []*filetree.FileNode) error {
1031-
normalizedNodes := normalisedSelectedNodes(nodes)
1031+
normalizedNodes := flattenSelectedNodesToFiles(nodes)
10321032

10331033
fileNodesWithConflicts := lo.Filter(normalizedNodes, func(node *filetree.FileNode, _ int) bool {
10341034
return node.File != nil && node.File.HasInlineMergeConflicts
@@ -1042,7 +1042,7 @@ func (self *FilesController) openMergeConflictMenu(nodes []*filetree.FileNode) e
10421042
}
10431043

10441044
func (self *FilesController) canOpenMergeConflictMenu(nodes []*filetree.FileNode) *types.DisabledReason {
1045-
normalizedNodes := normalisedSelectedNodes(nodes)
1045+
normalizedNodes := flattenSelectedNodesToFiles(nodes)
10461046

10471047
hasFileNodesWithConflicts := lo.SomeBy(normalizedNodes, func(node *filetree.FileNode) bool {
10481048
return node.File != nil && node.File.HasInlineMergeConflicts
@@ -1267,6 +1267,38 @@ func isDescendentOfSelectedNodes(node *filetree.FileNode, selectedNodes []*filet
12671267
return false
12681268
}
12691269

1270+
// BFS algorithm for expanding directories into their children,
1271+
// and for collecting the unique file nodes
1272+
func flattenSelectedNodesToFiles(selectedNodes []*filetree.FileNode) []*filetree.FileNode {
1273+
queue := append(make([]*filetree.FileNode, 0, len(selectedNodes)), selectedNodes...)
1274+
visited := make(map[string]bool)
1275+
var files []*filetree.FileNode
1276+
1277+
for len(queue) > 0 {
1278+
// pop node from queue
1279+
node := queue[0]
1280+
queue = queue[1:]
1281+
1282+
nodeID := node.ID()
1283+
if visited[nodeID] {
1284+
continue
1285+
}
1286+
visited[nodeID] = true
1287+
1288+
if node.File != nil {
1289+
// unique file node -> collect it
1290+
files = append(files, node)
1291+
continue
1292+
}
1293+
1294+
// directory node -> enqueue children
1295+
for _, ch := range node.Children {
1296+
queue = append(queue, &filetree.FileNode{Node: ch})
1297+
}
1298+
}
1299+
return files
1300+
}
1301+
12701302
func someNodesHaveUnstagedChanges(nodes []*filetree.FileNode) bool {
12711303
return lo.SomeBy(nodes, (*filetree.FileNode).GetHasUnstagedChanges)
12721304
}

0 commit comments

Comments
 (0)