module MGit::HooksManager
Public Class Methods
__execute_hook_file(file_name, hook_class) { |hook| ... }
click to toggle source
执行hook文件
@param file_name [String] hook文件名
@param hook_class [String] hook Class name
block
# File lib/m-git/hooks_manager.rb, line 84 def __execute_hook_file(file_name, hook_class) file_path = File.join(Workspace.hooks_dir, file_name) if File.exists?(file_path) require file_path end if Object.const_defined?(hook_class) && hook = Object.const_get(hook_class) return yield(hook) if block_given? end end
execute_manifest_hook(strict_mode:true)
click to toggle source
获取配置表前执行的hook
@param strict_mode [Boolean] default: true 严格模式下出错直接终止,非严格模式下出错抛出异常
@return [Type] description_of_returned_object
# File lib/m-git/hooks_manager.rb, line 14 def execute_manifest_hook(strict_mode:true) __execute_hook_file(Constants::HOOK_NAME[:manifest_hook], 'MGitTemplate::ManifestHook') do |cls| begin cls.run rescue Error => e if strict_mode Foundation.help!("配置表生成失败:#{e.msg}") if e.type == MGIT_ERROR_TYPE[:config_generate_error] else raise e end end end end
execute_mgit_post_hook(cmd, pure_opts, light_repos)
click to toggle source
mgit执行后的hook
# File lib/m-git/hooks_manager.rb, line 36 def execute_mgit_post_hook(cmd, pure_opts, light_repos) __execute_hook_file(Constants::HOOK_NAME[:post_hook], 'MGitTemplate::PostHook') do |cls| cls.run(cmd, pure_opts, Workspace.root, light_repos) end end
execute_mgit_pre_exec_hook(cmd, pure_opts, light_repos)
click to toggle source
mgit执行前的hook(用户级,此时已经完成状态检查,可以在内部获取到仓库配置对象) 可以按需插入到不同指令的执行前时机下调用,然后在方法中通过'cmd'参数判断当前执行到是哪个指令 目前仅插入到commit指令,后续可按需插入
# File lib/m-git/hooks_manager.rb, line 45 def execute_mgit_pre_exec_hook(cmd, pure_opts, light_repos) __execute_hook_file(Constants::HOOK_NAME[:pre_exec_hook], 'MGitTemplate::PreExecHook') do |cls| cls.run(cmd, pure_opts, Workspace.root, light_repos) end end
execute_mgit_pre_hook(cmd, pure_opts)
click to toggle source
mgit执行前的hook
# File lib/m-git/hooks_manager.rb, line 29 def execute_mgit_pre_hook(cmd, pure_opts) __execute_hook_file(Constants::HOOK_NAME[:pre_hook], 'MGitTemplate::PreHook') do |cls| cls.run(cmd, pure_opts, Workspace.root) end end
execute_mgit_pre_push_hook(cmd, pure_opts, light_repos)
click to toggle source
功能类似'execute_mgit_pre_exec_hook',但仅仅是push指令专用(内部不用判断'cmd',cmd一定是push,可替换为'execute_mgit_pre_exec_hook')
# File lib/m-git/hooks_manager.rb, line 52 def execute_mgit_pre_push_hook(cmd, pure_opts, light_repos) __execute_hook_file(Constants::HOOK_NAME[:pre_push_hook], 'MGitTemplate::PrePushHook') do |cls| cls.run(cmd, pure_opts, Workspace.root, light_repos) end end
execute_post_download_hook(repo_name, repo_path)
click to toggle source
执行下载后的hook
@param repo_name [String] 仓库ming
@param repo_path [String] 仓库本地路径
@param root [String] .mgit所在目录
@param error [String] 错误信息,nil表示成功
@return [Boolean] hook是否操作过仓库分支
# File lib/m-git/hooks_manager.rb, line 70 def execute_post_download_hook(repo_name, repo_path) changed = __execute_hook_file(Constants::HOOK_NAME[:post_download_hook], 'MGitTemplate::PostDownloadHook') do |cls| cls.run(repo_name, repo_path) end changed == true end