You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.3 KiB
52 lines
1.3 KiB
require 'gitlab'
|
|
require 'gitlab/help'
|
|
require 'gitlab/cli_helpers'
|
|
require 'readline'
|
|
|
|
class Gitlab::Shell
|
|
extend Gitlab::CLI::Helpers
|
|
|
|
def self.start
|
|
actions = Gitlab.actions
|
|
|
|
comp = proc { |s| actions.map(&:to_s).grep(/^#{Regexp.escape(s)}/) }
|
|
|
|
Readline.completion_proc = comp
|
|
Readline.completion_append_character = ' '
|
|
|
|
client = Gitlab::Client.new(endpoint: '')
|
|
|
|
while buf = Readline.readline('gitlab> ', true)
|
|
next if buf.nil? || buf.empty?
|
|
break if buf == 'exit'
|
|
|
|
buf = buf.scan(/["][^"]+["]|\S+/).map { |word| word.gsub(/^['"]|['"]$/,'') }
|
|
cmd = buf.shift
|
|
args = buf.count > 0 ? buf : []
|
|
|
|
if cmd == 'help'
|
|
methods = []
|
|
|
|
actions.each do |action|
|
|
methods << {
|
|
name: action.to_s,
|
|
owner: client.method(action).owner.to_s
|
|
}
|
|
end
|
|
|
|
args[0].nil? ? Gitlab::Help.get_help(methods) : Gitlab::Help.get_help(methods, args[0])
|
|
next
|
|
end
|
|
|
|
data = if actions.include?(cmd.to_sym)
|
|
confirm_command(cmd)
|
|
gitlab_helper(cmd, args)
|
|
else
|
|
"'#{cmd}' is not a valid command. See the 'help' for a list of valid commands."
|
|
end
|
|
|
|
output_table(cmd, args, data)
|
|
end
|
|
end
|
|
end
|