mixlib-shellout 3.3.4-x64-mingw-ucrt → 3.3.8-x64-mingw-ucrt
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/lib/mixlib/shellout/helper.rb +9 -5
 - data/lib/mixlib/shellout/unix.rb +23 -3
 - data/lib/mixlib/shellout/version.rb +1 -1
 - data/lib/mixlib/shellout.rb +8 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: b84ca3d9ea62bbabc402ac741dcda9eff32495378a27c27fa0ec0fef6076b887
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 8cc11e8c014e0b77d67b273c6117d4163b09f5e7614850873dd8f9d62168fd56
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: b0bee8a9ff62a013149b920b10f7eda9d51bc2d65345ecca5b5c3e449cc462dbe3addb161f1c8953372ffb4093aaf40db148296ce21b7acba84b1c01b39c8bd7
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 909d566f81db461a35287e82cac8c3a5595046bda3c305c7deb2ed2f97ff5408f54d116c709fab5b2aa61d26ab28e5c4382204b3dcf90b606890d111aa45301f
         
     | 
| 
         @@ -149,10 +149,14 @@ module Mixlib 
     | 
|
| 
       149 
149 
     | 
    
         
             
                  # @param args [String] variable number of string arguments
         
     | 
| 
       150 
150 
     | 
    
         
             
                  # @return [String] merged string
         
     | 
| 
       151 
151 
     | 
    
         
             
                  #
         
     | 
| 
       152 
     | 
    
         
            -
                  def __join_whitespace(*args)
         
     | 
| 
       153 
     | 
    
         
            -
                    args. 
     | 
| 
       154 
     | 
    
         
            -
                      arg. 
     | 
| 
       155 
     | 
    
         
            -
             
     | 
| 
      
 152 
     | 
    
         
            +
                  def __join_whitespace(*args, quote: false)
         
     | 
| 
      
 153 
     | 
    
         
            +
                    args.map do |arg|
         
     | 
| 
      
 154 
     | 
    
         
            +
                      if arg.is_a?(Array)
         
     | 
| 
      
 155 
     | 
    
         
            +
                        __join_whitespace(*arg, quote: arg.count > 1)
         
     | 
| 
      
 156 
     | 
    
         
            +
                      else
         
     | 
| 
      
 157 
     | 
    
         
            +
                        arg = arg.include?(" ") ? sprintf('"%s"', arg) : arg if quote
         
     | 
| 
      
 158 
     | 
    
         
            +
                        arg.strip
         
     | 
| 
      
 159 
     | 
    
         
            +
                      end
         
     | 
| 
       156 
160 
     | 
    
         
             
                    end.join(" ")
         
     | 
| 
       157 
161 
     | 
    
         
             
                  end
         
     | 
| 
       158 
162 
     | 
    
         | 
| 
         @@ -168,7 +172,7 @@ module Mixlib 
     | 
|
| 
       168 
172 
     | 
    
         
             
                        if options[:input]
         
     | 
| 
       169 
173 
     | 
    
         
             
                          command.concat "<<'COMMANDINPUT'\n"
         
     | 
| 
       170 
174 
     | 
    
         
             
                          command.concat __join_whitespace(options[:input])
         
     | 
| 
       171 
     | 
    
         
            -
                          command.concat " 
     | 
| 
      
 175 
     | 
    
         
            +
                          command.concat "\nCOMMANDINPUT\n"
         
     | 
| 
       172 
176 
     | 
    
         
             
                        end
         
     | 
| 
       173 
177 
     | 
    
         
             
                      end
         
     | 
| 
       174 
178 
     | 
    
         | 
    
        data/lib/mixlib/shellout/unix.rb
    CHANGED
    
    | 
         @@ -16,6 +16,8 @@ 
     | 
|
| 
       16 
16 
     | 
    
         
             
            # limitations under the License.
         
     | 
| 
       17 
17 
     | 
    
         
             
            #
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
      
 19 
     | 
    
         
            +
            require "fileutils" unless defined?(FileUtils)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
       19 
21 
     | 
    
         
             
            module Mixlib
         
     | 
| 
       20 
22 
     | 
    
         
             
              class ShellOut
         
     | 
| 
       21 
23 
     | 
    
         
             
                module Unix
         
     | 
| 
         @@ -131,7 +133,7 @@ module Mixlib 
     | 
|
| 
       131 
133 
     | 
    
         
             
                    reap_errant_child if should_reap?
         
     | 
| 
       132 
134 
     | 
    
         
             
                    # make one more pass to get the last of the output after the
         
     | 
| 
       133 
135 
     | 
    
         
             
                    # child process dies
         
     | 
