uninstall operation should list removed entities in verbose mode - close #102

This commit is contained in:
Josh Holtrop 2019-04-27 21:28:56 -04:00
parent fd054a07c4
commit 49e1bca1f7
3 changed files with 63 additions and 0 deletions

View File

@ -167,15 +167,21 @@ module Rscons
def uninstall def uninstall
cache = Cache.instance cache = Cache.instance
cache.targets(true).each do |target| cache.targets(true).each do |target|
cache.remove_target(target)
next unless File.exists?(target)
puts "Removing #{target}" if verbose
FileUtils.rm_f(target) FileUtils.rm_f(target)
end end
# remove all created directories if they are empty # remove all created directories if they are empty
cache.directories(true).sort {|a, b| b.size <=> a.size}.each do |directory| cache.directories(true).sort {|a, b| b.size <=> a.size}.each do |directory|
cache.remove_directory(directory)
next unless File.directory?(directory) next unless File.directory?(directory)
if (Dir.entries(directory) - ['.', '..']).empty? if (Dir.entries(directory) - ['.', '..']).empty?
puts "Removing #{directory}" if verbose
Dir.rmdir(directory) rescue nil Dir.rmdir(directory) rescue nil
end end
end end
cache.write
0 0
end end

View File

@ -320,6 +320,20 @@ module Rscons
end.map(&:first) end.map(&:first)
end end
# Remove a target from the cache.
#
# @return [void]
def remove_target(target)
@cache["targets"].delete(target)
end
# Remove a directory from the cache.
#
# @return [void]
def remove_directory(directory)
@cache["directories"].delete(directory)
end
private private
# Return a String key based on the target name to use in the on-disk cache. # Return a String key based on the target name to use in the on-disk cache.

View File

@ -2207,11 +2207,54 @@ EOF
result = run_rscons(rsconscript: "install.rb", op: %W[uninstall]) result = run_rscons(rsconscript: "install.rb", op: %W[uninstall])
expect(result.stderr).to eq "" expect(result.stderr).to eq ""
expect(result.stdout).to_not match /Removing/
expect(File.exists?("#{prefix}/bin/program.exe")).to be_falsey expect(File.exists?("#{prefix}/bin/program.exe")).to be_falsey
expect(File.exists?("build/e.1/src/one/one.o")).to be_truthy expect(File.exists?("build/e.1/src/one/one.o")).to be_truthy
expect(Dir.entries(prefix)).to match_array %w[. ..] expect(Dir.entries(prefix)).to match_array %w[. ..]
end end
end end
it "prints removed files and directories when running verbosely" do
test_dir "typical"
Dir.mktmpdir do |prefix|
result = run_rscons(rsconscript: "install.rb", op: %W[configure --prefix=#{prefix}])
expect(result.stderr).to eq ""
result = run_rscons(rsconscript: "install.rb", op: %W[install])
expect(result.stderr).to eq ""
result = run_rscons(rsconscript: "install.rb", op: %W[uninstall -v])
expect(result.stderr).to eq ""
expect(result.stdout).to match %r{Removing #{prefix}/bin/program.exe}
expect(File.exists?("#{prefix}/bin/program.exe")).to be_falsey
expect(Dir.entries(prefix)).to match_array %w[. ..]
end
end
it "removes cache entries when uninstalling" do
test_dir "typical"
Dir.mktmpdir do |prefix|
result = run_rscons(rsconscript: "install.rb", op: %W[configure --prefix=#{prefix}])
expect(result.stderr).to eq ""
result = run_rscons(rsconscript: "install.rb", op: %W[install])
expect(result.stderr).to eq ""
result = run_rscons(rsconscript: "install.rb", op: %W[uninstall -v])
expect(result.stderr).to eq ""
expect(result.stdout).to match %r{Removing #{prefix}/bin/program.exe}
expect(File.exists?("#{prefix}/bin/program.exe")).to be_falsey
expect(Dir.entries(prefix)).to match_array %w[. ..]
FileUtils.mkdir_p("#{prefix}/bin")
File.open("#{prefix}/bin/program.exe", "w") {|fh| fh.write("hi")}
result = run_rscons(rsconscript: "install.rb", op: %W[uninstall -v])
expect(result.stderr).to eq ""
expect(result.stdout).to_not match /Removing/
end
end
end end
end end