diff options
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/language/node.rb | 23 | ||||
| -rw-r--r-- | Library/Homebrew/test/utils_spec.rb | 4 | ||||
| -rw-r--r-- | Library/Homebrew/utils.rb | 32 |
3 files changed, 38 insertions, 21 deletions
diff --git a/Library/Homebrew/language/node.rb b/Library/Homebrew/language/node.rb index ab2206a5b..b9abaea54 100644 --- a/Library/Homebrew/language/node.rb +++ b/Library/Homebrew/language/node.rb @@ -4,6 +4,17 @@ module Language "cache=#{HOMEBREW_CACHE}/npm_cache\n" end + def self.pack_for_installation + # Homebrew assumes the buildpath/testpath will always be disposable + # and from npm 5.0.0 the logic changed so that when a directory is + # fed to `npm install` only symlinks are created linking back to that + # directory, consequently breaking that assumption. We require a tarball + # because npm install creates a "real" installation when fed a tarball. + output = Utils.popen_read("npm pack").chomp + raise "npm failed to pack #{Dir.pwd}" unless $?.exitstatus.zero? + output + end + def self.setup_npm_environment npmrc = Pathname.new("#{ENV["HOME"]}/.npmrc") # only run setup_npm_environment once per formula @@ -14,7 +25,7 @@ module Language npmrc.write npm_cache_config # explicitly use our npm and node-gyp executables instead of the user # managed ones in HOMEBREW_PREFIX/lib/node_modules which might be broken - ENV.prepend_path "PATH", Formula["node"].opt_libexec/"npm/bin" + ENV.prepend_path "PATH", Formula["node"].opt_libexec/"bin" end def self.std_npm_install_args(libexec) @@ -22,8 +33,16 @@ module Language # tell npm to not install .brew_home by adding it to the .npmignore file # (or creating a new one if no .npmignore file already exists) open(".npmignore", "a") { |f| f.write("\n.brew_home\n") } + + pack = pack_for_installation + # npm install args for global style module format installed into libexec - ["--verbose", "--global", "--prefix=#{libexec}", "."] + %W[ + --verbose + --global + --prefix=#{libexec} + #{Dir.pwd}/#{pack} + ] end def self.local_npm_install_args diff --git a/Library/Homebrew/test/utils_spec.rb b/Library/Homebrew/test/utils_spec.rb index be224990a..f3bf98486 100644 --- a/Library/Homebrew/test/utils_spec.rb +++ b/Library/Homebrew/test/utils_spec.rb @@ -188,14 +188,14 @@ describe "globally-scoped helper methods" do end specify "#which_editor" do - ENV["HOMEBREW_EDITOR"] = "vemate" + ENV["HOMEBREW_EDITOR"] = "vemate -w" ENV["HOMEBREW_PATH"] = dir editor = "#{dir}/vemate" FileUtils.touch editor FileUtils.chmod 0755, editor - expect(which_editor).to eql editor + expect(which_editor).to eq("vemate -w") end specify "#gzip" do diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index f837de202..4efcb2b4d 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -262,6 +262,14 @@ ensure ENV["PATH"] = old_path end +def with_homebrew_path + old_path = ENV["PATH"] + ENV["PATH"] = ENV["HOMEBREW_PATH"] + yield +ensure + ENV["PATH"] = old_path +end + def with_custom_locale(locale) old_locale = ENV["LC_ALL"] ENV["LC_ALL"] = locale @@ -321,23 +329,13 @@ end def which_editor editor = ENV.values_at("HOMEBREW_EDITOR", "HOMEBREW_VISUAL").compact.reject(&:empty?).first - if editor - editor_name, _, editor_args = editor.partition " " - editor_path = which(editor_name, ENV["HOMEBREW_PATH"]) - editor = if editor_args.to_s.empty? - editor_path.to_s - else - "#{editor_path} #{editor_args}" - end - return editor + return editor unless editor.nil? + + # Find Textmate, BBEdit / TextWrangler, or vim + %w[mate edit vim].each do |candidate| + editor = candidate if which(candidate, ENV["HOMEBREW_PATH"]) end - # Find Textmate - editor = which("mate", ENV["HOMEBREW_PATH"]) - # Find BBEdit / TextWrangler - editor ||= which("edit", ENV["HOMEBREW_PATH"]) - # Find vim - editor ||= which("vim", ENV["HOMEBREW_PATH"]) # Default to standard vim editor ||= "/usr/bin/vim" @@ -347,12 +345,12 @@ def which_editor or HOMEBREW_EDITOR to your preferred text editor. EOS - editor.to_s + editor end def exec_editor(*args) puts "Editing #{args.join "\n"}" - safe_exec(which_editor, *args) + with_homebrew_path { safe_exec(which_editor, *args) } end def exec_browser(*args) |
