Merge pull request #6514 from amyspark/workaround-trash

Cask: refuse to trash root-owned files
This commit is contained in:
Markus Reiter 2019-10-09 14:01:24 +02:00 committed by GitHub
commit 77412ad14e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 3 deletions

View File

@ -362,7 +362,13 @@ module Cask
def trash_paths(*paths, command: nil, **_)
return if paths.empty?
result = command.run!("/usr/bin/swift", args: [TRASH_SCRIPT, *paths])
trashable, untrashable = paths.partition(&:writable?)
unless untrashable.empty?
opoo "These files cannot be moved to the user's Trash:"
$stderr.puts untrashable
end
result = command.run!("/usr/bin/swift", args: [TRASH_SCRIPT, *trashable])
# Remove AppleScript's automatic newline.
result.tap { |r| r.stdout.sub!(/\n$/, "") }

View File

@ -2,6 +2,11 @@
import Foundation
struct swifterr: TextOutputStream {
public static var stream = swifterr()
mutating func write(_ string: String) { fputs(string, stderr) }
}
if (CommandLine.arguments.count < 2) {
exit(2)
}
@ -12,10 +17,11 @@ for item in CommandLine.arguments[1...] {
do {
let path: URL = URL(fileURLWithPath: item)
try manager.trashItem(at: path, resultingItemURL: nil)
print(path)
print(path, terminator: "\0")
}
catch {
print("\0")
print(error.localizedDescription, to: &swifterr.stream)
exit(1)
}
}