diff options
| author | Nathan Toone | 2016-12-28 10:56:03 -0700 |
|---|---|---|
| committer | Nathan Toone | 2016-12-28 11:57:47 -0700 |
| commit | 6d318761d21e43ef8785ae4da24b8f6fdbd52db8 (patch) | |
| tree | 037d2b7ef2b2573be5b8d9c3ff8e35d9a56894b2 /Library/Homebrew/cask/test | |
| parent | 6648ff130781279de560ad1ac77379a6250d16e4 (diff) | |
| download | brew-6d318761d21e43ef8785ae4da24b8f6fdbd52db8.tar.bz2 | |
Delete pkgutil directories that are really files.
Sometimes, pkgutil will return actual files (usually .nib files) as if they were part of the directory. Microsoft Office is an example of this: in a recent update the file `/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/SharedSupport/Microsoft Error Reporting.app/Contents/Resources/en.lproj/MainWindowAlt.nib` was returning from `/usr/sbin/pkgutil --only-dirs --files com.microsoft.package.component` even though it should have been a file instead of a directory. This caused the `rmdir` command to fail.
This patch will check if we are trying to delete a “directory” that is really a “file” - and if we are, we just delete the file instead. This will allow packages that get in this state to be uninstalled. A unit test which can be run using `brew cask-tests` is also included.
Diffstat (limited to 'Library/Homebrew/cask/test')
| -rw-r--r-- | Library/Homebrew/cask/test/cask/pkg_test.rb | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/Library/Homebrew/cask/test/cask/pkg_test.rb b/Library/Homebrew/cask/test/cask/pkg_test.rb index 85a42356e..b99d49ddd 100644 --- a/Library/Homebrew/cask/test/cask/pkg_test.rb +++ b/Library/Homebrew/cask/test/cask/pkg_test.rb @@ -68,6 +68,23 @@ describe Hbc::Pkg do fake_dir.must_be :exist? end + it "chokes on directories that are really files" do + pkg = Hbc::Pkg.new("my.fake.pkg", Hbc::NeverSudoSystemCommand) + + fake_dir = Pathname(Dir.mktmpdir) + fake_file = fake_dir.join("ima_file").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) |
