add initial checkout handler

This commit is contained in:
Josh Holtrop 2018-02-24 20:36:39 -05:00
parent 7af56e8363
commit 0a1ddbfd3f
2 changed files with 48 additions and 0 deletions

View File

@ -1,3 +1,4 @@
require_relative "svi/ansi"
require_relative "svi/cli" require_relative "svi/cli"
require_relative "svi/svn_runner" require_relative "svi/svn_runner"
require_relative "svi/version" require_relative "svi/version"
@ -7,6 +8,32 @@ module Svi
class << self class << self
def checkout(url) 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 0
end end

21
lib/svi/ansi.rb Normal file
View File

@ -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