| 
       134 
     | 
    
         
            -
                    attempt_buffer_read
         
     | 
| 
      
 136 
     | 
    
         
            +
                    attempt_buffer_read(0)
         
     | 
| 
       135 
137 
     | 
    
         
             
                    # no matter what happens, turn the GC back on, and hope whatever busted
         
     | 
| 
       136 
138 
     | 
    
         
             
                    # version of ruby we're on doesn't allocate some objects during the next
         
     | 
| 
       137 
139 
     | 
    
         
             
                    # GC run.
         
     | 
| 
         @@ -176,6 +178,16 @@ module Mixlib 
     | 
|
| 
       176 
178 
     | 
    
         
             
                    Dir.chdir(cwd) if cwd
         
     | 
| 
       177 
179 
     | 
    
         
             
                  end
         
     | 
| 
       178 
180 
     | 
    
         | 
| 
      
 181 
     | 
    
         
            +
                  def set_cgroup
         
     | 
| 
      
 182 
     | 
    
         
            +
                    new_cgroup_path = "/sys/fs/cgroup/#{cgroup}"
         
     | 
| 
      
 183 
     | 
    
         
            +
                    # Create cgroup if missing
         
     | 
| 
      
 184 
     | 
    
         
            +
                    unless Dir.exist?(new_cgroup_path)
         
     | 
| 
      
 185 
     | 
    
         
            +
                      FileUtils.mkdir_p new_cgroup_path
         
     | 
| 
      
 186 
     | 
    
         
            +
                    end
         
     | 
| 
      
 187 
     | 
    
         
            +
                    # Migrate current process to newly cgroup, any subprocesses will run inside new cgroup
         
     | 
| 
      
 188 
     | 
    
         
            +
                    File.write("#{new_cgroup_path}/cgroup.procs", Process.pid.to_s)
         
     | 
| 
      
 189 
     | 
    
         
            +
                  end
         
     | 
| 
      
 190 
     | 
    
         
            +
             
     | 
| 
       179 
191 
     | 
    
         
             
                  # Since we call setsid the child_pgid will be the child_pid, set to negative here
         
     | 
| 
       180 
192 
     | 
    
         
             
                  # so it can be directly used in arguments to kill, wait, etc.
         
     | 
| 
       181 
193 
     | 
    
         
             
                  def child_pgid
         
     | 
| 
         @@ -265,8 +277,8 @@ module Mixlib 
     | 
|
| 
       265 
277 
     | 
    
         
             
                    child_stdin.close # Kick things off
         
     | 
| 
       266 
278 
     | 
    
         
             
                  end
         
     | 
| 
       267 
279 
     | 
    
         | 
| 
       268 
     | 
    
         
            -
                  def attempt_buffer_read
         
     | 
