diff options
| author | Markus Reiter | 2017-04-01 01:53:29 +0200 |
|---|---|---|
| committer | Markus Reiter | 2017-04-01 01:57:25 +0200 |
| commit | c3baf55527daf8f739e67e682c144161868eff0c (patch) | |
| tree | b94dedd842f37771bc0090b414527a8d40be250b /Library | |
| parent | e30eeb3d1b77b044ddce7852893d0a87bd7ed277 (diff) | |
| download | brew-c3baf55527daf8f739e67e682c144161868eff0c.tar.bz2 | |
Use `sudo` if parent path of `target` is not writable.
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/cask/lib/hbc/artifact/moved.rb | 18 | ||||
| -rw-r--r-- | Library/Homebrew/cask/lib/hbc/utils.rb | 10 |
2 files changed, 21 insertions, 7 deletions
diff --git a/Library/Homebrew/cask/lib/hbc/artifact/moved.rb b/Library/Homebrew/cask/lib/hbc/artifact/moved.rb index 01e98ac35..eaaa49e20 100644 --- a/Library/Homebrew/cask/lib/hbc/artifact/moved.rb +++ b/Library/Homebrew/cask/lib/hbc/artifact/moved.rb @@ -31,20 +31,26 @@ module Hbc ohai "Moving #{self.class.artifact_english_name} '#{source.basename}' to '#{target}'." target.dirname.mkpath - FileUtils.move(source, target) + + if target.parent.writable? + FileUtils.move(source, target) + else + SystemCommand.run("/bin/mv", args: [source, target], sudo: true) + end + add_altname_metadata target, source.basename.to_s end def delete ohai "Removing #{self.class.artifact_english_name} '#{target}'." - return unless Utils.path_occupied?(target) - raise CaskError, "Cannot remove undeletable #{self.class.artifact_english_name}." if MacOS.undeletable?(target) - if force - Utils.gain_permissions_remove(target, command: @command) - else + return unless Utils.path_occupied?(target) + + if target.parent.writable? && !force target.rmtree + else + Utils.gain_permissions_remove(target, command: @command) end end diff --git a/Library/Homebrew/cask/lib/hbc/utils.rb b/Library/Homebrew/cask/lib/hbc/utils.rb index 3fc817dd5..2eb392c21 100644 --- a/Library/Homebrew/cask/lib/hbc/utils.rb +++ b/Library/Homebrew/cask/lib/hbc/utils.rb @@ -39,7 +39,15 @@ module Hbc module Utils def self.gain_permissions_remove(path, command: SystemCommand) if path.respond_to?(:rmtree) && path.exist? - gain_permissions(path, ["-R"], command, &:rmtree) + gain_permissions(path, ["-R"], command) do |p| + if p.parent.writable? + p.rmtree + else + command.run("/bin/rm", + args: command_args + ["-r", "-f", "--", p], + sudo: true) + end + end elsif File.symlink?(path) gain_permissions(path, ["-h"], command, &FileUtils.method(:rm_f)) end |
