Merge pull request #1743 from toonetown/robust-pkgutil-cleanup
Delete pkgutil directories that are really files.
This commit is contained in:
commit
33fa80944e
@ -26,6 +26,7 @@ module Hbc
|
||||
_deepest_path_first(pkgutil_bom_dirs).each do |dir|
|
||||
next unless dir.exist? && !MacOS.undeletable?(dir)
|
||||
_with_full_permissions(dir) do
|
||||
_delete_broken_file_dir(dir) && next
|
||||
_clean_broken_symlinks(dir)
|
||||
_clean_ds_store(dir)
|
||||
_rmdir(dir)
|
||||
@ -97,6 +98,13 @@ module Hbc
|
||||
end
|
||||
end
|
||||
|
||||
# Some pkgs incorrectly report files (generally nibs)
|
||||
# as directories; we remove these as files instead.
|
||||
def _delete_broken_file_dir(path)
|
||||
return unless path.file? && !path.symlink?
|
||||
@command.run!("/bin/rm", args: ["-f", "--", path], sudo: true)
|
||||
end
|
||||
|
||||
# Some pkgs leave broken symlinks hanging around; we clean them out before
|
||||
# attempting to rmdir to prevent extra cruft from lying around after
|
||||
# uninstall
|
||||
|
||||
@ -5,13 +5,13 @@ describe Hbc::Pkg do
|
||||
it "removes files and dirs referenced by the pkg" do
|
||||
pkg = Hbc::Pkg.new("my.fake.pkg", Hbc::NeverSudoSystemCommand)
|
||||
|
||||
some_files = Array.new(3) { Pathname(Tempfile.new("testfile").path) }
|
||||
some_files = Array.new(3) { Pathname.new(Tempfile.new("testfile").path) }
|
||||
pkg.stubs(:pkgutil_bom_files).returns some_files
|
||||
|
||||
some_specials = Array.new(3) { Pathname(Tempfile.new("testfile").path) }
|
||||
some_specials = Array.new(3) { Pathname.new(Tempfile.new("testfile").path) }
|
||||
pkg.stubs(:pkgutil_bom_specials).returns some_specials
|
||||
|
||||
some_dirs = Array.new(3) { Pathname(Dir.mktmpdir) }
|
||||
some_dirs = Array.new(3) { Pathname.new(Dir.mktmpdir) }
|
||||
pkg.stubs(:pkgutil_bom_dirs).returns some_dirs
|
||||
|
||||
pkg.stubs(:forget)
|
||||
@ -50,7 +50,7 @@ describe Hbc::Pkg do
|
||||
it "cleans broken symlinks, but leaves AOK symlinks" do
|
||||
pkg = Hbc::Pkg.new("my.fake.pkg", Hbc::NeverSudoSystemCommand)
|
||||
|
||||
fake_dir = Pathname(Dir.mktmpdir)
|
||||
fake_dir = Pathname.new(Dir.mktmpdir)
|
||||
fake_file = fake_dir.join("ima_file").tap { |path| FileUtils.touch(path) }
|
||||
|
||||
intact_symlink = fake_dir.join("intact_symlink").tap { |path| path.make_symlink(fake_file) }
|
||||
@ -68,10 +68,27 @@ describe Hbc::Pkg do
|
||||
fake_dir.must_be :exist?
|
||||
end
|
||||
|
||||
it "cleans files incorrectly reported as directories" do
|
||||
pkg = Hbc::Pkg.new("my.fake.pkg", Hbc::NeverSudoSystemCommand)
|
||||
|
||||
fake_dir = Pathname.new(Dir.mktmpdir)
|
||||
fake_file = fake_dir.join("ima_file_pretending_to_be_a_dir").tap { |path| FileUtils.touch(path) }
|
||||
|
||||
pkg.stubs(:pkgutil_bom_specials).returns([])
|
||||
pkg.stubs(:pkgutil_bom_files).returns([])
|
||||
pkg.stubs(:pkgutil_bom_dirs).returns([fake_file, fake_dir])
|
||||
pkg.stubs(:forget)
|
||||
|
||||
pkg.uninstall
|
||||
|
||||
fake_file.wont_be :exist?
|
||||
fake_dir.wont_be :exist?
|
||||
end
|
||||
|
||||
it "snags permissions on ornery dirs, but returns them afterwords" do
|
||||
pkg = Hbc::Pkg.new("my.fake.pkg", Hbc::NeverSudoSystemCommand)
|
||||
|
||||
fake_dir = Pathname(Dir.mktmpdir)
|
||||
fake_dir = Pathname.new(Dir.mktmpdir)
|
||||
|
||||
fake_file = fake_dir.join("ima_installed_file").tap { |path| FileUtils.touch(path) }
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user