| 
       269 
     | 
    
         
            -
                    ready = IO.select(open_pipes, nil, nil,  
     | 
| 
      
 280 
     | 
    
         
            +
                  def attempt_buffer_read(timeout = READ_WAIT_TIME)
         
     | 
| 
      
 281 
     | 
    
         
            +
                    ready = IO.select(open_pipes, nil, nil, timeout)
         
     | 
| 
       270 
282 
     | 
    
         
             
                    if ready
         
     | 
| 
       271 
283 
     | 
    
         
             
                      read_stdout_to_buffer if ready.first.include?(child_stdout)
         
     | 
| 
       272 
284 
     | 
    
         
             
                      read_stderr_to_buffer if ready.first.include?(child_stderr)
         
     | 
| 
         @@ -304,6 +316,10 @@ module Mixlib 
     | 
|
| 
       304 
316 
     | 
    
         
             
                    open_pipes.delete(child_process_status)
         
     | 
| 
       305 
317 
     | 
    
         
             
                  end
         
     | 
| 
       306 
318 
     | 
    
         | 
| 
      
 319 
     | 
    
         
            +
                  def cgroupv2_available?
         
     | 
| 
      
 320 
     | 
    
         
            +
                    File.read("/proc/mounts").match?(%r{^cgroup2 /sys/fs/cgroup})
         
     | 
| 
      
 321 
     | 
    
         
            +
                  end
         
     | 
| 
      
 322 
     | 
    
         
            +
             
     | 
| 
       307 
323 
     | 
    
         
             
                  def fork_subprocess
         
     | 
| 
       308 
324 
     | 
    
         
             
                    initialize_ipc
         
     | 
| 
       309 
325 
     | 
    
         | 
| 
         @@ -321,6 +337,10 @@ module Mixlib 
     | 
|
| 
       321 
337 
     | 
    
         | 
| 
       322 
338 
     | 
    
         
             
                      configure_subprocess_file_descriptors
         
     | 
| 
       323 
339 
     | 
    
         | 
| 
      
 340 
     | 
    
         
            +
                      if cgroup && cgroupv2_available?
         
     | 
| 
      
 341 
     | 
    
         
            +
                        set_cgroup
         
     | 
| 
      
 342 
     | 
    
         
            +
                      end
         
     | 
| 
      
 343 
     | 
    
         
            +
             
     | 
| 
       324 
344 
     | 
    
         
             
                      set_secondarygroups
         
     | 
| 
       325 
345 
     | 
    
         
             
                      set_group
         
     | 
| 
       326 
346 
     | 
    
         
             
                      set_user
         
     | 
    
        data/lib/mixlib/shellout.rb
    CHANGED
    
    | 
         @@ -114,6 +114,9 @@ module Mixlib 
     | 
|
| 
       114 
114 
     | 
    
         | 
| 
       115 
115 
     | 
    
         
             
                attr_accessor :sensitive
         
     | 
| 
       116 
116 
     | 
    
         | 
| 
      
 117 
     | 
    
         
            +
                # Path to cgroupv2 that the process should run on
         
     | 
| 
      
 118 
     | 
    
         
            +
                attr_accessor :cgroup
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
       117 
120 
     | 
    
         
             
                # === Arguments:
         
     | 
| 
       118 
121 
     | 
    
         
             
                # Takes a single command, or a list of command fragments. These are used
         
     | 
| 
       119 
122 
     | 
    
         
             
                # as arguments to Kernel.exec. See the Kernel.exec documentation for more
         
     | 
| 
         @@ -179,6 +182,7 @@ module Mixlib 
     | 
|
| 
       179 
182 
     | 
    
         
             
                  @timeout = nil
         
     | 
| 
       180 
183 
     | 
    
         
             
                  @elevated = false
         
     | 
| 
       181 
184 
     | 
    
         
             
                  @sensitive = false
         
     | 
| 
      
 185 
     | 
    
         
            +
                  @cgroup = nil
         
     | 
| 
       182 
186 
     | 
    
         | 
| 
       183 
187 
     | 
    
         
             
                  if command_args.last.is_a?(Hash)
         
     | 
| 
       184 
188 
     | 
    
         
             
                    parse_options(command_args.pop)
         
     | 
| 
         @@ -303,7 +307,8 @@ module Mixlib 
     | 
|
| 
       303 
307 
     | 
    
         
             
                def inspect
         
     | 
| 
       304 
308 
     | 
    
         
             
                  "<#{self.class.name}##{object_id}: command: '#{@command}' process_status: #{@status.inspect} " +
         
     | 
| 
       305 
309 
     | 
    
         
             
                    "stdout: '#{stdout.strip}' stderr: '#{stderr.strip}' child_pid: #{@child_pid.inspect} " +
         
     | 
| 
       306 
     | 
    
         
            -
                    "environment: #{@environment.inspect} timeout: #{timeout} user: #{@user} group: #{@group} working_dir: #{@cwd}  
     | 
| 
      
 310 
     | 
    
         
            +
                    "environment: #{@environment.inspect} timeout: #{timeout} user: #{@user} group: #{@group} working_dir: #{@cwd} " +
         
     | 
| 
      
 311 
     | 
    
         
            +
                    "cgroup: #{@cgroup} >"
         
     | 
| 
       307 
312 
     | 
    
         
             
                end
         
     | 
| 
       308 
313 
     | 
    
         | 
| 
       309 
314 
     | 
    
         
             
                private
         
     | 
| 
         @@ -354,6 +359,8 @@ module Mixlib 
     | 
|
| 
       354 
359 
     | 
    
         
             
                      self.elevated = setting
         
     | 
| 
       355 
360 
     | 
    
         
             
                    when "sensitive"
         
     | 
| 
       356 
361 
     | 
    
         
             
                      self.sensitive = setting
         
     | 
| 
      
 362 
     | 
    
         
            +
                    when "cgroup"
         
     | 
| 
      
 363 
     | 
    
         
            +
                      self.cgroup = setting
         
     | 
| 
       357 
364 
     | 
    
         
             
                    else
         
     | 
| 
       358 
365 
     | 
    
         
             
                      raise InvalidCommandOption, "option '#{option.inspect}' is not a valid option for #{self.class.name}"
         
     | 
| 
       359 
366 
     | 
    
         
             
                    end
         
     | 
    
        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.3. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 3.3.8
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: x64-mingw-ucrt
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Chef Software Inc.
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2025-02-25 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: chef-utils
         
     |