Fix trash.swift
without arguments.
This commit is contained in:
parent
299bb1c25f
commit
04493e2dde
@ -24,8 +24,6 @@ module Cask
|
||||
:rmdir,
|
||||
].freeze
|
||||
|
||||
TRASH_SCRIPT = (HOMEBREW_LIBRARY_PATH/"cask/utils/trash.swift").freeze
|
||||
|
||||
def self.from_args(cask, **directives)
|
||||
new(cask, directives)
|
||||
end
|
||||
@ -360,16 +358,31 @@ module Cask
|
||||
def trash_paths(*paths, command: nil, **_)
|
||||
return if paths.empty?
|
||||
|
||||
trashable, untrashable = paths.partition(&:writable?)
|
||||
unless untrashable.empty?
|
||||
opoo "These files cannot be moved to the user's Trash:"
|
||||
$stderr.puts untrashable
|
||||
stdout, stderr, = system_command HOMEBREW_LIBRARY_PATH/"cask/utils/trash.swift",
|
||||
args: paths,
|
||||
print_stderr: false
|
||||
|
||||
trashed = stdout.split(":").sort
|
||||
untrashable = stderr.split(":").sort
|
||||
|
||||
return trashed, untrashable if untrashable.empty?
|
||||
|
||||
untrashable.delete_if do |path|
|
||||
Utils.gain_permissions(path, ["-R"], SystemCommand) do
|
||||
system_command! HOMEBREW_LIBRARY_PATH/"cask/utils/trash.swift",
|
||||
args: [path],
|
||||
print_stderr: false
|
||||
end
|
||||
|
||||
true
|
||||
rescue
|
||||
false
|
||||
end
|
||||
|
||||
result = command.run!("/usr/bin/swift", args: [TRASH_SCRIPT, *trashable])
|
||||
opoo "The following files could not trashed, please do so manually:"
|
||||
$stderr.puts untrashable
|
||||
|
||||
# Remove AppleScript's automatic newline.
|
||||
result.tap { |r| r.stdout.sub!(/\n$/, "") }
|
||||
[trashed, untrashable]
|
||||
end
|
||||
|
||||
def uninstall_rmdir(*directories, command: nil, **_)
|
||||
|
@ -49,6 +49,7 @@ module Cask
|
||||
tried_permissions = true
|
||||
retry # rmtree
|
||||
end
|
||||
|
||||
unless tried_ownership
|
||||
# in case of ownership problems
|
||||
# TODO: Further examine files to see if ownership is the problem
|
||||
@ -62,6 +63,8 @@ module Cask
|
||||
tried_permissions = false
|
||||
retry # rmtree
|
||||
end
|
||||
|
||||
raise
|
||||
end
|
||||
end
|
||||
|
||||
|
0
Library/Homebrew/cask/utils/quarantine.swift
Normal file → Executable file
0
Library/Homebrew/cask/utils/quarantine.swift
Normal file → Executable file
29
Library/Homebrew/cask/utils/trash.swift
Normal file → Executable file
29
Library/Homebrew/cask/utils/trash.swift
Normal file → Executable file
@ -2,27 +2,30 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
struct swifterr: TextOutputStream {
|
||||
public static var stream = swifterr()
|
||||
mutating func write(_ string: String) { fputs(string, stderr) }
|
||||
extension FileHandle : TextOutputStream {
|
||||
public func write(_ string: String) {
|
||||
self.write(string.data(using: .utf8)!)
|
||||
}
|
||||
}
|
||||
|
||||
if (CommandLine.arguments.count < 2) {
|
||||
exit(2)
|
||||
}
|
||||
var stderr = FileHandle.standardError
|
||||
|
||||
let manager: FileManager = FileManager()
|
||||
|
||||
var success = true
|
||||
|
||||
for item in CommandLine.arguments[1...] {
|
||||
do {
|
||||
let path: URL = URL(fileURLWithPath: item)
|
||||
try manager.trashItem(at: path, resultingItemURL: nil)
|
||||
print(path, terminator: "\0")
|
||||
}
|
||||
catch {
|
||||
print(error.localizedDescription, to: &swifterr.stream)
|
||||
exit(1)
|
||||
var trashedPath: NSURL!
|
||||
try manager.trashItem(at: path, resultingItemURL: &trashedPath)
|
||||
print((trashedPath as URL).path, terminator: ":")
|
||||
} catch {
|
||||
print(item, terminator: ":", to: &stderr)
|
||||
success = false
|
||||
}
|
||||
}
|
||||
|
||||
exit(0)
|
||||
guard success else {
|
||||
exit(1)
|
||||
}
|
||||
|
@ -199,8 +199,8 @@ shared_examples "#uninstall_phase or #zap_phase" do
|
||||
before do
|
||||
allow_any_instance_of(Cask::Artifact::AbstractUninstall).to receive(:trash_paths)
|
||||
.and_wrap_original do |method, *args|
|
||||
method.call(*args).tap do |result|
|
||||
FileUtils.rm_rf result.stdout.split("\0")
|
||||
method.call(*args).tap do |trashed, _|
|
||||
FileUtils.rm_r trashed
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user