code-preloader/src/cli.cr

86 lines
2.7 KiB
Crystal
Raw Normal View History

2023-12-29 15:53:54 +01:00
2023-12-29 14:13:20 +01:00
# vim: set ts=2 sw=2 et ft=crystal:
require "file"
require "option_parser"
2023-12-31 13:47:16 +01:00
require "magic"
2023-12-29 14:13:20 +01:00
2023-12-29 15:53:54 +01:00
require "./config"
2024-01-02 12:32:00 +01:00
require "./filelist"
2023-12-29 15:53:54 +01:00
2023-12-29 14:13:20 +01:00
# The CodePreloader module organizes classes and methods related to preloading code files.
module CodePreloader
# The Cli class handles command-line interface operations for the CodePreloader.
class Cli
2023-12-29 15:53:54 +01:00
@config : Config
2023-12-29 14:13:20 +01:00
# Initializes the Cli class with default values.
2023-12-29 15:53:54 +01:00
def initialize(args)
2023-12-29 14:13:20 +01:00
@output_file_path = ""
2023-12-29 15:53:54 +01:00
@config = Config.new()
@config.parse_arguments(args)
2023-12-29 14:13:20 +01:00
end
# Executes the main functionality of the CLI application.
def exec
2024-01-02 12:32:00 +01:00
# get local values for typing
output_file_path = @output_file_path
repository_path_list = @config.repository_path_list
header_prompt_file_path = @config.header_prompt_file_path
footer_prompt_file_path = @config.footer_prompt_file_path
filelist = FileList.new()
filelist.add(repository_path_list)
@config.ignore_list.each do |ignore_pattern|
filelist.reject { |path| !!(path =~ Regex.new(ignore_pattern)) }
2023-12-29 14:13:20 +01:00
end
2024-01-02 12:32:00 +01:00
if !header_prompt_file_path.nil?
STDERR.puts "Loading header prompt from: #{header_prompt_file_path}"
header_prompt = File.read(header_prompt_file_path)
2023-12-29 14:13:20 +01:00
end
2024-01-02 12:32:00 +01:00
if !footer_prompt_file_path.nil?
STDERR.puts "Loading footer prompt from: #{footer_prompt_file_path}"
footer_prompt = File.read(footer_prompt_file_path)
end
2023-12-29 14:57:11 +01:00
2024-01-02 12:32:00 +01:00
unless output_file_path.nil? || output_file_path.try(&.empty?) || (output_file_path != "-")
output_file = File.open(output_file_path, "w")
invalid_output_file = false
end
2023-12-29 14:57:11 +01:00
invalid_output_file = true
output_file = STDOUT
2024-01-02 12:32:00 +01:00
header_prompt = ""
footer_prompt = ""
2023-12-29 14:13:20 +01:00
2023-12-29 15:53:54 +01:00
output_file.puts header_prompt if @config.header_prompt_file_path
2023-12-29 14:57:11 +01:00
STDERR.puts "Processing repository: #{@config.repository_path_list}"
2024-01-02 12:32:00 +01:00
filelist.each do |file_path|
process_file(file_path, output_file)
end
2023-12-29 14:57:11 +01:00
2023-12-29 15:53:54 +01:00
output_file.puts footer_prompt if @config.footer_prompt_file_path
2023-12-29 14:57:11 +01:00
output_file.close if !invalid_output_file
2024-01-02 12:32:00 +01:00
STDERR.puts "Processing completed. Output written to: #{invalid_output_file ? "stdout" : output_file_path}"
2023-12-29 14:13:20 +01:00
rescue e : Exception
STDERR.puts "An error occurred during execution: #{e.message}"
exit(1)
end
2024-01-02 12:32:00 +01:00
private def process_file(file_path : String, output_file : IO::FileDescriptor)
2023-12-31 13:47:16 +01:00
fh = File.open(file_path)
mime = Magic.mime_type.of(fh)
2024-01-02 12:32:00 +01:00
output_file.puts "@@ File \"#{file_path}\" (Mime-Type: #{mime.inspect})"
2023-12-29 14:13:20 +01:00
output_file.puts ""
2023-12-31 13:47:16 +01:00
output_file.puts(fh.gets_to_end)
2023-12-29 14:13:20 +01:00
output_file.puts ""
2023-12-31 13:47:16 +01:00
fh.close
2023-12-29 14:13:20 +01:00
end
end
end