aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMarkus Reiter2017-02-20 14:52:12 +0100
committerGitHub2017-02-20 14:52:12 +0100
commitafb66d0c69bb7cf691125d082d9e45724d479723 (patch)
treec42231b59b8aa43c0d4afb98adb1ab4faef63a13 /Library
parente097d77577243ab593c0e7fee9c8d54e5a3980d7 (diff)
parent92fe130cbb1faef375c6cb86bae02551882fd72d (diff)
downloadbrew-afb66d0c69bb7cf691125d082d9e45724d479723.tar.bz2
Merge pull request #2042 from mxl/expand-glob
Expand glob patterns.
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/cask/lib/hbc/artifact/uninstall_base.rb23
-rw-r--r--Library/Homebrew/cask/spec/cask/artifact/uninstall_spec.rb36
-rw-r--r--Library/Homebrew/cask/spec/cask/artifact/zap_spec.rb36
-rw-r--r--Library/Homebrew/test/support/fixtures/cask/Casks/with-installable.rb7
-rw-r--r--Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-delete.rb5
-rw-r--r--Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-rmdir.rb2
-rw-r--r--Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-trash.rb5
-rw-r--r--Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-delete.rb5
-rw-r--r--Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-rmdir.rb2
-rw-r--r--Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-trash.rb5
-rw-r--r--Library/Homebrew/test/support/fixtures/cask/empty_directory/.gitignore0
11 files changed, 91 insertions, 35 deletions
diff --git a/Library/Homebrew/cask/lib/hbc/artifact/uninstall_base.rb b/Library/Homebrew/cask/lib/hbc/artifact/uninstall_base.rb
index cc47e05ad..75d210931 100644
--- a/Library/Homebrew/cask/lib/hbc/artifact/uninstall_base.rb
+++ b/Library/Homebrew/cask/lib/hbc/artifact/uninstall_base.rb
@@ -34,6 +34,10 @@ module Hbc
end
end
+ def self.expand_glob(path_strings)
+ path_strings.flat_map(&Pathname.method(:glob))
+ end
+
def self.remove_relative_path_strings(action, path_strings)
relative = path_strings.map do |path_string|
path_string if %r{/\.\.(?:/|\Z)}.match(path_string) || !%r{\A/}.match(path_string)
@@ -54,6 +58,13 @@ module Hbc
path_strings - undeletable
end
+ def self.prepare_path_strings(action, path_strings, expand_tilde)
+ path_strings = expand_path_strings(path_strings) if expand_tilde
+ path_strings = remove_relative_path_strings(action, path_strings)
+ path_strings = expand_glob(path_strings)
+ remove_undeletable_path_strings(action, path_strings)
+ end
+
def dispatch_uninstall_directives(expand_tilde: true)
directives_set = @cask.artifacts[stanza]
ohai "Running #{stanza} process for #{@cask}; your password may be necessary"
@@ -225,9 +236,7 @@ module Hbc
def uninstall_delete(directives, expand_tilde = true)
Array(directives[:delete]).concat(Array(directives[:trash])).flatten.each_slice(PATH_ARG_SLICE_SIZE) do |path_slice|
ohai "Removing files: #{path_slice.utf8_inspect}"
- path_slice = self.class.expand_path_strings(path_slice) if expand_tilde
- path_slice = self.class.remove_relative_path_strings(:delete, path_slice)
- path_slice = self.class.remove_undeletable_path_strings(:delete, path_slice)
+ path_slice = self.class.prepare_path_strings(:delete, path_slice, expand_tilde)
@command.run!("/bin/rm", args: path_slice.unshift("-rf", "--"), sudo: true)
end
end
@@ -238,11 +247,9 @@ module Hbc
uninstall_delete(directives, expand_tilde)
end
- def uninstall_rmdir(directives, expand_tilde = true)
- Array(directives[:rmdir]).flatten.each do |directory|
- directory = self.class.expand_path_strings([directory]).first if expand_tilde
- directory = self.class.remove_relative_path_strings(:rmdir, [directory]).first
- directory = self.class.remove_undeletable_path_strings(:rmdir, [directory]).first
+ def uninstall_rmdir(directories, expand_tilde = true)
+ action = :rmdir
+ self.class.prepare_path_strings(action, Array(directories[action]).flatten, expand_tilde).each do |directory|
next if directory.to_s.empty?
ohai "Removing directory if empty: #{directory.to_s.utf8_inspect}"
directory = Pathname.new(directory)
diff --git a/Library/Homebrew/cask/spec/cask/artifact/uninstall_spec.rb b/Library/Homebrew/cask/spec/cask/artifact/uninstall_spec.rb
index a38ed903e..e3595621d 100644
--- a/Library/Homebrew/cask/spec/cask/artifact/uninstall_spec.rb
+++ b/Library/Homebrew/cask/spec/cask/artifact/uninstall_spec.rb
@@ -7,7 +7,17 @@ describe Hbc::Artifact::Uninstall do
Hbc::Artifact::Uninstall.new(cask, command: Hbc::FakeSystemCommand)
}
+ let(:absolute_path) { Pathname.new("#{TEST_TMPDIR}/absolute_path") }
+ let(:path_with_tilde) { Pathname.new("#{TEST_TMPDIR}/path_with_tilde") }
+ let(:glob_path1) { Pathname.new("#{TEST_TMPDIR}/glob_path1") }
+ let(:glob_path2) { Pathname.new("#{TEST_TMPDIR}/glob_path2") }
+
before(:each) do
+ FileUtils.touch(absolute_path)
+ FileUtils.touch(path_with_tilde)
+ FileUtils.touch(glob_path1)
+ FileUtils.touch(glob_path2)
+ ENV["HOME"] = TEST_TMPDIR
shutup do
InstallHelper.install_without_artifacts(cask)
end
@@ -233,8 +243,10 @@ describe Hbc::Artifact::Uninstall do
it "can uninstall" do
Hbc::FakeSystemCommand.expects_command(
sudo(%w[/bin/rm -rf --],
- Pathname.new("/permissible/absolute/path"),
- Pathname.new("~/permissible/path/with/tilde").expand_path),
+ absolute_path,
+ path_with_tilde,
+ glob_path1,
+ glob_path2),
)
subject
@@ -247,8 +259,10 @@ describe Hbc::Artifact::Uninstall do
it "can uninstall" do
Hbc::FakeSystemCommand.expects_command(
sudo(%w[/bin/rm -rf --],
- Pathname.new("/permissible/absolute/path"),
- Pathname.new("~/permissible/path/with/tilde").expand_path),
+ absolute_path,
+ path_with_tilde,
+ glob_path1,
+ glob_path2),
)
subject
@@ -257,15 +271,23 @@ describe Hbc::Artifact::Uninstall do
context "when using rmdir" do
let(:cask) { Hbc::CaskLoader.load_from_file(TEST_FIXTURE_DIR/"cask/Casks/with-uninstall-rmdir.rb") }
- let(:dir_pathname) { Pathname.new("#{TEST_FIXTURE_DIR}/cask/empty_directory") }
+ let(:empty_directory_path) { Pathname.new("#{TEST_TMPDIR}/empty_directory_path") }
+
+ before(:each) do
+ empty_directory_path.mkdir
+ end
+
+ after(:each) do
+ empty_directory_path.rmdir
+ end
it "can uninstall" do
Hbc::FakeSystemCommand.expects_command(
- sudo(%w[/bin/rm -f --], dir_pathname.join(".DS_Store")),
+ sudo(%w[/bin/rm -f --], empty_directory_path/".DS_Store"),
)
Hbc::FakeSystemCommand.expects_command(
- sudo(%w[/bin/rmdir --], dir_pathname),
+ sudo(%w[/bin/rmdir --], empty_directory_path),
)
subject
diff --git a/Library/Homebrew/cask/spec/cask/artifact/zap_spec.rb b/Library/Homebrew/cask/spec/cask/artifact/zap_spec.rb
index 50e132bfa..c49cebbb8 100644
--- a/Library/Homebrew/cask/spec/cask/artifact/zap_spec.rb
+++ b/Library/Homebrew/cask/spec/cask/artifact/zap_spec.rb
@@ -8,7 +8,17 @@ describe Hbc::Artifact::Zap do
Hbc::Artifact::Zap.new(cask, command: Hbc::FakeSystemCommand)
}
+ let(:absolute_path) { Pathname.new("#{TEST_TMPDIR}/absolute_path") }
+ let(:path_with_tilde) { Pathname.new("#{TEST_TMPDIR}/path_with_tilde") }
+ let(:glob_path1) { Pathname.new("#{TEST_TMPDIR}/glob_path1") }
+ let(:glob_path2) { Pathname.new("#{TEST_TMPDIR}/glob_path2") }
+
before(:each) do
+ FileUtils.touch(absolute_path)
+ FileUtils.touch(path_with_tilde)
+ FileUtils.touch(glob_path1)
+ FileUtils.touch(glob_path2)
+ ENV["HOME"] = TEST_TMPDIR
shutup do
InstallHelper.install_without_artifacts(cask)
end
@@ -234,8 +244,10 @@ describe Hbc::Artifact::Zap do
it "can zap" do
Hbc::FakeSystemCommand.expects_command(
sudo(%w[/bin/rm -rf --],
- Pathname.new("/permissible/absolute/path"),
- Pathname.new("~/permissible/path/with/tilde").expand_path),
+ absolute_path,
+ path_with_tilde,
+ glob_path1,
+ glob_path2),
)
subject
@@ -248,8 +260,10 @@ describe Hbc::Artifact::Zap do
it "can zap" do
Hbc::FakeSystemCommand.expects_command(
sudo(%w[/bin/rm -rf --],
- Pathname.new("/permissible/absolute/path"),
- Pathname.new("~/permissible/path/with/tilde").expand_path),
+ absolute_path,
+ path_with_tilde,
+ glob_path1,
+ glob_path2),
)
subject
@@ -258,15 +272,23 @@ describe Hbc::Artifact::Zap do
context "when using rmdir" do
let(:cask) { Hbc::CaskLoader.load_from_file(TEST_FIXTURE_DIR/"cask/Casks/with-zap-rmdir.rb") }
- let(:dir_pathname) { Pathname.new("#{TEST_FIXTURE_DIR}/cask/empty_directory") }
+ let(:empty_directory_path) { Pathname.new("#{TEST_TMPDIR}/empty_directory_path") }
+
+ before(:each) do
+ empty_directory_path.mkdir
+ end
+
+ after(:each) do
+ empty_directory_path.rmdir
+ end
it "can zap" do
Hbc::FakeSystemCommand.expects_command(
- sudo(%w[/bin/rm -f --], dir_pathname.join(".DS_Store")),
+ sudo(%w[/bin/rm -f --], empty_directory_path/".DS_Store"),
)
Hbc::FakeSystemCommand.expects_command(
- sudo(%w[/bin/rmdir --], dir_pathname),
+ sudo(%w[/bin/rmdir --], empty_directory_path),
)
subject
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/with-installable.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/with-installable.rb
index b0ad0c626..8416f3f88 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/with-installable.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/with-installable.rb
@@ -11,10 +11,11 @@ cask 'with-installable' do
quit: 'my.fancy.package.app',
login_item: 'Fancy',
delete: [
- '/permissible/absolute/path',
- '~/permissible/path/with/tilde',
+ "#{TEST_TMPDIR}/absolute_path",
+ '~/path_with_tilde',
+ "#{TEST_TMPDIR}/glob_path*",
'impermissible/relative/path',
'/another/impermissible/../relative/path',
],
- rmdir: "#{TEST_FIXTURE_DIR}/cask/empty_directory"
+ rmdir: "#{TEST_TMPDIR}/empty_directory_path"
end
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-delete.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-delete.rb
index cba51f18f..c7d2e4767 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-delete.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-delete.rb
@@ -8,8 +8,9 @@ cask 'with-uninstall-delete' do
pkg 'Fancy.pkg'
uninstall delete: [
- '/permissible/absolute/path',
- '~/permissible/path/with/tilde',
+ "#{TEST_TMPDIR}/absolute_path",
+ '~/path_with_tilde',
+ "#{TEST_TMPDIR}/glob_path*",
'impermissible/relative/path',
'/another/impermissible/../relative/path',
]
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-rmdir.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-rmdir.rb
index 252d81994..8ded5b835 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-rmdir.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-rmdir.rb
@@ -7,5 +7,5 @@ cask 'with-uninstall-rmdir' do
pkg 'MyFancyPkg/Fancy.pkg'
- uninstall rmdir: "#{TEST_FIXTURE_DIR}/cask/empty_directory"
+ uninstall rmdir: "#{TEST_TMPDIR}/empty_directory_path"
end
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-trash.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-trash.rb
index 171780bb7..b085b3e32 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-trash.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/with-uninstall-trash.rb
@@ -8,8 +8,9 @@ cask 'with-uninstall-trash' do
pkg 'Fancy.pkg'
uninstall trash: [
- '/permissible/absolute/path',
- '~/permissible/path/with/tilde',
+ "#{TEST_TMPDIR}/absolute_path",
+ '~/path_with_tilde',
+ "#{TEST_TMPDIR}/glob_path*",
'impermissible/relative/path',
'/another/impermissible/../relative/path',
]
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-delete.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-delete.rb
index a0ab83fc2..d81a387f9 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-delete.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-delete.rb
@@ -8,8 +8,9 @@ cask 'with-zap-delete' do
pkg 'Fancy.pkg'
zap delete: [
- '/permissible/absolute/path',
- '~/permissible/path/with/tilde',
+ "#{TEST_TMPDIR}/absolute_path",
+ '~/path_with_tilde',
+ "#{TEST_TMPDIR}/glob_path*",
'impermissible/relative/path',
'/another/impermissible/../relative/path',
]
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-rmdir.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-rmdir.rb
index 02139b3b0..a67c4ca9a 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-rmdir.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-rmdir.rb
@@ -7,5 +7,5 @@ cask 'with-zap-rmdir' do
pkg 'MyFancyPkg/Fancy.pkg'
- zap rmdir: "#{TEST_FIXTURE_DIR}/cask/empty_directory"
+ zap rmdir: "#{TEST_TMPDIR}/empty_directory_path"
end
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-trash.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-trash.rb
index 8f4e91d67..ea2bc2a01 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-trash.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/with-zap-trash.rb
@@ -8,8 +8,9 @@ cask 'with-zap-trash' do
pkg 'Fancy.pkg'
zap trash: [
- '/permissible/absolute/path',
- '~/permissible/path/with/tilde',
+ "#{TEST_TMPDIR}/absolute_path",
+ '~/path_with_tilde',
+ "#{TEST_TMPDIR}/glob_path*",
'impermissible/relative/path',
'/another/impermissible/../relative/path',
]
diff --git a/Library/Homebrew/test/support/fixtures/cask/empty_directory/.gitignore b/Library/Homebrew/test/support/fixtures/cask/empty_directory/.gitignore
deleted file mode 100644
index e69de29bb..000000000
--- a/Library/Homebrew/test/support/fixtures/cask/empty_directory/.gitignore
+++ /dev/null