Skip to content

Commit 25307a6

Browse files
committed
fixup! Add merge options menu
1 parent 2268183 commit 25307a6

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

pkg/gui/controllers/files_controller.go

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

10301030
func (self *FilesController) openMergeConflictMenu(nodes []*filetree.FileNode) error {
1031-
normalizedNodes := normalisedSelectedNodes(nodes)
1031+
normalizedNodes := flattenSelectedNodesToFiles(nodes)
1032+
1033+
for _, node := range normalizedNodes {
1034+
self.c.LogAction(node.GetPath())
1035+
}
10321036

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

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

10471051
hasFileNodesWithConflicts := lo.SomeBy(normalizedNodes, func(node *filetree.FileNode) bool {
10481052
return node.File != nil && node.File.HasInlineMergeConflicts
@@ -1267,6 +1271,38 @@ func isDescendentOfSelectedNodes(node *filetree.FileNode, selectedNodes []*filet
12671271
return false
12681272
}
12691273

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

0 commit comments

Comments
 (0)