Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
B
brew
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to JiHu GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
KMSCAKKSCFKA AKFACAMADCAS
brew
Commits
30be3e23
Unverified
Commit
30be3e23
authored
3 years ago
by
Rylan Polster
Browse files
Options
Downloads
Patches
Plain Diff
Refactor install methods
parent
33e71c99
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
Library/Homebrew/cmd/install.rb
+27
-164
27 additions, 164 deletions
Library/Homebrew/cmd/install.rb
Library/Homebrew/install.rb
+187
-0
187 additions, 0 deletions
Library/Homebrew/install.rb
with
214 additions
and
164 deletions
Library/Homebrew/cmd/install.rb
+
27
−
164
View file @
30be3e23
...
...
@@ -187,132 +187,15 @@ module Homebrew
raise
BuildFlagsError
.
new
(
build_flags
,
bottled:
formulae
.
all?
(
&
:
bottled?
))
if
build_flags
.
present?
end
installed_formulae
=
[]
formulae
.
each
do
|
f
|
# head-only without --HEAD is an error
if
!
args
.
HEAD
?
&&
f
.
stable
.
nil?
odie
<<~
EOS
#{
f
.
full_name
}
is a head-only formula.
To install it, run:
brew install --HEAD
#{
f
.
full_name
}
EOS
end
# --HEAD, fail with no head defined
odie
"No head is defined for
#{
f
.
full_name
}
"
if
args
.
HEAD
?
&&
f
.
head
.
nil?
installed_head_version
=
f
.
latest_head_version
if
installed_head_version
&&
!
f
.
head_version_outdated?
(
installed_head_version
,
fetch_head:
args
.
fetch_HEAD?
)
new_head_installed
=
true
end
prefix_installed
=
f
.
prefix
.
exist?
&&
!
f
.
prefix
.
children
.
empty?
if
f
.
keg_only?
&&
f
.
any_version_installed?
&&
f
.
optlinked?
&&
!
args
.
force?
# keg-only install is only possible when no other version is
# linked to opt, because installing without any warnings can break
# dependencies. Therefore before performing other checks we need to be
# sure --force flag is passed.
if
f
.
outdated?
optlinked_version
=
Keg
.
for
(
f
.
opt_prefix
).
version
onoe
<<~
EOS
#{
f
.
full_name
}
#{
optlinked_version
}
is already installed.
To upgrade to
#{
f
.
version
}
, run:
brew upgrade
#{
f
.
full_name
}
EOS
elsif
args
.
only_dependencies?
installed_formulae
<<
f
elsif
!
args
.
quiet?
opoo
<<~
EOS
#{
f
.
full_name
}
#{
f
.
pkg_version
}
is already installed and up-to-date.
To reinstall
#{
f
.
pkg_version
}
, run:
brew reinstall
#{
f
.
name
}
EOS
end
elsif
(
args
.
HEAD
?
&&
new_head_installed
)
||
prefix_installed
# After we're sure that --force flag is passed for linked to opt
# keg-only we need to be sure that the version we're attempting to
# install is not already installed.
installed_version
=
if
args
.
HEAD
?
f
.
latest_head_version
else
f
.
pkg_version
end
msg
=
"
#{
f
.
full_name
}
#{
installed_version
}
is already installed"
linked_not_equals_installed
=
f
.
linked_version
!=
installed_version
if
f
.
linked?
&&
linked_not_equals_installed
msg
=
if
args
.
quiet?
nil
else
<<~
EOS
#{
msg
}
.
The currently linked version is:
#{
f
.
linked_version
}
EOS
end
elsif
!
f
.
linked?
||
f
.
keg_only?
msg
=
<<~
EOS
#{
msg
}
, it's just not linked.
To link this version, run:
brew link
#{
f
}
EOS
elsif
args
.
only_dependencies?
msg
=
nil
installed_formulae
<<
f
else
msg
=
if
args
.
quiet?
nil
else
<<~
EOS
#{
msg
}
and up-to-date.
To reinstall
#{
f
.
pkg_version
}
, run:
brew reinstall
#{
f
.
name
}
EOS
end
end
opoo
msg
if
msg
elsif
!
f
.
any_version_installed?
&&
(
old_formula
=
f
.
old_installed_formulae
.
first
)
msg
=
"
#{
old_formula
.
full_name
}
#{
old_formula
.
any_installed_version
}
already installed"
msg
=
if
!
old_formula
.
linked?
&&
!
old_formula
.
keg_only?
<<~
EOS
#{
msg
}
, it's just not linked.
To link this version, run:
brew link
#{
old_formula
.
full_name
}
EOS
elsif
args
.
quiet?
nil
else
"
#{
msg
}
."
end
opoo
msg
if
msg
elsif
f
.
migration_needed?
&&
!
args
.
force?
# Check if the formula we try to install is the same as installed
# but not migrated one. If --force is passed then install anyway.
opoo
<<~
EOS
#{
f
.
oldname
}
is already installed, it's just not migrated.
To migrate this formula, run:
brew migrate
#{
f
}
Or to force-install it, run:
brew install
#{
f
}
--force
EOS
else
# If none of the above is true and the formula is linked, then
# FormulaInstaller will handle this case.
installed_formulae
<<
f
end
# Even if we don't install this formula mark it as no longer just
# installed as a dependency.
next
unless
f
.
opt_prefix
.
directory?
keg
=
Keg
.
new
(
f
.
opt_prefix
.
resolved_path
)
tab
=
Tab
.
for_keg
(
keg
)
unless
tab
.
installed_on_request
tab
.
installed_on_request
=
true
tab
.
write
end
installed_formulae
=
formulae
.
select
do
|
f
|
Install
.
install_formula?
(
f
,
head:
args
.
HEAD
?,
fetch_head:
args
.
fetch_HEAD?
,
only_dependencies:
args
.
only_dependencies?
,
force:
args
.
force?
,
quiet:
args
.
quiet?
,
)
end
return
if
installed_formulae
.
empty?
...
...
@@ -321,7 +204,24 @@ module Homebrew
installed_formulae
.
each
do
|
f
|
Migrator
.
migrate_if_needed
(
f
,
force:
args
.
force?
)
install_formula
(
f
,
args:
args
)
Install
.
install_formula
(
f
,
build_bottle:
args
.
build_bottle?
,
force_bottle:
args
.
force_bottle?
,
bottle_arch:
args
.
bottle_arch
,
ignore_deps:
args
.
ignore_dependencies?
,
only_deps:
args
.
only_dependencies?
,
include_test_formulae:
args
.
include_test_formulae
,
build_from_source_formulae:
args
.
build_from_source_formulae
,
cc:
args
.
cc
,
git:
args
.
git?
,
interactive:
args
.
interactive?
,
keep_tmp:
args
.
keep_tmp?
,
force:
args
.
force?
,
debug:
args
.
debug?
,
quiet:
args
.
quiet?
,
verbose:
args
.
verbose?
,
)
Cleanup
.
install_formula_clean!
(
f
)
end
...
...
@@ -391,41 +291,4 @@ module Homebrew
puts
"To install one of them, run (for example):
\n
brew install
#{
taps_search_results
.
first
}
"
end
end
def
install_formula
(
f
,
args
:)
f
.
print_tap_action
build_options
=
f
.
build
fi
=
FormulaInstaller
.
new
(
f
,
**
{
options:
build_options
.
used_options
,
build_bottle:
args
.
build_bottle?
,
force_bottle:
args
.
force_bottle?
,
bottle_arch:
args
.
bottle_arch
,
ignore_deps:
args
.
ignore_dependencies?
,
only_deps:
args
.
only_dependencies?
,
include_test_formulae:
args
.
include_test_formulae
,
build_from_source_formulae:
args
.
build_from_source_formulae
,
cc:
args
.
cc
,
git:
args
.
git?
,
interactive:
args
.
interactive?
,
keep_tmp:
args
.
keep_tmp?
,
force:
args
.
force?
,
debug:
args
.
debug?
,
quiet:
args
.
quiet?
,
verbose:
args
.
verbose?
,
}.
compact
,
)
fi
.
prelude
fi
.
fetch
fi
.
install
fi
.
finish
rescue
FormulaInstallationAlreadyAttemptedError
# We already attempted to install f as part of the dependency tree of
# another formula. In that case, don't generate an error, just move on.
nil
rescue
CannotInstallFormulaError
=>
e
ofail
e
.
message
end
end
This diff is collapsed.
Click to expand it.
Library/Homebrew/install.rb
+
187
−
0
View file @
30be3e23
...
...
@@ -90,6 +90,193 @@ module Homebrew
EOS
end
private_class_method
:check_cc_argv
def
install_formula?
(
f
,
head:
false
,
fetch_head:
false
,
only_dependencies:
false
,
force:
false
,
quiet:
false
)
# head-only without --HEAD is an error
if
!
head
&&
f
.
stable
.
nil?
odie
<<~
EOS
#{
f
.
full_name
}
is a head-only formula.
To install it, run:
brew install --HEAD
#{
f
.
full_name
}
EOS
end
# --HEAD, fail with no head defined
odie
"No head is defined for
#{
f
.
full_name
}
"
if
head
&&
f
.
head
.
nil?
installed_head_version
=
f
.
latest_head_version
if
installed_head_version
&&
!
f
.
head_version_outdated?
(
installed_head_version
,
fetch_head:
fetch_head
)
new_head_installed
=
true
end
prefix_installed
=
f
.
prefix
.
exist?
&&
!
f
.
prefix
.
children
.
empty?
if
f
.
keg_only?
&&
f
.
any_version_installed?
&&
f
.
optlinked?
&&
force
# keg-only install is only possible when no other version is
# linked to opt, because installing without any warnings can break
# dependencies. Therefore before performing other checks we need to be
# sure --force flag is passed.
if
f
.
outdated?
optlinked_version
=
Keg
.
for
(
f
.
opt_prefix
).
version
onoe
<<~
EOS
#{
f
.
full_name
}
#{
optlinked_version
}
is already installed.
To upgrade to
#{
f
.
version
}
, run:
brew upgrade
#{
f
.
full_name
}
EOS
elsif
only_dependencies
return
true
elsif
quiet
opoo
<<~
EOS
#{
f
.
full_name
}
#{
f
.
pkg_version
}
is already installed and up-to-date.
To reinstall
#{
f
.
pkg_version
}
, run:
brew reinstall
#{
f
.
name
}
EOS
end
elsif
(
head
&&
new_head_installed
)
||
prefix_installed
# After we're sure that --force flag is passed for linked to opt
# keg-only we need to be sure that the version we're attempting to
# install is not already installed.
installed_version
=
if
head
f
.
latest_head_version
else
f
.
pkg_version
end
msg
=
"
#{
f
.
full_name
}
#{
installed_version
}
is already installed"
linked_not_equals_installed
=
f
.
linked_version
!=
installed_version
if
f
.
linked?
&&
linked_not_equals_installed
msg
=
if
quiet
nil
else
<<~
EOS
#{
msg
}
.
The currently linked version is:
#{
f
.
linked_version
}
EOS
end
elsif
!
f
.
linked?
||
f
.
keg_only?
msg
=
<<~
EOS
#{
msg
}
, it's just not linked.
To link this version, run:
brew link
#{
f
}
EOS
elsif
only_dependencies
msg
=
nil
return
true
else
msg
=
if
quiet
nil
else
<<~
EOS
#{
msg
}
and up-to-date.
To reinstall
#{
f
.
pkg_version
}
, run:
brew reinstall
#{
f
.
name
}
EOS
end
end
opoo
msg
if
msg
elsif
!
f
.
any_version_installed?
&&
(
old_formula
=
f
.
old_installed_formulae
.
first
)
msg
=
"
#{
old_formula
.
full_name
}
#{
old_formula
.
any_installed_version
}
already installed"
msg
=
if
!
old_formula
.
linked?
&&
!
old_formula
.
keg_only?
<<~
EOS
#{
msg
}
, it's just not linked.
To link this version, run:
brew link
#{
old_formula
.
full_name
}
EOS
elsif
quiet
nil
else
"
#{
msg
}
."
end
opoo
msg
if
msg
elsif
f
.
migration_needed?
&&
force
# Check if the formula we try to install is the same as installed
# but not migrated one. If --force is passed then install anyway.
opoo
<<~
EOS
#{
f
.
oldname
}
is already installed, it's just not migrated.
To migrate this formula, run:
brew migrate
#{
f
}
Or to force-install it, run:
brew install
#{
f
}
--force
EOS
else
# If none of the above is true and the formula is linked, then
# FormulaInstaller will handle this case.
return
true
end
# Even if we don't install this formula mark it as no longer just
# installed as a dependency.
return
false
unless
f
.
opt_prefix
.
directory?
keg
=
Keg
.
new
(
f
.
opt_prefix
.
resolved_path
)
tab
=
Tab
.
for_keg
(
keg
)
unless
tab
.
installed_on_request
tab
.
installed_on_request
=
true
tab
.
write
end
false
end
def
install_formula
(
f
,
build_bottle:
false
,
force_bottle:
false
,
bottle_arch:
nil
,
ignore_deps:
false
,
only_deps:
false
,
include_test_formulae:
[],
build_from_source_formulae:
[],
cc:
nil
,
git:
false
,
interactive:
false
,
keep_tmp:
false
,
force:
false
,
debug:
false
,
quiet:
false
,
verbose:
false
)
f
.
print_tap_action
build_options
=
f
.
build
fi
=
FormulaInstaller
.
new
(
f
,
options:
build_options
.
used_options
,
build_bottle:
build_bottle
,
force_bottle:
force_bottle
,
bottle_arch:
bottle_arch
,
ignore_deps:
ignore_deps
,
only_deps:
only_deps
,
include_test_formulae:
include_test_formulae
,
build_from_source_formulae:
build_from_source_formulae
,
cc:
cc
,
git:
git
,
interactive:
interactive
,
keep_tmp:
keep_tmp
,
force:
force
,
debug:
debug
,
quiet:
quiet
,
verbose:
verbose
,
)
fi
.
prelude
fi
.
fetch
fi
.
install
fi
.
finish
rescue
FormulaInstallationAlreadyAttemptedError
# We already attempted to install f as part of the dependency tree of
# another formula. In that case, don't generate an error, just move on.
nil
rescue
CannotInstallFormulaError
=>
e
ofail
e
.
message
end
end
end
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment