TeapotSourceTeapotCommandVisualizeFiles

class Files

Visualize file-level dependencies from the build graph.

Nested

Definitions

def process(selection)

Process and generate the file dependency visualization.

Signature

parameter selection Select

The selection to visualize.

returns String

The generated Mermaid diagram.

Implementation

def process(selection)
	require "build/graph/walker"
	require "build/graph/visualization"
	
	context = selection.context
	chain = selection.chain
	environment = context.configuration.environment
	
	# Build the controller to get the root nodes
	controller = ::Build::Controller.build(limit: 1) do |builder|
		builder.add_chain(chain, [], environment)
	end
	
	# Create a process group for task execution
	group = ::Process::Group.new
	
	# Create a walker that traverses without building
	walker = ::Build::Graph::Walker.new do |walker, node, parent_task = nil|
		task_class = node.task_class(parent_task) || ::Build::Graph::Task
		task = task_class.new(walker, node, group)
		
		# Use traverse instead of visit to skip building:
		task.traverse
	end
	
	# Populate the walker by traversing from the root nodes
	walker.update(controller.nodes)
	
	# Generate the Mermaid diagram
	visualization = ::Build::Graph::Visualization.new
	diagram = visualization.generate(walker)
	
	if output_path = @options[:output_path]
		File.write(output_path, diagram)
	else
		$stdout.puts diagram
	end
	
	return diagram
end