mixlib-shellout 3.2.8-universal-mingw32 → 3.3.3-universal-mingw32

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7ecae29284f78e58c184f2ef87e800f05d08f7146910b35626b52577d20557a7
4
- data.tar.gz: a37029ce24c884aecc29916c4a723bce7aa1a52cf297bf0e0ec169b41ae7d76a
3
+ metadata.gz: 3ffdff3b2db45006adab99c670f2059458c840b36b678c1c342c957cbe21e6a7
4
+ data.tar.gz: 1312451c4439639db479b85a6c827916b6d949c72696a055f454c605ddcf63c9
5
5
  SHA512:
6
- metadata.gz: 3ca9c04dd881a615f25398d1e9d3f96e9712153b4c6e41ede5a6d9c8c3df4f60a6b97f586cf984b8237cb8fef3a0bdc0935804745a32cacc5f281299fa1b5f91
7
- data.tar.gz: e5f5b8272ea0222d70cb5a859b88a91c9c457ca8a2595676d2f8b648d31dcf10f871b28d506e06c7c7b14ed170611d4b7cbed04f0ffa7870b1cf61d0a0382afa
6
+ metadata.gz: b27a7b09db45fa03dc9f9aca9b39d7b1b941f155ad12c821b87d7de5ff581310bda534d211b19105a7fbdeffeefd58163e5f296944342bdf5a73933d2839bc99
7
+ data.tar.gz: 0ffac4252bf8df6c13e7a0111aaf84bb3ed6e1eb2ad8a8086bd372b3ba660534a01afda812a9be180c419377e25acd775aa0b8020b775d0885bb2bfdf5203a23
@@ -141,9 +141,36 @@ module Mixlib
141
141
  args.flatten.compact.map(&:to_s)
142
142
  end
143
143
 
144
+ # Join arguments into a string.
145
+ #
146
+ # If the argument ends with a whitespace, use it as-is. Otherwise, add
147
+ # a space at the end
148
+ #
149
+ # @param args [String] variable number of string arguments
150
+ # @return [String] merged string
151
+ #
152
+ def __join_whitespace(*args)
153
+ args.flatten.map { |e| e + (e.rstrip == e ? " " : "") }.join
154
+ end
155
+
144
156
  def __shell_out_command(*args, **options)
145
157
  if __transport_connection
146
- FakeShellOut.new(args, options, __transport_connection.run_command(args.join(" "))) # FIXME: train should accept run_command(*args)
158
+ command = __join_whitespace(args)
159
+ unless ChefUtils.windows?
160
+ if options[:cwd]
161
+ # as `timeout` is used, commands need to be executed in a subshell
162
+ command = "sh -c 'cd #{options[:cwd]}; #{command}'"
163
+ end
164
+
165
+ if options[:input]
166
+ command.concat "<<'COMMANDINPUT'\n"
167
+ command.concat __join_whitespace(options[:input])
168
+ command.concat "COMMANDINPUT\n"
169
+ end
170
+ end
171
+
172
+ # FIXME: train should accept run_command(*args)
173
+ FakeShellOut.new(args, options, __transport_connection.run_command(command, options))
147
174
  else
148
175
  cmd = if options.empty?
149
176
  Mixlib::ShellOut.new(*args)
@@ -181,15 +208,16 @@ module Mixlib
181
208
  @stdout = result.stdout
182
209
  @stderr = result.stderr
183
210
  @exitstatus = result.exit_status
184
- @status = OpenStruct.new(success?: ( exitstatus == 0 ))
211
+ @valid_exit_codes = Array(options[:returns] || 0)
212
+ @status = OpenStruct.new(success?: (@valid_exit_codes.include? exitstatus))
185
213
  end
186
214
 
187
215
  def error?
188
- exitstatus != 0
216
+ @valid_exit_codes.none?(exitstatus)
189
217
  end
190
218
 
191
219
  def error!
192
- raise Mixlib::ShellOut::ShellCommandFailed, "Unexpected exit status of #{exitstatus} running #{@args}" if error?
220
+ raise Mixlib::ShellOut::ShellCommandFailed, "Unexpected exit status of #{exitstatus} running #{@args}: #{stderr}" if error?
193
221
  end
194
222
  end
195
223
  end
@@ -20,11 +20,6 @@ module Mixlib
20
20
  class ShellOut
21
21
  module Unix
22
22
 
23
- # "1.8.7" as a frozen string. We use this with a hack that disables GC to
24
- # avoid segfaults on Ruby 1.8.7, so we need to allocate the fewest
25
- # objects we possibly can.
26
- ONE_DOT_EIGHT_DOT_SEVEN = "1.8.7".freeze
27
-
28
23
  # Option validation that is unix specific
29
24
  def validate_options(opts)
30
25
  if opts[:elevated]
@@ -99,12 +94,6 @@ module Mixlib
99
94
 
100
95
  configure_parent_process_file_descriptors
101
96
 
102
- # Ruby 1.8.7 and 1.8.6 from mid 2009 try to allocate objects during GC
103
- # when calling IO.select and IO#read. Disabling GC works around the
104
- # segfault, but obviously it's a bad workaround. We no longer support
105
- # 1.8.6 so we only need this hack for 1.8.7.
106
- GC.disable if RUBY_VERSION == ONE_DOT_EIGHT_DOT_SEVEN
107
-
108
97
  # CHEF-3390: Marshall.load on Ruby < 1.8.7p369 also has a GC bug related
109
98
  # to Marshall.load, so try disabling GC first.
110
99
  propagate_pre_exec_failure
@@ -1,5 +1,5 @@
1
1
  module Mixlib
2
2
  class ShellOut
3
- VERSION = "3.2.8".freeze
3
+ VERSION = "3.3.3".freeze
4
4
  end
5
5
  end
@@ -60,6 +60,7 @@ module Mixlib
60
60
  stderr_read, stderr_write = IO.pipe
61
61
  stdin_read, stdin_write = IO.pipe
62
62
  open_streams = [ stdout_read, stderr_read ]
63
+ @execution_time = 0
63
64
 
64
65
  begin
65
66
 
@@ -105,6 +106,8 @@ module Mixlib
105
106
  wait_status = WaitForSingleObject(process.process_handle, 0)
106
107
  case wait_status
107
108
  when WAIT_OBJECT_0
109
+ # Save the execution time
110
+ @execution_time = Time.now - start_wait
108
111
  # Get process exit code
109
112
  exit_code = [0].pack("l")
110
113
  unless GetExitCodeProcess(process.process_handle, exit_code)
@@ -127,6 +130,9 @@ module Mixlib
127
130
  logger&.warn("Failed to kill timed out process #{process.process_id}")
128
131
  end
129
132
 
133
+ # Save the execution time
134
+ @execution_time = Time.now - start_wait
135
+
130
136
  raise Mixlib::ShellOut::CommandTimeout, [
131
137
  "command timed out:",
132
138
  format_for_exception,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mixlib-shellout
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.8
4
+ version: 3.3.3
5
5
  platform: universal-mingw32
6
6
  authors:
7
7
  - Chef Software Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-08 00:00:00.000000000 Z
11
+ date: 2024-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef-utils