aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cask/lib
diff options
context:
space:
mode:
authorGautham Goli2017-10-21 01:39:04 +0530
committerGautham Goli2017-10-21 01:48:00 +0530
commitbdc7eba4b3459ea0f6fefb5a829da649134d7f8d (patch)
treef95203c5920ac4210033c77ce5d64cac39da0732 /Library/Homebrew/cask/lib
parent7fa51f71f1a8a21b905bafc1fb4106f0222d654f (diff)
parentc4e8c7906d12399b34188cd3395b8f9d30dc89b3 (diff)
downloadbrew-bdc7eba4b3459ea0f6fefb5a829da649134d7f8d.tar.bz2
Merge branch 'master' into audit_line_rubocop_part_4_rebase_attempt_1
Diffstat (limited to 'Library/Homebrew/cask/lib')
-rw-r--r--Library/Homebrew/cask/lib/hbc/cli/edit.rb11
-rw-r--r--Library/Homebrew/cask/lib/hbc/container/dmg.rb24
-rw-r--r--Library/Homebrew/cask/lib/hbc/system_command.rb61
3 files changed, 57 insertions, 39 deletions
diff --git a/Library/Homebrew/cask/lib/hbc/cli/edit.rb b/Library/Homebrew/cask/lib/hbc/cli/edit.rb
index 8bce81c52..693edcd51 100644
--- a/Library/Homebrew/cask/lib/hbc/cli/edit.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli/edit.rb
@@ -8,9 +8,6 @@ module Hbc
end
def run
- cask = casks.first
- cask_path = cask.sourcefile_path
- odebug "Opening editor for Cask #{cask.token}"
exec_editor cask_path
rescue CaskUnavailableError => e
reason = e.reason.empty? ? "" : "#{e.reason} "
@@ -18,6 +15,14 @@ module Hbc
raise e.class.new(e.token, reason)
end
+ def cask_path
+ casks.first.sourcefile_path
+ rescue CaskInvalidError
+ path = CaskLoader.path(args.first)
+ return path if path.file?
+ raise
+ end
+
def self.help
"edits the given Cask"
end
diff --git a/Library/Homebrew/cask/lib/hbc/container/dmg.rb b/Library/Homebrew/cask/lib/hbc/container/dmg.rb
index 1d172a4b7..c0e43f68a 100644
--- a/Library/Homebrew/cask/lib/hbc/container/dmg.rb
+++ b/Library/Homebrew/cask/lib/hbc/container/dmg.rb
@@ -88,7 +88,7 @@ module Hbc
bomfile.close
Tempfile.open(["", ".list"]) do |filelist|
- filelist.write(bom_filelist_from_path(mount))
+ filelist.puts(bom_filelist_from_path(mount))
filelist.close
@command.run!("/usr/bin/mkbom", args: ["-s", "-i", filelist.path, "--", bomfile.path])
@@ -98,16 +98,17 @@ module Hbc
end
def bom_filelist_from_path(mount)
- Dir.chdir(mount) do
- Dir.glob("**/*", File::FNM_DOTMATCH).map do |path|
- next if skip_path?(Pathname(path))
- (path == ".") ? path : path.prepend("./")
- end.compact.join("\n").concat("\n")
- end
+ # We need to use `find` here instead of Ruby in order to properly handle
+ # file names containing special characters, such as โ€œeโ€ + โ€œยดโ€ vs. โ€œรฉโ€.
+ @command.run("/usr/bin/find", args: [".", "-print0"], chdir: mount, print_stderr: false).stdout
+ .split("\0")
+ .reject { |path| skip_path?(mount, path) }
+ .join("\n")
end
- def skip_path?(path)
- dmg_metadata?(path) || system_dir_symlink?(path)
+ def skip_path?(mount, path)
+ path = Pathname(path.sub(%r{^\./}, ""))
+ dmg_metadata?(path) || system_dir_symlink?(mount, path)
end
# unnecessary DMG metadata
@@ -130,9 +131,10 @@ module Hbc
DMG_METADATA_FILES.include?(relative_root.basename.to_s)
end
- def system_dir_symlink?(path)
+ def system_dir_symlink?(mount, path)
+ full_path = Pathname(mount).join(path)
# symlinks to system directories (commonly to /Applications)
- path.symlink? && MacOS.system_dir?(path.readlink)
+ full_path.symlink? && MacOS.system_dir?(full_path.readlink)
end
def mounts_from_plist(plist)
diff --git a/Library/Homebrew/cask/lib/hbc/system_command.rb b/Library/Homebrew/cask/lib/hbc/system_command.rb
index be083c29e..9ce3de907 100644
--- a/Library/Homebrew/cask/lib/hbc/system_command.rb
+++ b/Library/Homebrew/cask/lib/hbc/system_command.rb
@@ -8,14 +8,14 @@ require "hbc/utils/hash_validator"
module Hbc
class SystemCommand
- attr_reader :command
+ extend Predicable
- def self.run(executable, options = {})
- new(executable, options).run!
+ def self.run(executable, **options)
+ new(executable, **options).run!
end
- def self.run!(command, options = {})
- run(command, options.merge(must_succeed: true))
+ def self.run!(command, **options)
+ run(command, **options, must_succeed: true)
end
def run!
@@ -26,38 +26,49 @@ module Hbc
case type
when :stdout
processed_output[:stdout] << line
- ohai line.chomp if options[:print_stdout]
+ ohai line.chomp if print_stdout?
when :stderr
processed_output[:stderr] << line
- ohai line.chomp if options[:print_stderr]
+ ohai line.chomp if print_stderr?
end
end
- assert_success if options[:must_succeed]
+ assert_success if must_succeed?
result
end
- def initialize(executable, options)
+ def initialize(executable, args: [], sudo: false, input: [], print_stdout: false, print_stderr: true, must_succeed: false, **options)
+ executable, *args = Shellwords.shellescape(executable) if args.empty?
+
@executable = executable
+ @args = args
+ @sudo = sudo
+ @input = input
+ @print_stdout = print_stdout
+ @print_stderr = print_stderr
+ @must_succeed = must_succeed
+ options.extend(HashValidator).assert_valid_keys(:chdir)
@options = options
- process_options!
+ end
+
+ def command
+ @command ||= [
+ *sudo_prefix,
+ executable,
+ *args,
+ ].freeze
end
private
- attr_reader :executable, :options, :processed_output, :processed_status
-
- def process_options!
- options.extend(HashValidator)
- .assert_valid_keys :input, :print_stdout, :print_stderr, :args, :must_succeed, :sudo
- sudo_prefix = %w[/usr/bin/sudo -E --]
- sudo_prefix = sudo_prefix.insert(1, "-A") unless ENV["SUDO_ASKPASS"].nil?
- @command = [executable]
- options[:print_stderr] = true unless options.key?(:print_stderr)
- @command.unshift(*sudo_prefix) if options[:sudo]
- @command.concat(options[:args]) if options.key?(:args) && !options[:args].empty?
- @command[0] = Shellwords.shellescape(@command[0]) if @command.size == 1
- nil
+ attr_reader :executable, :args, :input, :options, :processed_output, :processed_status
+
+ attr_predicate :sudo?, :print_stdout?, :print_stderr?, :must_succeed?
+
+ def sudo_prefix
+ return [] unless sudo?
+ askpass_flags = ENV.key?("SUDO_ASKPASS") ? ["-A"] : []
+ ["/usr/bin/sudo", *askpass_flags, "-E", "--"]
end
def assert_success
@@ -77,7 +88,7 @@ module Hbc
def each_output_line(&b)
raw_stdin, raw_stdout, raw_stderr, raw_wait_thr =
- Open3.popen3(*expanded_command)
+ Open3.popen3(*expanded_command, **options)
write_input_to(raw_stdin)
raw_stdin.close_write
@@ -87,7 +98,7 @@ module Hbc
end
def write_input_to(raw_stdin)
- [*options[:input]].each { |line| raw_stdin.print line }
+ [*input].each(&raw_stdin.method(:print))
end
def each_line_from(sources)