1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
module Hbc
class CaskError < RuntimeError; end
class AbstractCaskErrorWithToken < CaskError
attr_reader :token
attr_reader :reason
def initialize(token, reason = nil)
@token = token
@reason = reason.to_s
end
end
class CaskNotInstalledError < AbstractCaskErrorWithToken
def to_s
"Cask '#{token}' is not installed."
end
end
class CaskUnavailableError < AbstractCaskErrorWithToken
def to_s
"Cask '#{token}' is unavailable" << (reason.empty? ? "." : ": #{reason}")
end
end
class CaskAlreadyCreatedError < AbstractCaskErrorWithToken
def to_s
%Q(Cask '#{token}' already exists. Run #{Formatter.identifier("brew cask cat #{token}")} to edit it.)
end
end
class CaskAlreadyInstalledError < AbstractCaskErrorWithToken
def to_s
<<-EOS.undent
Cask '#{token}' is already installed.
To re-install #{token}, run:
#{Formatter.identifier("brew cask reinstall #{token}")}
EOS
end
end
class CaskCommandFailedError < CaskError
def initialize(cmd, stdout, stderr, status)
@cmd = cmd
@stdout = stdout
@stderr = stderr
@status = status
end
def to_s
s = "Command failed to execute!\n"
s.concat("\n")
s.concat("==> Failed command:\n")
s.concat(@cmd.join(" ")).concat("\n")
s.concat("\n")
s.concat("==> Standard Output of failed command:\n")
s.concat(@stdout).concat("\n")
s.concat("\n")
s.concat("==> Standard Error of failed command:\n")
s.concat(@stderr).concat("\n")
s.concat("\n")
s.concat("==> Exit status of failed command:\n")
s.concat(@status.inspect).concat("\n")
end
end
class CaskX11DependencyError < AbstractCaskErrorWithToken
def to_s
<<-EOS.undent
Cask '#{token}' requires XQuartz/X11, which can be installed using Homebrew-Cask by running
#{Formatter.identifier("brew cask install xquartz")}
or manually, by downloading the package from
#{Formatter.url("https://www.xquartz.org/")}
EOS
end
end
class CaskCyclicCaskDependencyError < AbstractCaskErrorWithToken
def to_s
"Cask '#{token}' includes cyclic dependencies on other Casks and could not be installed."
end
end
class CaskUnspecifiedError < CaskError
def to_s
"This command requires a Cask token."
end
end
class CaskInvalidError < AbstractCaskErrorWithToken
def to_s
"Cask '#{token}' definition is invalid" << (reason.empty? ? ".": ": #{reason}")
end
end
class CaskTokenMismatchError < CaskInvalidError
def initialize(token, header_token)
super(token, "Token '#{header_token}' in header line does not match the file name.")
end
end
class CaskSha256Error < AbstractCaskErrorWithToken
attr_reader :expected, :actual
def initialize(token, expected = nil, actual = nil)
super(token)
@expected = expected
@actual = actual
end
end
class CaskSha256MissingError < CaskSha256Error
def to_s
<<-EOS.undent
Cask '#{token}' requires a checksum:
#{Formatter.identifier("sha256 '#{actual}'")}
EOS
end
end
class CaskSha256MismatchError < CaskSha256Error
attr_reader :path
def initialize(token, expected, actual, path)
super(token, expected, actual)
@path = path
end
def to_s
<<-EOS.undent
Checksum for Cask '#{token}' does not match.
Expected: #{Formatter.success(expected.to_s)}
Actual: #{Formatter.error(actual.to_s)}
File: #{path}
To retry an incomplete download, remove the file above.
EOS
end
end
class CaskNoShasumError < CaskSha256Error
def to_s
<<-EOS.undent
Cask '#{token}' does not have a sha256 checksum defined and was not installed.
This means you have the #{Formatter.identifier("--require-sha")} option set, perhaps in your HOMEBREW_CASK_OPTS.
EOS
end
end
end
|