Fix progress meter output for Windows
This commit is contained in:
parent
e46b2a7643
commit
c64dc43c84
|
@ -4,9 +4,6 @@ module Vagrant
|
||||||
# to standard out. The progress meter shows the progress of an operation
|
# to standard out. The progress meter shows the progress of an operation
|
||||||
# with console-animated text in stdout.
|
# with console-animated text in stdout.
|
||||||
module ProgressMeter
|
module ProgressMeter
|
||||||
# ANSI escape code to clear lines from cursor to end of line
|
|
||||||
CL_RESET = "\r\e[0K"
|
|
||||||
|
|
||||||
# Updates the progress meter with the given progress amount and total.
|
# Updates the progress meter with the given progress amount and total.
|
||||||
# This method will do the math to figure out a percentage and show it
|
# This method will do the math to figure out a percentage and show it
|
||||||
# within stdout.
|
# within stdout.
|
||||||
|
@ -15,7 +12,7 @@ module Vagrant
|
||||||
# @param [Float] total Total
|
# @param [Float] total Total
|
||||||
def update_progress(progress, total, show_parts=true)
|
def update_progress(progress, total, show_parts=true)
|
||||||
percent = (progress.to_f / total.to_f) * 100
|
percent = (progress.to_f / total.to_f) * 100
|
||||||
print "#{CL_RESET}Progress: #{percent.to_i}%"
|
print "#{cl_reset}Progress: #{percent.to_i}%"
|
||||||
print " (#{progress} / #{total})" if show_parts
|
print " (#{progress} / #{total})" if show_parts
|
||||||
$stdout.flush
|
$stdout.flush
|
||||||
end
|
end
|
||||||
|
@ -23,7 +20,13 @@ module Vagrant
|
||||||
# Completes the progress meter by resetting it off of the screen.
|
# Completes the progress meter by resetting it off of the screen.
|
||||||
def complete_progress
|
def complete_progress
|
||||||
# Just clear the line back out
|
# Just clear the line back out
|
||||||
print "#{CL_RESET}"
|
print "#{cl_reset}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def cl_reset
|
||||||
|
reset = "\r"
|
||||||
|
reset += "\e[0K" unless Mario::Platform.windows?
|
||||||
|
reset
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
|
||||||
|
|
||||||
|
class ProgressMeterUtilTest < Test::Unit::TestCase
|
||||||
|
class TestProgressMeter
|
||||||
|
include Vagrant::Util::ProgressMeter
|
||||||
|
end
|
||||||
|
|
||||||
|
setup do
|
||||||
|
@instance = TestProgressMeter.new
|
||||||
|
|
||||||
|
Mario::Platform.logger(nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
context "on windows" do
|
||||||
|
setup do
|
||||||
|
Mario::Platform.forced = Mario::Platform::Windows7
|
||||||
|
end
|
||||||
|
|
||||||
|
should "just return \\r for the clear screen" do
|
||||||
|
assert_equal "\r", @instance.cl_reset
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "on other platforms" do
|
||||||
|
setup do
|
||||||
|
Mario::Platform.forced = Mario::Platform::Linux
|
||||||
|
end
|
||||||
|
|
||||||
|
should "return the full clear screen" do
|
||||||
|
assert_equal "\r\e[0K", @instance.cl_reset
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue