88 lines
2.3 KiB
Ruby
88 lines
2.3 KiB
Ruby
require "optparse"
|
|
|
|
module Picop
|
|
class CLI
|
|
def self.run(argv = ARGV)
|
|
command = argv.shift
|
|
case command
|
|
when 'scan'
|
|
options = {}
|
|
OptionParser.new do |opts|
|
|
opts.banner = "Usage: picop scan [options] DIRECTORY"
|
|
opts.on('-v', '--verbose', 'Run verbosely') { |v| options[:verbose] = v }
|
|
end.parse!(argv)
|
|
|
|
dir = argv.first || '.'
|
|
Picop::Scanner.scan(dir, options)
|
|
|
|
when 'sign'
|
|
OptionParser.new do |opts|
|
|
opts.banner = "Usage: picop sign FILE"
|
|
end.parse!(argv)
|
|
|
|
file = argv.first
|
|
Picop::SourceFile.new(file).sign
|
|
|
|
when 'checksum'
|
|
OptionParser.new do |opts|
|
|
opts.banner = "Usage: picop checksum FILE"
|
|
end.parse!(argv)
|
|
file = argv.first
|
|
puts Picop::SourceFile.new(file).checksum
|
|
|
|
when 'verify'
|
|
OptionParser.new do |opts|
|
|
opts.banner = "Usage: picop sign FILE"
|
|
end.parse!(argv)
|
|
|
|
path = argv.first
|
|
source = SourceFile.new(path)
|
|
|
|
if source.metadata['content_checksum'].nil?
|
|
puts "⚠️ No checksum found in #{path}"
|
|
puts "Run 'picop sign #{path}' to add one"
|
|
exit 1
|
|
end
|
|
|
|
unless source.verify
|
|
puts "❌ Checksum verification failed for #{path}"
|
|
puts "Expected: #{source.metadata['content_checksum']}"
|
|
puts "Got: #{source.checksum}"
|
|
exit 1
|
|
end
|
|
|
|
puts "✅ #{path} verified successfully"
|
|
|
|
when 'show'
|
|
OptionParser.new do |opts|
|
|
opts.banner = "Usage: picop show FILE|DIRECTORY"
|
|
end.parse!(argv)
|
|
|
|
path = argv.first
|
|
Picop.show(path)
|
|
|
|
when 'update'
|
|
options = {}
|
|
OptionParser.new do |opts|
|
|
opts.banner = "Usage: picop update [options] FILE"
|
|
opts.on('-f', '--force', 'Force update') { |f| options[:force] = f }
|
|
end.parse!(argv)
|
|
|
|
file = argv.first
|
|
Picop.update(file, options)
|
|
|
|
else
|
|
puts "Unknown command: #{command}"
|
|
puts "Available commands: scan, sign, show, update"
|
|
exit 1
|
|
end
|
|
rescue OptionParser::InvalidOption => e
|
|
puts e.message
|
|
exit 1
|
|
rescue => e
|
|
puts "Error: #{e.message}"
|
|
puts e.backtrace if ENV['DEBUG']
|
|
exit 1
|
|
end
|
|
end
|
|
end |