aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/language/node.rb23
-rw-r--r--Library/Homebrew/test/utils_spec.rb4
-rw-r--r--Library/Homebrew/utils.rb32
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)