diff --git a/lib/svi.rb b/lib/svi.rb index 1d531f8..59f9ea2 100644 --- a/lib/svi.rb +++ b/lib/svi.rb @@ -1,3 +1,4 @@ +require_relative "svi/ansi" require_relative "svi/cli" require_relative "svi/svn_runner" require_relative "svi/version" @@ -7,6 +8,32 @@ module Svi class << self def checkout(url) + last_checkout_message = "" + clear_message = lambda do + if last_checkout_message.size > 0 + clear = "" + lines = (last_checkout_message.size + C.screen_width - 1) / C.screen_width + if lines > 1 + clear += Ansi.cursor_up(lines - 1) + end + clear += Ansi.cursor_back(999) + clear += Ansi.erase_cursor_to_eos + $stdout.write(clear) + last_checkout_message = "" + end + end + SvnRunner.run_svn("checkout", [url], allow_interactive: true) do |line| + if line =~ /^A.{4}(.*)$/ + path = $1 + clear_message[] + last_checkout_message = "Checking out #{path}..." + $stdout.write(last_checkout_message) + $stdout.flush + else + clear_message[] + $stdout.puts line + end + end 0 end diff --git a/lib/svi/ansi.rb b/lib/svi/ansi.rb new file mode 100644 index 0000000..4f1c249 --- /dev/null +++ b/lib/svi/ansi.rb @@ -0,0 +1,21 @@ +module Svi + module Ansi + + class << self + + def cursor_up(n = 1) + "\e[#{n}A" + end + + def cursor_back(n = 1) + "\e[#{n}D" + end + + def erase_cursor_to_eos + "\e[J" + end + + end + + end +end