class MGit::Status
@!scope 类似 git status
Public Class Methods
description()
click to toggle source
# File lib/m-git/command/status.rb, line 126 def self.description "输出所有仓库的状态。包括:\"分支\",\"暂存区\",\"工作区\",\"特殊(未跟踪和被忽略)\",\"冲突\"。" end
usage()
click to toggle source
# File lib/m-git/command/status.rb, line 130 def self.usage "mgit status [(-m|-e) <repo>...] [-h]" end
Public Instance Methods
enable_repo_selection()
click to toggle source
# File lib/m-git/command/status.rb, line 118 def enable_repo_selection true end
enable_short_basic_option()
click to toggle source
# File lib/m-git/command/status.rb, line 122 def enable_short_basic_option true end
execute(argv)
click to toggle source
# File lib/m-git/command/status.rb, line 8 def execute(argv) Output.puts_processing_message("正在检查各仓库状态...") status_info = {} mutex = Mutex.new mutex_branch = Mutex.new mutex_modification = Mutex.new mutex_other = Mutex.new branch_notice = [] modification_notice = [] other_notice = [] in_progress_notice = [] task_count = 0 repo_combo = all_repos + locked_repos Output.update_progress(repo_combo.length, task_count) Workspace.concurrent_enumerate(repo_combo) { |repo| status_msg = '' info = [] # 非锁定仓库进行常规分支检查 if !locked_repos.include?(repo) && repo.status_checker.branch_status != Repo::Status::GIT_BRANCH_STATUS[:up_to_date] && repo.status_checker.branch_status != Repo::Status::GIT_BRANCH_STATUS[:no_remote] info.push(['分支', [repo.status_checker.branch_message]]) mutex_branch.lock branch_notice.push(repo.name) mutex_branch.unlock end # 检查工作区状态 if repo.status_checker.status != Repo::Status::GIT_REPO_STATUS[:clean] info += repo.status_checker.message mutex_modification.lock modification_notice.push(repo.name) mutex_modification.unlock end # 检查url是否一致 if !repo.url_consist? info.push(['其他', ['仓库实际url与当前配置不一致']]) mutex_other.lock other_notice.push(repo.name) mutex_other.unlock end # 生成表格 status_msg = Output.generate_table_combination(info) + "\n\n" if info.length > 0 # 压缩状态信息 mutex.lock if status_msg.length > 0 status_info[status_msg] = {'repo_names' => [], 'info' => info} if status_info[status_msg].nil? status_info[status_msg]['repo_names'].push(repo.name) end task_count += 1 Output.update_progress(repo_combo.length, task_count) mutex.unlock } status_info.each_with_index { |(status_msg, item), index| info = item['info'] repo_names = item['repo_names'] Output.puts_remind_block(repo_names, "以上仓库状态:") MGit::Loger.info(info) status_msg += "\n" if index != status_info.length - 1 puts status_msg } OperationProgressManager::PROGRESS_TYPE.each { |type, type_str| if OperationProgressManager.is_in_progress?(Workspace.root, type_str) in_progress_notice.push(type.to_s) end } summary = [] if branch_notice.length > 0 summary.push(["分支提醒(#{branch_notice.length})",branch_notice]) end if modification_notice.length > 0 summary.push(["改动提醒(#{modification_notice.length})",modification_notice]) end if other_notice.length > 0 summary.push(["其他警告(#{other_notice.length})", other_notice]) end if in_progress_notice.length > 0 summary.push(["处于中间态的操作",in_progress_notice]) end if summary.length > 0 puts "\n" puts Output.generate_table_combination(summary, title: "状态小结", separator: "|") MGit::Loger.info('状态小结') MGit::Loger.info(summary) end Output.puts_success_message("所查询仓库均无改动!") if status_info.keys.length == 0 Output.puts_succeed_cmd(argv.absolute_cmd) end
validate(argv)
click to toggle source
# File lib/m-git/command/status.rb, line 114 def validate(argv) Foundation.help!("输入非法参数:#{argv.git_opts}。请通过\"mgit #{argv.cmd} --help\"查看用法。") if argv.git_opts.length > 0 end