class MGit::Commit
@!scope [command] commit follow git commit eg: mgit commit -m 'Just for fun'
Public Class Methods
description()
click to toggle source
# File lib/m-git/command/commit.rb, line 74 def self.description "将修改记录到版本库。" end
usage()
click to toggle source
# File lib/m-git/command/commit.rb, line 78 def self.usage "mgit commit [<git-commit-option>] [(--mrepo|--el-mrepo) <repo>...] [--help]" end
Public Instance Methods
enable_repo_selection()
click to toggle source
# File lib/m-git/command/commit.rb, line 70 def enable_repo_selection true end
execute(argv)
click to toggle source
# File lib/m-git/command/commit.rb, line 21 def execute(argv) Workspace.check_branch_consistency Output.puts_start_cmd do_repos = [] remind_repos = [] do_nothing_repos = [] Output.puts_processing_message("检查各仓库状态...") Workspace.serial_enumerate_with_progress(all_repos) { |repo| if repo.status_checker.status == Repo::Status::GIT_REPO_STATUS[:dirty] index_dirty_mask = Repo::Status::GIT_REPO_STATUS_DIRTY_ZONE[:index] # 仅在暂存区有未提交的改动时执行 if repo.status_checker.dirty_zone & index_dirty_mask == index_dirty_mask do_repos.push(repo) else remind_repos.push(repo.name) end else do_nothing_repos.push(repo.name) end } Output.puts_success_message("检查完成!\n") if remind_repos.length > 0 && !Output.continue_with_interact_repos?(remind_repos, "以上仓库暂存区无可提交内容,仅存在工作区改动或未跟踪文件,若需要提交这些改动请先add到暂存区。是否跳过并继续?") Output.puts_cancel_message return end if do_repos.length != 0 if argv.git_opts.include?('-m ') || !Output.continue_with_user_remind?("未添加\"-m\"参数,请使用如[ mgit commit -m \"my log\" ]的形式提交。是否取消执行并重新输入(若确实有意执行该指令请忽略本提示)?") # commit前调用hook HooksManager.execute_mgit_pre_exec_hook(argv.cmd, argv.pure_opts, do_repos.map { |e| e.config }) msg = ",另有#{do_nothing_repos.length}个仓库暂存区无待提交内容,无须执行" if do_nothing_repos.length > 0 Output.puts_remind_block(do_repos.map { |repo| repo.name }, "开始commit以上仓库#{msg}...") _, error_repos = Workspace.execute_git_cmd_with_repos(argv.cmd, argv.git_opts, do_repos) Output.puts_succeed_cmd(argv.absolute_cmd) if error_repos.length == 0 else Output.puts_cancel_message return end else Output.puts_remind_message("所有仓库均无改动,无须执行!") end end
Private Instance Methods
validate(argv)
click to toggle source
Calls superclass method
MGit::BaseCommand#validate
# File lib/m-git/command/commit.rb, line 11 def validate(argv) super # 禁用--amend if argv.git_opts.include?('--amend') Output.puts_fail_message("MGit不支持\"--amend\"操作,请重试。") Output.puts_cancel_message exit end end