Skip to content

Commit

Permalink
feat: Install an unlinked formula via brew install if --overwrite
Browse files Browse the repository at this point in the history
… is passed

If the intention is to overwrite any existing links, then `brew install` should go on to install over an unlinked formula
  • Loading branch information
boblail committed Oct 8, 2024
1 parent fadca92 commit d55bf34
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 2 deletions.
1 change: 1 addition & 0 deletions Library/Homebrew/cmd/install.rb
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ def run
only_dependencies: args.only_dependencies?,
force: args.force?,
quiet: args.quiet?,
overwrite: args.overwrite?,
)
end

Expand Down
5 changes: 3 additions & 2 deletions Library/Homebrew/install.rb
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ def install_formula?(
fetch_head: false,
only_dependencies: false,
force: false,
quiet: false
quiet: false,
overwrite: false
)
# head-only without --HEAD is an error
if !head && formula.stable.nil?
Expand Down Expand Up @@ -132,7 +133,7 @@ def install_formula?(
The currently linked version is: #{formula.linked_version}
EOS
end
elsif only_dependencies
elsif only_dependencies || (!formula.linked? && overwrite)
msg = nil
return true
elsif !formula.linked? || formula.keg_only?
Expand Down
19 changes: 19 additions & 0 deletions Library/Homebrew/test/cmd/install_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,23 @@ def install
expect(HOMEBREW_CELLAR/"testball1/0.1/bin/test.dSYM/Contents/Resources/DWARF/test").to be_a_file if OS.mac?
expect(HOMEBREW_CACHE/"Sources/testball1").to be_a_directory
end

it "ignores an unlinked Formula if --overwrite is not passed", :integration_test do
install_test_formula "testball1"
Formula["testball1"].any_installed_keg.unlink

expect { brew "install", "testball1" }
.to output(/it's just not linked/).to_stderr
.and be_a_success
end

it "installs an unlinked Formula if --overwrite is passed", :integration_test do
install_test_formula "testball1"
Formula["testball1"].any_installed_keg.unlink

expect { brew "install", "testball1", "--overwrite" }
.to output(%r{#{HOMEBREW_CELLAR}/testball1/0\.1}o).to_stdout
.and not_to_output.to_stderr
.and be_a_success
end
end

0 comments on commit d55bf34

Please sign in to comment.