hackmac 1.3.0 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/bin/gfxmon +5 -5
- data/hackmac.gemspec +5 -5
- data/lib/hackmac/graph/display.rb +200 -0
- data/lib/hackmac/graph.rb +90 -65
- data/lib/hackmac/utils.rb +5 -6
- data/lib/hackmac/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52eecabaaacf4b30bdfd2c2d49ca2521d45dd81da1c75f1b3a02af4b94a0d01c
|
4
|
+
data.tar.gz: d84925f226ff82966a7a42f21143ee273715f013ed7907ab3f28273797b241f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b13786a08e87c4f162d3ce6090115c286f3feaa476aedf354d94e6a74f4e4fb225769d4fb2a3c304eec4fa77423b96e19b5f401ee0631604e4fda816d1c51b8
|
7
|
+
data.tar.gz: b6bb795279266902645e82382f253c050d2eb0d74c0f2c3ad91f7cf02334f28767727baa86b49d99d9c46081f987c3f12034330b87a7e6a4dd6a5581ef1f57fd
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.4.1
|
data/bin/gfxmon
CHANGED
@@ -13,7 +13,7 @@ require 'amatch'
|
|
13
13
|
require 'search_ui'
|
14
14
|
include SearchUI
|
15
15
|
|
16
|
-
$opts = go 'c:
|
16
|
+
$opts = go 'c:m:n:jlh', defaults: { ?s => true, ?n => 5 }
|
17
17
|
|
18
18
|
def usage
|
19
19
|
puts <<~end
|
@@ -25,7 +25,7 @@ def usage
|
|
25
25
|
-l output GPU performance data as list
|
26
26
|
-j output GPU performance data as json
|
27
27
|
-n SECONDS measure every SECONDS
|
28
|
-
-
|
28
|
+
-m METRIC output graph for performance METRIC
|
29
29
|
-c COLOR output graph in this terminal COLOR (between 0 - 255)
|
30
30
|
|
31
31
|
end
|
@@ -47,14 +47,14 @@ end
|
|
47
47
|
|
48
48
|
def list(ps)
|
49
49
|
max = ps.keys.max_by(&:size)&.size&.to_i
|
50
|
-
|
50
|
+
include Hackmac::Graph::Formatters
|
51
51
|
puts ps.map { |n, v|
|
52
|
-
("%-#{max}s" % n) + " " + ("%s" %
|
52
|
+
("%-#{max}s" % n) + " " + ("%s" % send(derive_formatter(n), v)).bold
|
53
53
|
}
|
54
54
|
end
|
55
55
|
|
56
56
|
def choose_metric(ps)
|
57
|
-
case metric = $opts[?
|
57
|
+
case metric = $opts[?m]
|
58
58
|
when nil
|
59
59
|
ps_names = ps.keys
|
60
60
|
metric = Search.new(
|
data/hackmac.gemspec
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: hackmac 1.
|
2
|
+
# stub: hackmac 1.4.1 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "hackmac".freeze
|
6
|
-
s.version = "1.
|
6
|
+
s.version = "1.4.1"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Florian Frank".freeze]
|
11
|
-
s.date = "2023-05-
|
11
|
+
s.date = "2023-05-28"
|
12
12
|
s.description = "This ruby gem provides some useful tools for working with a Hackintosh.".freeze
|
13
13
|
s.email = "flori@ping.de".freeze
|
14
14
|
s.executables = ["efi".freeze, "gfxmon".freeze, "usb".freeze]
|
15
|
-
s.extra_rdoc_files = ["README.md".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/asset_tools.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/github_source.rb".freeze, "lib/hackmac/graph.rb".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/oc.rb".freeze, "lib/hackmac/oc_upgrader.rb".freeze, "lib/hackmac/oc_validator.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/url_download.rb".freeze, "lib/hackmac/utils.rb".freeze, "lib/hackmac/version.rb".freeze]
|
16
|
-
s.files = [".gitignore".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/efi".freeze, "bin/gfxmon".freeze, "bin/usb".freeze, "hackmac.gemspec".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/asset_tools.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/github_source.rb".freeze, "lib/hackmac/graph.rb".freeze, "lib/hackmac/hackmac.yml".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/oc.rb".freeze, "lib/hackmac/oc_upgrader.rb".freeze, "lib/hackmac/oc_validator.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/url_download.rb".freeze, "lib/hackmac/utils.rb".freeze, "lib/hackmac/version.rb".freeze]
|
15
|
+
s.extra_rdoc_files = ["README.md".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/asset_tools.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/github_source.rb".freeze, "lib/hackmac/graph.rb".freeze, "lib/hackmac/graph/display.rb".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/oc.rb".freeze, "lib/hackmac/oc_upgrader.rb".freeze, "lib/hackmac/oc_validator.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/url_download.rb".freeze, "lib/hackmac/utils.rb".freeze, "lib/hackmac/version.rb".freeze]
|
16
|
+
s.files = [".gitignore".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/efi".freeze, "bin/gfxmon".freeze, "bin/usb".freeze, "hackmac.gemspec".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/asset_tools.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/github_source.rb".freeze, "lib/hackmac/graph.rb".freeze, "lib/hackmac/graph/display.rb".freeze, "lib/hackmac/hackmac.yml".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/oc.rb".freeze, "lib/hackmac/oc_upgrader.rb".freeze, "lib/hackmac/oc_validator.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/url_download.rb".freeze, "lib/hackmac/utils.rb".freeze, "lib/hackmac/version.rb".freeze]
|
17
17
|
s.homepage = "http://github.com/flori/hackmac".freeze
|
18
18
|
s.rdoc_options = ["--title".freeze, "Hackmac - Some useful tools for working with a Hackintosh".freeze, "--main".freeze, "README.md".freeze]
|
19
19
|
s.rubygems_version = "3.3.26".freeze
|
@@ -0,0 +1,200 @@
|
|
1
|
+
class Hackmac::Graph
|
2
|
+
class Display
|
3
|
+
ANSI = Term::ANSIColor
|
4
|
+
|
5
|
+
class Cell < Struct.new(:char, :color, :on_color, :styles)
|
6
|
+
def ==(other)
|
7
|
+
to_a == other.to_a
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
ANSI.color(color) {
|
12
|
+
ANSI.on_color(on_color) {
|
13
|
+
styles.inject(char) { |c, s|
|
14
|
+
ANSI.send(s) { c }
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(lines, columns)
|
22
|
+
@lines_range = 1..lines
|
23
|
+
@columns_range = 1..columns
|
24
|
+
clear
|
25
|
+
end
|
26
|
+
|
27
|
+
def clear
|
28
|
+
@x = 1
|
29
|
+
@y = 1
|
30
|
+
@color = 15
|
31
|
+
@on_color = 0
|
32
|
+
@styles = []
|
33
|
+
@cells =
|
34
|
+
Array.new(lines) {
|
35
|
+
Array.new(columns) {
|
36
|
+
Cell.new(' ', @color, @on_color, @styles)
|
37
|
+
}
|
38
|
+
}
|
39
|
+
reset
|
40
|
+
end
|
41
|
+
|
42
|
+
def reset
|
43
|
+
@color = 15
|
44
|
+
@on_color = 0
|
45
|
+
@styles = []
|
46
|
+
self
|
47
|
+
end
|
48
|
+
|
49
|
+
def each(&block)
|
50
|
+
Enumerator.new do |enum|
|
51
|
+
@lines_range.each do |y|
|
52
|
+
@columns_range.each do |x|
|
53
|
+
enum.yield y, x, @cells[y - 1][x - 1]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end.each(&block)
|
57
|
+
end
|
58
|
+
|
59
|
+
def -(old)
|
60
|
+
dimensions != old.dimensions and raise ArgumentError,
|
61
|
+
"old dimensions #{old.dimensions.inspect} don't match #{dimensions.inspect}"
|
62
|
+
result = ''
|
63
|
+
each.zip(old.each) do |(my, mx, me), (_, _, old)|
|
64
|
+
if me != old
|
65
|
+
result << ANSI.move_to(my, mx) << me.to_s
|
66
|
+
end
|
67
|
+
end
|
68
|
+
result
|
69
|
+
end
|
70
|
+
|
71
|
+
def to_s
|
72
|
+
each.inject(ANSI.clear_screen) do |s, (y, x, c)|
|
73
|
+
s << ANSI.move_to(y, x) << c.to_s
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def inspect
|
78
|
+
"#<#{self.class}: #{columns}×#{lines}>"
|
79
|
+
end
|
80
|
+
|
81
|
+
attr_reader :x
|
82
|
+
|
83
|
+
attr_reader :y
|
84
|
+
|
85
|
+
def lines
|
86
|
+
@lines_range.end
|
87
|
+
end
|
88
|
+
|
89
|
+
def columns
|
90
|
+
@columns_range.end
|
91
|
+
end
|
92
|
+
|
93
|
+
def dimensions
|
94
|
+
[ lines, columns ]
|
95
|
+
end
|
96
|
+
|
97
|
+
def styled(*s)
|
98
|
+
if nope = s.find { !style?(_1) }
|
99
|
+
raise ArgumentError, "#{nope} is not a style"
|
100
|
+
end
|
101
|
+
@styles = s
|
102
|
+
self
|
103
|
+
end
|
104
|
+
|
105
|
+
def at(y, x)
|
106
|
+
@lines_range.include?(y) or
|
107
|
+
raise ArgumentError, "y #{y} out of lines range #@lines_range"
|
108
|
+
@columns_range.include?(x) or
|
109
|
+
raise ArgumentError, "x #{x} out of columns range #@columns_range"
|
110
|
+
@y, @x = y, x
|
111
|
+
self
|
112
|
+
end
|
113
|
+
|
114
|
+
def put(char)
|
115
|
+
char.size == 1 or
|
116
|
+
raise ArgumentError, "#{char} is not single character"
|
117
|
+
@cells[@y - 1][@x - 1] = Cell.new(char, @color, @on_color, @styles)
|
118
|
+
self
|
119
|
+
end
|
120
|
+
|
121
|
+
def write(string)
|
122
|
+
string.each_char do |char|
|
123
|
+
put(char)
|
124
|
+
if x < columns - 1
|
125
|
+
at(y, x + 1)
|
126
|
+
else
|
127
|
+
break
|
128
|
+
end
|
129
|
+
end
|
130
|
+
self
|
131
|
+
end
|
132
|
+
|
133
|
+
def top
|
134
|
+
at(1, x)
|
135
|
+
end
|
136
|
+
|
137
|
+
def bottom
|
138
|
+
at(lines, x)
|
139
|
+
end
|
140
|
+
|
141
|
+
def left
|
142
|
+
at(y, 1)
|
143
|
+
end
|
144
|
+
|
145
|
+
def right
|
146
|
+
at(y, columns)
|
147
|
+
end
|
148
|
+
|
149
|
+
def centered
|
150
|
+
at(lines / 2, columns / 2)
|
151
|
+
end
|
152
|
+
|
153
|
+
def write_centered(string)
|
154
|
+
at(@y, (columns - string.size) / 2).write(string)
|
155
|
+
end
|
156
|
+
|
157
|
+
def get
|
158
|
+
@cells[@y - 1][@x - 1]
|
159
|
+
end
|
160
|
+
|
161
|
+
def color(color)
|
162
|
+
@color = attribute!(color)
|
163
|
+
self
|
164
|
+
end
|
165
|
+
|
166
|
+
def on_color(on_color)
|
167
|
+
@on_color = attribute!(on_color)
|
168
|
+
self
|
169
|
+
end
|
170
|
+
|
171
|
+
private
|
172
|
+
|
173
|
+
def style?(s)
|
174
|
+
[
|
175
|
+
:bold,
|
176
|
+
:dark,
|
177
|
+
:faint,
|
178
|
+
:italic,
|
179
|
+
:underline,
|
180
|
+
:underscore,
|
181
|
+
:blink,
|
182
|
+
:rapid_blink,
|
183
|
+
:reverse,
|
184
|
+
:negative,
|
185
|
+
:concealed,
|
186
|
+
:conceal,
|
187
|
+
:strikethrough,
|
188
|
+
].member?(s)
|
189
|
+
end
|
190
|
+
|
191
|
+
def attribute?(a)
|
192
|
+
Term::ANSIColor::Attribute[a]
|
193
|
+
end
|
194
|
+
|
195
|
+
def attribute!(a)
|
196
|
+
attribute?(a) or
|
197
|
+
raise ArgumentError, "#{a.inspect} is not a color attribute"
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
data/lib/hackmac/graph.rb
CHANGED
@@ -4,7 +4,39 @@ require 'tins'
|
|
4
4
|
class Hackmac::Graph
|
5
5
|
include Term::ANSIColor
|
6
6
|
|
7
|
-
|
7
|
+
include\
|
8
|
+
module Formatters
|
9
|
+
def as_bytes(value)
|
10
|
+
Tins::Unit.format(value, prefix: :uc, format: '%.3f%U', unit: 'B')
|
11
|
+
end
|
12
|
+
|
13
|
+
def as_hertz(value)
|
14
|
+
Tins::Unit.format(value, prefix: :uc, format: '%.3f%U', unit: 'Hz')
|
15
|
+
end
|
16
|
+
|
17
|
+
def as_celsius(value)
|
18
|
+
"#{value}°"
|
19
|
+
end
|
20
|
+
|
21
|
+
def as_percent(value)
|
22
|
+
"#{value}%"
|
23
|
+
end
|
24
|
+
|
25
|
+
def as_default(value)
|
26
|
+
value.to_s
|
27
|
+
end
|
28
|
+
|
29
|
+
self
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize(
|
33
|
+
title:,
|
34
|
+
value: -> i { 0 },
|
35
|
+
format_value: nil,
|
36
|
+
sleep: nil,
|
37
|
+
color: nil
|
38
|
+
)
|
39
|
+
sleep >= 0 or raise ArgumentError, 'sleep has to be >= 0'
|
8
40
|
@title = title
|
9
41
|
@value = value
|
10
42
|
@format_value = format_value
|
@@ -12,13 +44,12 @@ class Hackmac::Graph
|
|
12
44
|
@continue = false
|
13
45
|
@data = []
|
14
46
|
@color = color
|
47
|
+
@mutex = Mutex.new
|
15
48
|
end
|
16
49
|
|
17
50
|
def start
|
18
51
|
install_handlers
|
19
52
|
full_reset
|
20
|
-
perform hide_cursor
|
21
|
-
@continue = true
|
22
53
|
start_loop
|
23
54
|
end
|
24
55
|
|
@@ -34,42 +65,45 @@ class Hackmac::Graph
|
|
34
65
|
color = pick_color
|
35
66
|
color_light = color.to_rgb_triple.to_hsl_triple.lighten(15) rescue color
|
36
67
|
i = 0
|
68
|
+
@continue = true
|
37
69
|
while @continue
|
38
|
-
@
|
70
|
+
@full_reset and full_reset
|
71
|
+
perform hide_cursor
|
39
72
|
|
40
73
|
@data << @value.(i)
|
41
|
-
@data = data.last(
|
74
|
+
@data = data.last(columns)
|
42
75
|
|
43
76
|
y_width = (data.max - data.min).to_f
|
44
77
|
if y_width == 0
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
maybe_sleep
|
78
|
+
@display.reset.bottom.styled(:bold).
|
79
|
+
write_centered("#@title / #{sleep_duration}").
|
80
|
+
reset.centered.styled(:italic).write_centered("no data")
|
81
|
+
perform_display_diff
|
82
|
+
sleep_now
|
51
83
|
next
|
52
84
|
end
|
53
85
|
|
54
|
-
|
86
|
+
@display.reset
|
55
87
|
data.each_with_index do |value, x|
|
56
|
-
x = x +
|
88
|
+
x = x + columns - data.size + 1
|
57
89
|
y = lines - (((value - data.min) * lines / y_width)).round + 1
|
58
90
|
y.upto(lines) do |iy|
|
59
|
-
|
91
|
+
@display.at(iy, x).on_color(
|
92
|
+
y == iy ? color : color_light
|
93
|
+
).write(' ')
|
60
94
|
end
|
61
95
|
end
|
62
96
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
97
|
+
@display.reset.bottom.styled(:bold).
|
98
|
+
write_centered("#@title #{format_value(data.last)} / #{sleep_duration}")
|
99
|
+
@display.reset.styled(:bold).
|
100
|
+
left.top.write(format_value(data.max)).
|
101
|
+
left.bottom.write(format_value(data.min))
|
68
102
|
|
69
|
-
|
103
|
+
perform_display_diff
|
104
|
+
sleep_now
|
70
105
|
end
|
71
|
-
|
72
|
-
rescue *[ Interrupt, defined?(IRB::Abort) && IRB::Abort ].compact
|
106
|
+
ensure
|
73
107
|
stop
|
74
108
|
end
|
75
109
|
|
@@ -77,18 +111,18 @@ class Hackmac::Graph
|
|
77
111
|
print *a
|
78
112
|
end
|
79
113
|
|
80
|
-
|
114
|
+
def columns
|
115
|
+
@display.columns
|
116
|
+
end
|
81
117
|
|
82
|
-
|
118
|
+
def lines
|
119
|
+
@display.lines
|
120
|
+
end
|
83
121
|
|
84
122
|
attr_reader :data
|
85
123
|
|
86
|
-
def as_title(text)
|
87
|
-
move_to(lines, (cols - text.size) / 2) { bold{text} }
|
88
|
-
end
|
89
|
-
|
90
124
|
def sleep_duration
|
91
|
-
|
125
|
+
"#{@sleep}s"
|
92
126
|
end
|
93
127
|
|
94
128
|
def format_value(value)
|
@@ -102,26 +136,6 @@ class Hackmac::Graph
|
|
102
136
|
end
|
103
137
|
end
|
104
138
|
|
105
|
-
def as_bytes(value)
|
106
|
-
Tins::Unit.format(value, prefix: :uc, format: '%.3f%U', unit: 'B')
|
107
|
-
end
|
108
|
-
|
109
|
-
def as_hertz(value)
|
110
|
-
Tins::Unit.format(value, prefix: :uc, format: '%.3f%U', unit: 'Hz')
|
111
|
-
end
|
112
|
-
|
113
|
-
def as_celsius(value)
|
114
|
-
"#{value}°"
|
115
|
-
end
|
116
|
-
|
117
|
-
def as_percent(value)
|
118
|
-
"#{value}%"
|
119
|
-
end
|
120
|
-
|
121
|
-
def as_default(value)
|
122
|
-
value.to_s
|
123
|
-
end
|
124
|
-
|
125
139
|
def pick_color
|
126
140
|
Term::ANSIColor::Attribute[
|
127
141
|
case @color
|
@@ -139,14 +153,22 @@ class Hackmac::Graph
|
|
139
153
|
]
|
140
154
|
end
|
141
155
|
|
142
|
-
def
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
156
|
+
def sleep_now
|
157
|
+
sleep @sleep
|
158
|
+
end
|
159
|
+
|
160
|
+
def perform_display_diff
|
161
|
+
@mutex.synchronize do
|
162
|
+
unless @old_display && @old_display.dimensions == @display.dimensions
|
163
|
+
@old_display = @display.dup.clear
|
164
|
+
end
|
165
|
+
perform @display - @old_display
|
166
|
+
@display, @old_display = @old_display.clear, @display
|
167
|
+
perform move_to(lines, columns)
|
147
168
|
end
|
148
169
|
end
|
149
170
|
|
171
|
+
|
150
172
|
def normalize_value(value)
|
151
173
|
case value
|
152
174
|
when Float
|
@@ -157,20 +179,23 @@ class Hackmac::Graph
|
|
157
179
|
end
|
158
180
|
|
159
181
|
def full_reset
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
182
|
+
@mutex.synchronize do
|
183
|
+
perform reset, clear_screen, move_home, show_cursor
|
184
|
+
winsize = Tins::Terminal.winsize
|
185
|
+
@display = Hackmac::Graph::Display.new(*winsize)
|
186
|
+
@old_display = Hackmac::Graph::Display.new(*winsize)
|
187
|
+
perform @display
|
188
|
+
@full_reset = false
|
189
|
+
end
|
165
190
|
end
|
166
191
|
|
167
192
|
def install_handlers
|
168
193
|
at_exit { full_reset }
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
move_to(lines / 2, (cols - "Zzz…".size) / 2) { "Zzz…".italic }
|
174
|
-
}
|
194
|
+
trap(:SIGWINCH) do
|
195
|
+
@full_reset = true
|
196
|
+
perform reset, clear_screen, move_home, 'Zzz…'
|
197
|
+
end
|
175
198
|
end
|
176
199
|
end
|
200
|
+
|
201
|
+
require 'hackmac/graph/display'
|
data/lib/hackmac/utils.rb
CHANGED
@@ -13,17 +13,16 @@ module Hackmac
|
|
13
13
|
|
14
14
|
def x(cmd, verbose: true)
|
15
15
|
prompt = cmd =~ /\A\s*sudo/ ? ?# : ?$
|
16
|
+
print "#{prompt} #{cmd}".color(27)
|
17
|
+
puts verbose ? "" : " >/dev/null".yellow
|
16
18
|
output = `#{cmd} 2>&1`
|
17
19
|
if $?.success?
|
18
|
-
|
19
|
-
puts verbose ? "" : " >/dev/null".yellow
|
20
|
+
puts "✅ Command succeded!".green
|
20
21
|
else
|
21
|
-
|
22
|
-
puts verbose ? "" : " >/dev/null".yellow
|
23
|
-
STDERR.puts "command #{cmd.inspect} failed with exit status #{$?.exitstatus}".on_red.white
|
22
|
+
puts "⚠️ Command #{cmd.inspect} failed with exit status #{$?.exitstatus}".on_red.white
|
24
23
|
end
|
25
24
|
if verbose
|
26
|
-
|
25
|
+
puts output.italic
|
27
26
|
end
|
28
27
|
output
|
29
28
|
end
|
data/lib/hackmac/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hackmac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Frank
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_hadar
|
@@ -151,6 +151,7 @@ extra_rdoc_files:
|
|
151
151
|
- lib/hackmac/disks.rb
|
152
152
|
- lib/hackmac/github_source.rb
|
153
153
|
- lib/hackmac/graph.rb
|
154
|
+
- lib/hackmac/graph/display.rb
|
154
155
|
- lib/hackmac/kext.rb
|
155
156
|
- lib/hackmac/kext_upgrader.rb
|
156
157
|
- lib/hackmac/oc.rb
|
@@ -176,6 +177,7 @@ files:
|
|
176
177
|
- lib/hackmac/disks.rb
|
177
178
|
- lib/hackmac/github_source.rb
|
178
179
|
- lib/hackmac/graph.rb
|
180
|
+
- lib/hackmac/graph/display.rb
|
179
181
|
- lib/hackmac/hackmac.yml
|
180
182
|
- lib/hackmac/kext.rb
|
181
183
|
- lib/hackmac/kext_upgrader.rb
|