brew 0.1.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +139 -0
- data/Gemfile +3 -4
- data/Gemfile.lock +26 -1
- data/LICENSE +131 -0
- data/README.md +25 -13
- data/Rakefile +8 -6
- data/bin/console +4 -3
- data/brew.gemspec +18 -10
- data/lib/brew/commands/info.rb +88 -0
- data/lib/brew/commands/install.rb +138 -0
- data/lib/brew/commands/list.rb +82 -0
- data/lib/brew/commands/search.rb +101 -0
- data/lib/brew/commands/uninstall.rb +52 -0
- data/lib/brew/commands/update.rb +56 -0
- data/lib/brew/commands/upgrade.rb +93 -0
- data/lib/brew/home_brew.rb +37 -40
- data/lib/brew/utils/string_utils.rb +11 -0
- data/lib/brew/utils/system_runner.rb +35 -0
- data/lib/brew/version.rb +3 -1
- data/lib/brew.rb +23 -1
- metadata +84 -4
- data/.travis.yml +0 -6
@@ -0,0 +1,138 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'brew/utils/string_utils'
|
4
|
+
require 'brew/utils/system_runner'
|
5
|
+
|
6
|
+
module Brew
|
7
|
+
module Commands
|
8
|
+
class Install
|
9
|
+
attr_reader :brew_path, :formulae, :options, :system_runner
|
10
|
+
|
11
|
+
def initialize(brew_path, *formulae, **kwargs)
|
12
|
+
@brew_path = brew_path
|
13
|
+
@formulae = formulae.join(' ')
|
14
|
+
@options = parse_args(kwargs)
|
15
|
+
@system_runner = SystemRunner.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute!
|
19
|
+
install_command = "#{brew_path} install #{options} #{formulae}".squish
|
20
|
+
system_runner.print_output(install_command)
|
21
|
+
rescue StandardError => e
|
22
|
+
raise Brew::ExecutionError, e
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
BOOLEAN_OPTIONS = %i[
|
28
|
+
ignore_dependencies build_from_source force_bottle
|
29
|
+
include_test devel HEAD fetch_HEAD keep_tmp
|
30
|
+
build_bottle force verbose display_times git
|
31
|
+
].freeze
|
32
|
+
|
33
|
+
ARGUMENT_OPTIONS = %i[
|
34
|
+
env only_dependencies cc bottle_arch
|
35
|
+
].freeze
|
36
|
+
|
37
|
+
def parse_args(args)
|
38
|
+
option_list = []
|
39
|
+
|
40
|
+
BOOLEAN_OPTIONS.each do |option|
|
41
|
+
str_option = option.to_s
|
42
|
+
kebab_option = str_option.snake_to_kebab
|
43
|
+
option_list << "--#{kebab_option}" if args[option] || args[str_option] || args[kebab_option]
|
44
|
+
end
|
45
|
+
|
46
|
+
ARGUMENT_OPTIONS.each do |option|
|
47
|
+
str_option = option.to_s
|
48
|
+
kebab_option = str_option.snake_to_kebab
|
49
|
+
if (value = args[option] || args[str_option] || args[kebab_option])
|
50
|
+
option_list << "--#{kebab_option} #{value}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
option_list.join(' ')
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Usage: brew install [options] formula
|
61
|
+
|
62
|
+
# Install formula. Additional options specific to formula may be appended to
|
63
|
+
# the command.
|
64
|
+
|
65
|
+
# Unless HOMEBREW_NO_INSTALL_CLEANUP is set, brew cleanup will then be run for
|
66
|
+
# the installed formulae or, every 30 days, for all formulae.
|
67
|
+
|
68
|
+
# -d, --debug If brewing fails, open an interactive
|
69
|
+
# debugging session with access to IRB or a
|
70
|
+
# shell inside the temporary build directory.
|
71
|
+
# --env If std is passed, use the standard build
|
72
|
+
# environment instead of superenv. If super
|
73
|
+
# is passed, use superenv even if the formula
|
74
|
+
# specifies the standard build environment.
|
75
|
+
# --ignore-dependencies An unsupported Homebrew development flag to
|
76
|
+
# skip installing any dependencies of any
|
77
|
+
# kind. If the dependencies are not already
|
78
|
+
# present, the formula will have issues. If
|
79
|
+
# you're not developing Homebrew, consider
|
80
|
+
# adjusting your PATH rather than using this
|
81
|
+
# flag.
|
82
|
+
# --only-dependencies Install the dependencies with specified
|
83
|
+
# options but do not install the formula
|
84
|
+
# itself.
|
85
|
+
# --cc Attempt to compile using the specified
|
86
|
+
# compiler, which should be the name of the
|
87
|
+
# compiler's executable, e.g. gcc-7 for GCC
|
88
|
+
# 7. In order to use LLVM's clang, specify
|
89
|
+
# llvm_clang. To use the Apple-provided
|
90
|
+
# clang, specify clang. This option will
|
91
|
+
# only accept compilers that are provided by
|
92
|
+
# Homebrew or bundled with macOS. Please do
|
93
|
+
# not file issues if you encounter errors
|
94
|
+
# while using this option.
|
95
|
+
# -s, --build-from-source Compile formula from source even if a
|
96
|
+
# bottle is provided. Dependencies will still
|
97
|
+
# be installed from bottles if they are
|
98
|
+
# available.
|
99
|
+
# --force-bottle Install from a bottle if it exists for the
|
100
|
+
# current or newest version of macOS, even if
|
101
|
+
# it would not normally be used for
|
102
|
+
# installation.
|
103
|
+
# --include-test Install testing dependencies required to
|
104
|
+
# run brew test formula.
|
105
|
+
# --devel If formula defines it, install the
|
106
|
+
# development version.
|
107
|
+
# --HEAD If formula defines it, install the HEAD
|
108
|
+
# version, aka. master, trunk, unstable.
|
109
|
+
# --fetch-HEAD Fetch the upstream repository to detect if
|
110
|
+
# the HEAD installation of the formula is
|
111
|
+
# outdated. Otherwise, the repository's HEAD
|
112
|
+
# will only be checked for updates when a new
|
113
|
+
# stable or development version has been
|
114
|
+
# released.
|
115
|
+
# --keep-tmp Retain the temporary files created during
|
116
|
+
# installation.
|
117
|
+
# --build-bottle Prepare the formula for eventual bottling
|
118
|
+
# during installation, skipping any
|
119
|
+
# post-install steps.
|
120
|
+
# --bottle-arch Optimise bottles for the specified
|
121
|
+
# architecture rather than the oldest
|
122
|
+
# architecture supported by the version of
|
123
|
+
# macOS the bottles are built on.
|
124
|
+
# -f, --force Install without checking for previously
|
125
|
+
# installed keg-only or non-migrated
|
126
|
+
# versions.
|
127
|
+
# -v, --verbose Print the verification and postinstall
|
128
|
+
# steps.
|
129
|
+
# --display-times Print install times for each formula at the
|
130
|
+
# end of the run.
|
131
|
+
# -i, --interactive Download and patch formula, then open a
|
132
|
+
# shell. This allows the user to run
|
133
|
+
# ./configure --help and otherwise
|
134
|
+
# determine how to turn the software package
|
135
|
+
# into a Homebrew package.
|
136
|
+
# -g, --git Create a Git repository, useful for
|
137
|
+
# creating patches to the software.
|
138
|
+
# -h, --help Show this message.
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'brew/utils/string_utils'
|
4
|
+
require 'brew/utils/system_runner'
|
5
|
+
|
6
|
+
module Brew
|
7
|
+
module Commands
|
8
|
+
class List
|
9
|
+
attr_reader :brew_path, :formulae, :options, :system_runner
|
10
|
+
|
11
|
+
def initialize(brew_path, *formulae, **kwargs)
|
12
|
+
@brew_path = brew_path
|
13
|
+
@formulae = formulae.join(' ')
|
14
|
+
@options = parse_args(kwargs)
|
15
|
+
@system_runner = SystemRunner.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute!
|
19
|
+
list_command = "#{brew_path} list #{options} #{formulae}".squish
|
20
|
+
system_runner.print_output(list_command)
|
21
|
+
rescue StandardError => e
|
22
|
+
raise ExecutionError, e
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
BOOLEAN_OPTIONS = %i[
|
28
|
+
full_name unbrewed versions multiple
|
29
|
+
pinned cask 1 l r t verbose debug
|
30
|
+
].freeze
|
31
|
+
|
32
|
+
def parse_args(args)
|
33
|
+
option_list = []
|
34
|
+
|
35
|
+
BOOLEAN_OPTIONS.each do |option|
|
36
|
+
str_option = option.to_s
|
37
|
+
kebab_option = str_option.snake_to_kebab
|
38
|
+
option_list << "--#{kebab_option}" if args[option] || args[str_option] || args[kebab_option]
|
39
|
+
end
|
40
|
+
|
41
|
+
option_list.join(' ')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Usage: brew list, ls [options] [formula]
|
48
|
+
|
49
|
+
# List all installed formulae.
|
50
|
+
|
51
|
+
# If formula is provided, summarise the paths within its current keg.
|
52
|
+
|
53
|
+
# --full-name Print formulae with fully-qualified names.
|
54
|
+
# If --full-name is not passed, other
|
55
|
+
# options (i.e. -1, -l, -r and -t)
|
56
|
+
# are passed to ls(1) which produces the
|
57
|
+
# actual output.
|
58
|
+
# --unbrewed List files in Homebrew's prefix not
|
59
|
+
# installed by Homebrew.
|
60
|
+
# --versions Show the version number for installed
|
61
|
+
# formulae, or only the specified formulae if
|
62
|
+
# formula are provided.
|
63
|
+
# --multiple Only show formulae with multiple versions
|
64
|
+
# installed.
|
65
|
+
# --pinned Show the versions of pinned formulae, or
|
66
|
+
# only the specified (pinned) formulae if
|
67
|
+
# formula are provided. See also pin,
|
68
|
+
# unpin.
|
69
|
+
# --cask List casks
|
70
|
+
# -1 Force output to be one entry per line. This
|
71
|
+
# is the default when output is not to a
|
72
|
+
# terminal.
|
73
|
+
# -l List in long format. If the output is to a
|
74
|
+
# terminal, a total sum for all the file
|
75
|
+
# sizes is printed before the long listing.
|
76
|
+
# -r Reverse the order of the sort to list the
|
77
|
+
# oldest entries first.
|
78
|
+
# -t Sort by time modified, listing most
|
79
|
+
# recently modified first.
|
80
|
+
# -v, --verbose Make some output more verbose.
|
81
|
+
# -d, --debug Display any debugging information.
|
82
|
+
# -h, --help Show this message.
|
@@ -0,0 +1,101 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'brew/utils/string_utils'
|
4
|
+
require 'brew/utils/system_runner'
|
5
|
+
|
6
|
+
module Brew
|
7
|
+
module Commands
|
8
|
+
class Search
|
9
|
+
attr_reader :brew_path, :search_text, :options, :system_runner
|
10
|
+
|
11
|
+
def initialize(brew_path, search_text = nil, **kwargs)
|
12
|
+
@brew_path = brew_path
|
13
|
+
@search_text = search_text
|
14
|
+
@options = parse_args(kwargs)
|
15
|
+
@system_runner = SystemRunner.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute!
|
19
|
+
search_command = "#{brew_path} search #{options} #{search_text}".squish
|
20
|
+
search_output = system_runner.get_output_lines(search_command)
|
21
|
+
|
22
|
+
organize_search_output(search_output)
|
23
|
+
rescue StandardError => e
|
24
|
+
raise Brew::ExecutionError, e
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
BOOLEAN_OPTIONS = %i[
|
30
|
+
formulae casks desc macports fink opensuse
|
31
|
+
fedora debian ubuntu verbose debug
|
32
|
+
].freeze
|
33
|
+
|
34
|
+
def parse_args(args)
|
35
|
+
option_list = []
|
36
|
+
|
37
|
+
BOOLEAN_OPTIONS.each do |option|
|
38
|
+
str_option = option.to_s
|
39
|
+
kebab_option = str_option.snake_to_kebab
|
40
|
+
option_list << "--#{kebab_option}" if args[option] || args[str_option] || args[kebab_option]
|
41
|
+
end
|
42
|
+
|
43
|
+
option_list.join(' ')
|
44
|
+
end
|
45
|
+
|
46
|
+
def organize_search_output(output)
|
47
|
+
organized = {}
|
48
|
+
key = options.include?('casks') ? 'Casks' : 'Formulae'
|
49
|
+
|
50
|
+
output.each do |val|
|
51
|
+
val.strip!
|
52
|
+
if val.start_with?('==>')
|
53
|
+
key = val.split.last.squish
|
54
|
+
organized[key] ||= []
|
55
|
+
else
|
56
|
+
organized[key] ||= []
|
57
|
+
organized[key] << val.squish
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
organized
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Usage: brew search [options] [text|/text/]
|
68
|
+
|
69
|
+
# Perform a substring search of cask tokens and formula names for text. If
|
70
|
+
# text is flanked by slashes, it is interpreted as a regular expression. The
|
71
|
+
# search for text is extended online to homebrew/core and homebrew/cask.
|
72
|
+
|
73
|
+
# If no text is provided, list all locally available formulae (including tapped
|
74
|
+
# ones). No online search is performed.
|
75
|
+
|
76
|
+
# --formulae Without text, list all locally available
|
77
|
+
# formulae (no online search is performed).
|
78
|
+
# With text, search online and locally for
|
79
|
+
# formulae.
|
80
|
+
# --casks Without text, list all locally available
|
81
|
+
# casks (including tapped ones, no online
|
82
|
+
# search is performed). With text, search
|
83
|
+
# online and locally for casks.
|
84
|
+
# --desc Search for formulae with a description
|
85
|
+
# matching text and casks with a name
|
86
|
+
# matching text.
|
87
|
+
# --macports Search for text in the given package
|
88
|
+
# manager's list.
|
89
|
+
# --fink Search for text in the given package
|
90
|
+
# manager's list.
|
91
|
+
# --opensuse Search for text in the given package
|
92
|
+
# manager's list.
|
93
|
+
# --fedora Search for text in the given package
|
94
|
+
# manager's list.
|
95
|
+
# --debian Search for text in the given package
|
96
|
+
# manager's list.
|
97
|
+
# --ubuntu Search for text in the given package
|
98
|
+
# manager's list.
|
99
|
+
# -v, --verbose Make some output more verbose.
|
100
|
+
# -d, --debug Display any debugging information.
|
101
|
+
# -h, --help Show this message.
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'brew/utils/string_utils'
|
4
|
+
require 'brew/utils/system_runner'
|
5
|
+
|
6
|
+
module Brew
|
7
|
+
module Commands
|
8
|
+
class Uninstall
|
9
|
+
attr_reader :brew_path, :formulae, :options, :system_runner
|
10
|
+
|
11
|
+
def initialize(brew_path, *formulae, **kwargs)
|
12
|
+
@brew_path = brew_path
|
13
|
+
@formulae = formulae.join(' ')
|
14
|
+
@options = parse_args(kwargs)
|
15
|
+
@system_runner = SystemRunner.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute!
|
19
|
+
uninstall_command = "#{brew_path} uninstall #{options} #{formulae}".squish
|
20
|
+
system_runner.print_output(uninstall_command)
|
21
|
+
rescue StandardError => e
|
22
|
+
raise Brew::ExecutionError, e
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
BOOLEAN_OPTIONS = %i[force ignore_dependencies debug].freeze
|
28
|
+
|
29
|
+
def parse_args(args)
|
30
|
+
option_list = []
|
31
|
+
|
32
|
+
BOOLEAN_OPTIONS.each do |option|
|
33
|
+
str_option = option.to_s
|
34
|
+
kebab_option = str_option.snake_to_kebab
|
35
|
+
option_list << "--#{kebab_option}" if args[option] || args[str_option] || args[kebab_option]
|
36
|
+
end
|
37
|
+
|
38
|
+
option_list.join(' ')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Usage: brew uninstall, rm, remove [options] formula
|
45
|
+
|
46
|
+
# Uninstall formula.
|
47
|
+
|
48
|
+
# -f, --force Delete all installed versions of formula.
|
49
|
+
# --ignore-dependencies Don't fail uninstall, even if formula is
|
50
|
+
# a dependency of any installed formulae.
|
51
|
+
# -d, --debug Display any debugging information.
|
52
|
+
# -h, --help Show this message.
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'brew/utils/string_utils'
|
4
|
+
require 'brew/utils/system_runner'
|
5
|
+
|
6
|
+
module Brew
|
7
|
+
module Commands
|
8
|
+
class Update
|
9
|
+
attr_reader :brew_path, :options, :system_runner
|
10
|
+
|
11
|
+
def initialize(brew_path, **kwargs)
|
12
|
+
@brew_path = brew_path
|
13
|
+
@options = parse_args(kwargs)
|
14
|
+
@system_runner = SystemRunner.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def execute!
|
18
|
+
update_command = "#{brew_path} update #{options}".squish
|
19
|
+
system_runner.print_output(update_command)
|
20
|
+
rescue StandardError => e
|
21
|
+
raise Brew::ExecutionError, e
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
BOOLEAN_OPTIONS = %i[merge force verbose debug].freeze
|
27
|
+
|
28
|
+
def parse_args(args)
|
29
|
+
option_list = []
|
30
|
+
|
31
|
+
BOOLEAN_OPTIONS.each do |option|
|
32
|
+
str_option = option.to_s
|
33
|
+
kebab_option = str_option.snake_to_kebab
|
34
|
+
option_list << "--#{kebab_option}" if args[option] || args[str_option] || args[kebab_option]
|
35
|
+
end
|
36
|
+
|
37
|
+
option_list.join(' ')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Usage: brew update, up [options]
|
44
|
+
|
45
|
+
# Fetch the newest version of Homebrew and all formulae from GitHub using git(1)
|
46
|
+
# and perform any necessary migrations.
|
47
|
+
|
48
|
+
# --merge Use git merge to apply updates (rather
|
49
|
+
# than git rebase).
|
50
|
+
# -f, --force Always do a slower, full update check (even
|
51
|
+
# if unnecessary).
|
52
|
+
# -v, --verbose Print the directories checked and git
|
53
|
+
# operations performed.
|
54
|
+
# -d, --debug Display a trace of all shell commands as
|
55
|
+
# they are executed.
|
56
|
+
# -h, --help Show this message.
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'brew/utils/string_utils'
|
4
|
+
require 'brew/utils/system_runner'
|
5
|
+
|
6
|
+
module Brew
|
7
|
+
module Commands
|
8
|
+
class Upgrade
|
9
|
+
attr_reader :brew_path, :formulae, :options, :system_runner
|
10
|
+
|
11
|
+
def initialize(brew_path, *formulae, **kwargs)
|
12
|
+
@brew_path = brew_path
|
13
|
+
@formulae = formulae.join(' ')
|
14
|
+
@options = parse_args(kwargs)
|
15
|
+
@system_runner = SystemRunner.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute!
|
19
|
+
upgrade_command = "#{brew_path} upgrade #{options} #{formulae}".squish
|
20
|
+
system_runner.print_output(upgrade_command)
|
21
|
+
rescue StandardError => e
|
22
|
+
raise Brew::ExecutionError, e
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
BOOLEAN_OPTIONS = %i[
|
28
|
+
build_from_source force_bottle fetch_HEAD
|
29
|
+
ignore_pinned keep_tmp force verbose
|
30
|
+
display_times dry_run greedy
|
31
|
+
].freeze
|
32
|
+
|
33
|
+
def parse_args(args)
|
34
|
+
option_list = []
|
35
|
+
|
36
|
+
BOOLEAN_OPTIONS.each do |option|
|
37
|
+
str_option = option.to_s
|
38
|
+
kebab_option = str_option.snake_to_kebab
|
39
|
+
option_list << "--#{kebab_option}" if args[option] || args[str_option] || args[kebab_option]
|
40
|
+
end
|
41
|
+
|
42
|
+
option_list.join(' ')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Usage: brew upgrade [options] [formula]
|
49
|
+
|
50
|
+
# Upgrade outdated, unpinned formulae using the same options they were originally
|
51
|
+
# installed with, plus any appended brew formula options. If formula are
|
52
|
+
# specified, upgrade only the given formula kegs (unless they are pinned; see
|
53
|
+
# pin, unpin).
|
54
|
+
|
55
|
+
# Unless HOMEBREW_NO_INSTALL_CLEANUP is set, brew cleanup will then be run for
|
56
|
+
# the upgraded formulae or, every 30 days, for all formulae.
|
57
|
+
|
58
|
+
# -d, --debug If brewing fails, open an interactive
|
59
|
+
# debugging session with access to IRB or a
|
60
|
+
# shell inside the temporary build directory.
|
61
|
+
# -s, --build-from-source Compile formula from source even if a
|
62
|
+
# bottle is available.
|
63
|
+
# -i, --interactive Download and patch formula, then open a
|
64
|
+
# shell. This allows the user to run
|
65
|
+
# ./configure --help and otherwise
|
66
|
+
# determine how to turn the software package
|
67
|
+
# into a Homebrew package.
|
68
|
+
# --force-bottle Install from a bottle if it exists for the
|
69
|
+
# current or newest version of macOS, even if
|
70
|
+
# it would not normally be used for
|
71
|
+
# installation.
|
72
|
+
# --fetch-HEAD Fetch the upstream repository to detect if
|
73
|
+
# the HEAD installation of the formula is
|
74
|
+
# outdated. Otherwise, the repository's HEAD
|
75
|
+
# will only be checked for updates when a new
|
76
|
+
# stable or development version has been
|
77
|
+
# released.
|
78
|
+
# --ignore-pinned Set a successful exit status even if pinned
|
79
|
+
# formulae are not upgraded.
|
80
|
+
# --keep-tmp Retain the temporary files created during
|
81
|
+
# installation.
|
82
|
+
# -f, --force Install without checking for previously
|
83
|
+
# installed keg-only or non-migrated
|
84
|
+
# versions.
|
85
|
+
# -v, --verbose Print the verification and postinstall
|
86
|
+
# steps.
|
87
|
+
# --display-times Print install times for each formula at the
|
88
|
+
# end of the run.
|
89
|
+
# -n, --dry-run Show what would be upgraded, but do not
|
90
|
+
# actually upgrade anything.
|
91
|
+
# --greedy Upgrade casks with auto_updates or
|
92
|
+
# version :latest
|
93
|
+
# -h, --help Show this message.
|
data/lib/brew/home_brew.rb
CHANGED
@@ -1,58 +1,55 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'brew/commands/info'
|
4
|
+
require 'brew/commands/install'
|
5
|
+
require 'brew/commands/list'
|
6
|
+
require 'brew/commands/search'
|
7
|
+
require 'brew/commands/uninstall'
|
8
|
+
require 'brew/commands/update'
|
9
|
+
require 'brew/commands/upgrade'
|
4
10
|
|
11
|
+
module Brew
|
5
12
|
class HomeBrew
|
6
|
-
|
7
|
-
DEFAULT_BREW_PATH = '/usr/local/bin/brew'.freeze
|
13
|
+
DEFAULT_BREW_PATH = '/usr/local/bin/brew'
|
8
14
|
|
9
15
|
attr_reader :brew_path
|
10
16
|
private :brew_path
|
11
17
|
|
12
|
-
def initialize(brew_path:
|
13
|
-
@brew_path = brew_path
|
14
|
-
raise HomeBrewNotInstalled unless File.executable?(brew_path)
|
18
|
+
def initialize(brew_path: nil)
|
19
|
+
@brew_path = brew_path || DEFAULT_BREW_PATH
|
20
|
+
raise HomeBrewNotInstalled unless File.executable?(@brew_path)
|
21
|
+
end
|
22
|
+
|
23
|
+
def info(formula = [], **kwargs)
|
24
|
+
Commands::Info.new(brew_path, formula, **kwargs).execute!
|
25
|
+
end
|
26
|
+
|
27
|
+
def install(formula, **kwargs)
|
28
|
+
Commands::Install.new(brew_path, formula, **kwargs).execute!
|
15
29
|
end
|
16
30
|
|
17
|
-
def
|
18
|
-
|
19
|
-
run_command(install_command)
|
20
|
-
rescue => e
|
21
|
-
raise HomeBrewError, e
|
31
|
+
def list(formulae = [], **kwargs)
|
32
|
+
Commands::List.new(brew_path, formulae, **kwargs).execute!
|
22
33
|
end
|
34
|
+
alias ls list
|
23
35
|
|
24
|
-
def
|
25
|
-
|
26
|
-
run_command(update_command)
|
27
|
-
rescue => e
|
28
|
-
raise HomeBrewError, e
|
36
|
+
def search(text = nil, **kwargs)
|
37
|
+
Commands::Search.new(brew_path, text, **kwargs).execute!
|
29
38
|
end
|
30
39
|
|
31
|
-
def
|
32
|
-
|
33
|
-
run_command(update_command)
|
34
|
-
rescue => e
|
35
|
-
raise HomeBrewError, e
|
40
|
+
def uninstall(formula, **kwargs)
|
41
|
+
Commands::Uninstall.new(brew_path, formula, **kwargs).execute!
|
36
42
|
end
|
43
|
+
alias rm uninstall
|
44
|
+
alias remove uninstall
|
37
45
|
|
38
|
-
def
|
39
|
-
|
40
|
-
run_command(update_command)
|
41
|
-
rescue => e
|
42
|
-
raise HomeBrewError, e
|
46
|
+
def update(**kwargs)
|
47
|
+
Commands::Update.new(brew_path, **kwargs).execute!
|
43
48
|
end
|
49
|
+
alias up update
|
44
50
|
|
45
|
-
|
46
|
-
|
47
|
-
def run_command(command)
|
48
|
-
IO.popen(command, 'r+') do |io|
|
49
|
-
while line = io.gets
|
50
|
-
$stdout.puts line
|
51
|
-
end
|
52
|
-
io.close
|
53
|
-
end
|
54
|
-
|
55
|
-
raise HomeBrewError unless $?.success?
|
51
|
+
def upgrade(formula = [], **kwargs)
|
52
|
+
Commands::Upgrade.new(brew_path, formula, **kwargs).execute!
|
56
53
|
end
|
57
54
|
end
|
58
|
-
end
|
55
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'English'
|
4
|
+
|
5
|
+
module Brew
|
6
|
+
class SystemRunner
|
7
|
+
def print_output(command)
|
8
|
+
lines = run_with_output(command) do |line|
|
9
|
+
$stdout.puts line
|
10
|
+
end
|
11
|
+
lines.join
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_output_lines(command)
|
15
|
+
run_with_output(command)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def run_with_output(command)
|
21
|
+
lines = []
|
22
|
+
IO.popen(command, 'r+') do |io|
|
23
|
+
while (line = io.gets)
|
24
|
+
yield line if block_given?
|
25
|
+
lines << line
|
26
|
+
end
|
27
|
+
io.close
|
28
|
+
end
|
29
|
+
|
30
|
+
raise "Exited with code #{$CHILD_STATUS.exitstatus}" unless $CHILD_STATUS.success?
|
31
|
+
|
32
|
+
lines
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/brew/version.rb
CHANGED