class MGit::Self
该指令用于不带指令的输入:mgit –help,用于执行mgit的一级参数(如“mgit –help”的“–help”)
Constants
- HELP_INTRODUCTION
- OPT_LIST
Public Instance Methods
enable_short_basic_option()
click to toggle source
# File lib/m-git/command/self.rb, line 217 def enable_short_basic_option return true end
execute(argv)
click to toggle source
# File lib/m-git/command/self.rb, line 62 def execute(argv) # 如果存在多余(透传)指令则报错 extra_opt_str = argv.git_opts if extra_opt_str.length > 0 Output.puts_fail_message("输入无效参数:#{extra_opt_str}\n") show_help(argv) exit end argv.enumerate_valid_opts { |opt| if opt.key == OPT_LIST[:list] || opt.key == OPT_LIST[:list_s] show_all_repos(argv) return elsif opt.key == OPT_LIST[:size] || opt.key == OPT_LIST[:size_s] show_repo_size return elsif opt.key == OPT_LIST[:version] || opt.key == OPT_LIST[:version_s] show_version return elsif opt.key == OPT_LIST[:workspace] || opt.key == OPT_LIST[:workspace_s] show_workspace return end } # 无任何参数传入时显示帮助 show_help(argv) end
options()
click to toggle source
Calls superclass method
MGit::BaseCommand#options
# File lib/m-git/command/self.rb, line 31 def options return [ ARGV::Opt.new(OPT_LIST[:list], short_key:OPT_LIST[:list_s], info:"显示MGit管理的仓库。", type: :boolean), ARGV::Opt.new(OPT_LIST[:size], short_key:OPT_LIST[:size_s], info:"显示MGit管理的仓库的磁盘占用量。", type: :boolean), ARGV::Opt.new(OPT_LIST[:all], short_key:OPT_LIST[:all_s], info:"指定操作所有定义在manifest内的仓库,可配合-l合并使用: \"mgit -al\"。", type: :boolean), ARGV::Opt.new(OPT_LIST[:version], short_key:OPT_LIST[:version_s], info:"显示当前MGit版本。", type: :boolean), ARGV::Opt.new(OPT_LIST[:workspace], short_key:OPT_LIST[:workspace_s], info:"显示当前MGit工程管理根目录(.mgit所在目录)。", type: :boolean) ].concat(super) end
post_exec()
click to toggle source
# File lib/m-git/command/self.rb, line 54 def post_exec end
pre_exec()
click to toggle source
— 覆写,不需要预设操作 —
# File lib/m-git/command/self.rb, line 51 def pre_exec end
prepare()
click to toggle source
# File lib/m-git/command/self.rb, line 45 def prepare Workspace.setup_multi_repo_root Workspace.setup_config end
prepare_repos(with_excluded:false)
click to toggle source
# File lib/m-git/command/self.rb, line 188 def prepare_repos(with_excluded:false) existing_repos = [] missing_repos = [] Workspace.config.light_repos.each { |light_repo| if with_excluded || !light_repo.mgit_excluded repo_exist = Repo.is_git_repo?(light_repo.abs_dest(Workspace.root)) if repo_exist existing_repos.push(light_repo) else missing_repos.push(light_repo) end end } return existing_repos, missing_repos end
show_all_repos(argv)
click to toggle source
# File lib/m-git/command/self.rb, line 130 def show_all_repos(argv) prepare list_all = argv.opt_list.did_set_opt?(OPT_LIST[:all]) existing_repos, missing_repos = prepare_repos(with_excluded:list_all) list = {} if existing_repos.length > 0 existing_repos.sort_by { |e| e.name }.each { |light_repo| dir = File.join("<ROOT>", File.dirname(light_repo.path)).bold list[dir] = [] if list[dir].nil? list[dir].push(light_repo.name) } end if missing_repos.length > 0 list['本地缺失'.bold] = missing_repos.sort_by { |e| e.name }.map { |e| e.name } end list_array = [] list.each { |dir, list| list_array.push([dir.bold, list]) } puts Output.generate_table_combination(list_array, separator:'|') if list_all message = "共统计#{existing_repos.length + missing_repos.length}个仓库。" else message = "mgit目前共管理#{existing_repos.length + missing_repos.length}个仓库。" end Output.puts_remind_message(message) Output.puts_fail_message("有#{missing_repos.length}个仓库本地缺失!") if missing_repos.length > 0 end
show_help(argv)
click to toggle source
# File lib/m-git/command/self.rb, line 91 def show_help(argv) head_space = ' ' middle_space = ' ' output = HELP_INTRODUCTION # "#{Output.info_title("Description:")}\n\n#{head_space}mgit是多仓库管理工具,通过将git指令作用到多个仓库,实现批量的版本管理功能。" output += "#{Output.info_title("Usage:")}\n\n#{head_space}$ #{Output.green_message("mgit <mgit_options>")}\n" output += "#{head_space}$ #{Output.green_message("mgit <command> [<command_option>...] [<value>...]")}\n\n" # mgit options output += "#{Output.info_title("MGit Option:")}\n\n" divider = ", " longest_opt = argv.opt_list.opts.max_by { |e| "#{Output.blue_message("#{e.key}#{divider + e.short_key if !e.short_key.nil?}")}".length } max_opt_length = "#{longest_opt.short_key + divider + longest_opt.key}".length mgit_option_info = '' argv.opt_list.opts.each { |opt| key = "#{opt.short_key + divider + opt.key}" mgit_option_info += "#{head_space}#{Output.blue_message(key)}#{' ' * (max_opt_length - key.length + middle_space.length)}#{argv.info(opt.key)}\n" } output += mgit_option_info + "\n" # subcommand output += "#{Output.info_title("Command:")}\n\n" cmd_header = '+ ' cmd_info = '' max_cmd_length = Output.blue_message(cmd_header + CommandManager.commands.keys.max_by { |e| e.length }.to_s).length CommandManager.commands.keys.sort.each { |cmd_name| next if cmd_name == self.class.cmd cls_name = CommandManager.commands[cmd_name] cmd_name = Output.green_message(cmd_header + cmd_name.downcase.to_s) cmd_info += "#{head_space}#{cmd_name}#{' ' * (max_cmd_length - cmd_name.length + middle_space.length)}#{cls_name.description}\n" } output += cmd_info + "\n" output += "#{Output.info_title("Command Option:")}\n\n#{head_space}请通过[ mgit <command> --help ]查看。\n\n" output += "#{Output.info_title("Version:")}\n\n#{head_space}#{MGit::VERSION}\n" puts output end
show_repo_size()
click to toggle source
# File lib/m-git/command/self.rb, line 164 def show_repo_size prepare Workspace.setup_all_repos Output.puts_processing_message("开始计算...") repo_size = {} mutex = Mutex.new task_count = 0 Output.update_progress(all_repos.length, task_count) Workspace.concurrent_enumerate(all_repos) { |repo| success, output = repo.execute("du -sh #{repo.path}") mutex.lock if success repo_size[repo.name] = output&.strip end task_count += 1 Output.update_progress(all_repos.length, task_count) mutex.unlock } Output.puts_success_message("计算完成。") display_size = repo_size.sort_by { |k,v| k}.map { |e| e.last } Output.puts_remind_block(display_size, "共统计#{repo_size.length}个仓库。") end
show_version()
click to toggle source
# File lib/m-git/command/self.rb, line 213 def show_version puts MGit::VERSION end
show_workspace()
click to toggle source
# File lib/m-git/command/self.rb, line 204 def show_workspace root = Workspace.multi_repo_root_path if root.nil? Output.puts_fail_message("当前不在任何多仓库目录下!") else puts root end end
usage(argv)
click to toggle source
# File lib/m-git/command/self.rb, line 57 def usage(argv) show_help(argv) end
validate(argv)
click to toggle source
# File lib/m-git/command/self.rb, line 41 def validate(argv) Foundation.help!("输入非法参数:#{argv.git_opts}。请通过\"mgit --help\"查看用法。") if argv.git_opts.length > 0 end