10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/port_purge/cli.rb', line 10
def self.execute(stdout, arguments=[])
options = OpenStruct.new
options.filter = nil
opts = OptionParser.new do |opts|
opts.banner = "Usage: port_purge [-f filter]"
opts.on("-f", "--filter FILTER","FILTER ports to purge") do |filter|
options.filter = filter
end
end
opts.parse!
@to_remove = []
@keep = []
begin
@keep = YAML::load(File.read(DOTFILEPATH)) if File.readable?(DOTFILEPATH)
rescue ArgumentError
$stderr.puts("Badly formed .port_upgrade_ports file. Skipping.")
end
@pdb = PortsDB.new
ports = @pdb.db.query('select port from ports').collect{|p| p[0]}
deps = @pdb.db.query('select dep from deps').collect{|p| p[0]}
$stderr.puts "Leaves:"
diff = (ports-deps).sort
$stderr.puts "Applying filter /#{options.filter}/" unless options.filter.nil?
diff.each do |leaf|
next if @keep.include? leaf
unless options.filter.nil?
next unless Regexp.compile(options.filter).match(leaf)
end
$stderr.print leaf
$stderr.print " Remove? (Y/N/S/Q)"
reply = $stdin.gets
case reply.strip
when /^(yes|y)$/i
@to_remove << leaf
when /^(quit|q)$/i
exit -1
when /^(skip|s)$/i
break
$stderr.puts
else
@keep << leaf
end
end
File.open(DOTFILEPATH,'w') do |f|
f.write(@keep.to_yaml)
end
exit 0 unless @to_remove.size > 0
$stderr.print "Really remove #{@to_remove.join(" ")} ? (type yes) "
reply = $stdin.gets
if reply =~ /^yes$/i
@to_remove.each do |leaf|
s = "port uninstall #{leaf}"
$stderr.puts s
system(s)
end
else
$stderr.puts "Exiting"
exit -1
end
end
|