From d96141f57d41707406d1f691b011842a698dabf0 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 27 Feb 2018 21:21:28 -0500 Subject: [PATCH] Show elapsed time --- lib/svi/application.rb | 9 +++++++-- lib/svi/util.rb | 27 +++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/lib/svi/application.rb b/lib/svi/application.rb index a3ad437..4f5b3f9 100644 --- a/lib/svi/application.rb +++ b/lib/svi/application.rb @@ -32,12 +32,15 @@ module Svi last_checkout_message = "" end end + start_time = Time.new SvnRunner.run_svn("checkout", [url] + checkout_directory, allow_interactive: true) do |line| if line =~ /^A.{4}(.*)$/ path = $1 checked_out_paths << path clear_message[] - last_checkout_message = "Checking out #{path}..." + elapsed_time = Time.new - start_time + elapsed_time_formatted = Util.format_time(elapsed_time) + last_checkout_message = "Checking out #{path} [#{elapsed_time_formatted}]..." $stdout.write(last_checkout_message) $stdout.flush elsif line =~ /^\sU\s{3}/ @@ -54,7 +57,9 @@ module Svi n_files += 1 end end - $stdout.puts "Checked out revision #{revision}: #{n_files} file#{n_files == 1 ? '' : 's'}, #{n_directories} director#{n_directories == 1 ? 'y' : 'ies'}" + elapsed_time = Time.new - start_time + elapsed_time_formatted = Util.format_time(elapsed_time) + $stdout.puts "Checked out revision #{revision}: #{n_files} file#{n_files == 1 ? '' : 's'}, #{n_directories} director#{n_directories == 1 ? 'y' : 'ies'} [#{elapsed_time_formatted}]" else clear_message[] $stdout.puts line diff --git a/lib/svi/util.rb b/lib/svi/util.rb index b7c10b4..0c46a61 100644 --- a/lib/svi/util.rb +++ b/lib/svi/util.rb @@ -9,6 +9,33 @@ module Svi end end + def format_time(time) + if time < 10 + sprintf("%.3fs", time) + else + days = (time / (60 * 60 * 24)).to_i + time -= days * (60 * 60 * 24) + hours = (time / (60 * 60)).to_i + time -= hours * (60 * 60) + minutes = (time / 60).to_i + time -= minutes * 60 + incl = false + formatted = "" + if days != 0 + incl = true + formatted += "#{days}d" + end + if hours != 0 or incl + incl = true + formatted += "#{hours}h" + end + if minutes != 0 or incl + formatted += "#{minutes}m" + end + formatted += "#{time.round}s" + end + end + end end