diff --git a/lib/kafo/progress_bar.rb b/lib/kafo/progress_bar.rb index cfe5eacb..48b3dfef 100644 --- a/lib/kafo/progress_bar.rb +++ b/lib/kafo/progress_bar.rb @@ -11,7 +11,7 @@ module Kafo # change more methods like #done_message or #print_error class ProgressBar MONITOR_RESOURCE = %r{\w*MONITOR_RESOURCE ([^\]]+\])} - EVALTRACE_START = %r{/(.+\]): Starting to evaluate the resource} + EVALTRACE_START = %r{/(.+\]): Starting to evaluate the resource( \((\d+) of (\d+)\))?} EVALTRACE_END = %r{/(.+\]): Evaluated in [\d\.]+ seconds} PREFETCH = %r{Prefetching .* resources for} @@ -42,6 +42,19 @@ def update(line) end if (line_start = EVALTRACE_START.match(line)) + if line_start[4] + # Puppet 6.6 introduced progress in evaltrace + # Puppet counts 1-based where we count 0-based here + new_lines = line_start[3].to_i - 1 + new_total = line_start[4].to_i + if new_lines != @lines || @total != new_total + @lines = new_lines + @total = new_total + update_bar = true + force_update = true + end + end + if (known_resource = find_known_resource(line_start[1])) line = known_resource update_bar = true diff --git a/test/kafo/progress_bar_test.rb b/test/kafo/progress_bar_test.rb index 2239a42c..cb2fae99 100644 --- a/test/kafo/progress_bar_test.rb +++ b/test/kafo/progress_bar_test.rb @@ -5,30 +5,47 @@ module Kafo let(:bar) { ProgressBar.new.tap { |pb| pb.instance_variable_set(:@bar, powerbar) } } let(:powerbar) { MiniTest::Mock.new } - it "calls powerbar.show" do - powerbar.expect(:show, nil, [{:msg => 'Notify[test] ', :done => 0, :total => 2}, true]) - powerbar.expect(:show, nil, [{:msg => 'Prefetching example resources for example_type ', :done => 1, :total => 2}, true]) - powerbar.expect(:show, nil, [{:msg => 'File[/foo/bar] ', :done => 1, :total => 2}, true]) + describe 'Puppet 5' do + it "calls powerbar.show" do + powerbar.expect(:show, nil, [{:msg => 'Notify[test] ', :done => 0, :total => 2}, true]) + powerbar.expect(:show, nil, [{:msg => 'Prefetching example resources for example_type ', :done => 1, :total => 2}, true]) + powerbar.expect(:show, nil, [{:msg => 'File[/foo/bar] ', :done => 1, :total => 2}, true]) - bar.update('MONITOR_RESOURCE File[/foo/bar]') - bar.update('MONITOR_RESOURCE Notify[test]') - bar.update('/Stage[main]/Example/Notify[test]: Starting to evaluate the resource') - bar.update('/Stage[main]/Example/Notify[test]: Evaluated in 0.5 seconds') - bar.update('Prefetching example resources for example_type') - bar.update('/Stage[main]/Example/File[/foo/bar]: Starting to evaluate the resource') - bar.update('/Stage[main]/Example/File[/foo/bar]: Evaluated in 0.5 seconds') - powerbar.verify + bar.update('MONITOR_RESOURCE File[/foo/bar]') + bar.update('MONITOR_RESOURCE Notify[test]') + bar.update('/Stage[main]/Example/Notify[test]: Starting to evaluate the resource') + bar.update('/Stage[main]/Example/Notify[test]: Evaluated in 0.5 seconds') + bar.update('Prefetching example resources for example_type') + bar.update('/Stage[main]/Example/File[/foo/bar]: Starting to evaluate the resource') + bar.update('/Stage[main]/Example/File[/foo/bar]: Evaluated in 0.5 seconds') + powerbar.verify + end + + it 'handles an unknown total' do + powerbar.expect(:show, nil, [{:msg => 'Prefetching example resources for example_type ', :done => 0, :total => :unknown}, true]) + + bar.update('/Stage[main]/Example/Notify[test]: Starting to evaluate the resource') + bar.update('/Stage[main]/Example/Notify[test]: Evaluated in 0.5 seconds') + bar.update('Prefetching example resources for example_type') + bar.update('/Stage[main]/Example/File[/foo/bar]: Starting to evaluate the resource') + bar.update('/Stage[main]/Example/File[/foo/bar]: Evaluated in 0.5 seconds') + powerbar.verify + end end - it 'handles an unknown total' do - powerbar.expect(:show, nil, [{:msg => 'Prefetching example resources for example_type ', :done => 0, :total => :unknown}, true]) + describe 'Puppet 6' do + it "calls powerbar.show" do + powerbar.expect(:show, nil, [{:msg => 'Notify[test] ', :done => 0, :total => 2}, true]) + powerbar.expect(:show, nil, [{:msg => 'Prefetching example resources for example_type ', :done => 1, :total => 2}, true]) + powerbar.expect(:show, nil, [{:msg => 'File[/foo/bar] ', :done => 1, :total => 2}, true]) - bar.update('/Stage[main]/Example/Notify[test]: Starting to evaluate the resource') - bar.update('/Stage[main]/Example/Notify[test]: Evaluated in 0.5 seconds') - bar.update('Prefetching example resources for example_type') - bar.update('/Stage[main]/Example/File[/foo/bar]: Starting to evaluate the resource') - bar.update('/Stage[main]/Example/File[/foo/bar]: Evaluated in 0.5 seconds') - powerbar.verify + bar.update('/Stage[main]/Example/Notify[test]: Starting to evaluate the resource (1 of 2)') + bar.update('/Stage[main]/Example/Notify[test]: Evaluated in 0.5 seconds') + bar.update('Prefetching example resources for example_type') + bar.update('/Stage[main]/Example/File[/foo/bar]: Starting to evaluate the resource (2 of 2)') + bar.update('/Stage[main]/Example/File[/foo/bar]: Evaluated in 0.5 seconds') + powerbar.verify + end end end end