module GGSM::Submodule
Public Instance Methods
check_submodule(check=true)
click to toggle source
# File lib/ggsm/util/submodule.rb, line 7 def check_submodule(check=true) sub_str = `git submodule` if check && sub_str.empty? puts '所在目录工程下不存在Submodule,请检查所在目录!'.red exit 1 end correct_dir check_hooks end
check_submodule_status(is_sync)
click to toggle source
# File lib/ggsm/util/submodule.rb, line 40 def check_submodule_status(is_sync) modified_sub = get_modified_submodule if !is_sync && modified_sub.size > 0 subs = '' modified_sub.each do |sub| subs = "#{sub} , #{subs}" end puts "\n存在未跟踪的子模块提交: #{subs[0...subs.size-2]} \n\n请选择操作:\n1 丢弃子模块的改动 2 追踪子模块(仅追踪子模块)\n3 追踪所有改变\n4 取消".red input = STDIN.gets.chomp.upcase if input == '1' elsif input == '2' add = 'git add' modified_sub.each do |sub| add = "#{add} #{sub}" end system "#{add};git commit" elsif input == '3' system 'git add .;git commit' else puts '==> 取消操作'.blue exit 0 end end end
check_un_commit_code()
click to toggle source
# File lib/ggsm/util/submodule.rb, line 101 def check_un_commit_code subs = get_submodule project_path = Dir.pwd subs.each do |sub| Dir.chdir sub status = `git status --ignore-submodules | grep 'nothing to commit'` if status.strip == '' puts "#{sub} 有未提交的代码".red exit 1 end Dir.chdir project_path end status = `git status --ignore-submodules | grep 'nothing to commit'` if status.strip == '' puts '主工程 有未提交的代码'.red exit 1 end end
correct_dir()
click to toggle source
# File lib/ggsm/util/submodule.rb, line 170 def correct_dir if File.exist?('.git') return end Dir.chdir '..' correct_dir end
foreach_module() { |sub, index| ... }
click to toggle source
# File lib/ggsm/util/submodule.rb, line 121 def foreach_module subs = get_submodule project_path = Dir.pwd subs.each do |sub| Dir.chdir sub puts "==> 进入#{sub}:".yellow yield sub, subs.index(sub) Dir.chdir project_path end end
get_current_branch()
click to toggle source
# File lib/ggsm/util/submodule.rb, line 160 def get_current_branch `git branch | grep "*"`.split('* ')[1].split("\n")[0] end
get_head_commit(branch)
click to toggle source
获取#{branch}上HEAD的commit id
# File lib/ggsm/util/submodule.rb, line 180 def get_head_commit(branch) `git rev-parse #{branch}` end
get_lastest_msg(depth)
click to toggle source
# File lib/ggsm/util/submodule.rb, line 155 def get_lastest_msg(depth) msg = `git log --format=%B -n #{depth}`.split(/\n\n/) msg[depth - 1].strip end
get_lastest_msg_not_merge()
click to toggle source
# File lib/ggsm/util/submodule.rb, line 147 def get_lastest_msg_not_merge depth = 1 while (msg = get_lastest_msg(depth)).start_with?('Merge branch') do depth += 1 end msg end
get_lastest_msg_of_module(module_name)
click to toggle source
# File lib/ggsm/util/submodule.rb, line 132 def get_lastest_msg_of_module(module_name) msg = '' project_path = Dir.pwd if is_submodule(module_name) Dir.chdir module_name msg = get_lastest_msg_not_merge Dir.chdir project_path end msg end
get_modified_submodule()
click to toggle source
# File lib/ggsm/util/submodule.rb, line 67 def get_modified_submodule result = [] status = `git status -s`.split(/\n/) subs = get_submodule status.each do |sub| array_name = sub.split(' ') name = array_name[array_name.size-1] if subs.include? name result.push(name) end end result end
get_submodule()
click to toggle source
# File lib/ggsm/util/submodule.rb, line 18 def get_submodule pattern = /(?<=\s)[\/0-9a-zA-Z]*(?=\s)/ sub_status = `git submodule` sub_status = sub_status.split(/\n/) match = pattern.match(sub_status[0]) if match==nil puts '==> 初始化子模块'.yellow `git submodule update --init --recursive` sub_status = `git submodule` sub_status = sub_status.split(/\n/) end result = [] sub_status.each do |sub| match = pattern.match(sub.strip) result.push(match[0]) end result end
get_submodule_commit()
click to toggle source
# File lib/ggsm/util/submodule.rb, line 83 def get_submodule_commit sub_tree = 'git ls-tree HEAD | grep "160000"' sub_commits = `#{sub_tree}` if sub_commits.strip == '' && (File.directory? 'submodules') Dir.chdir 'submodules' sub_commits = `#{sub_tree}` Dir.chdir '..' end pattern = /(?<=\s)[0-9a-zA-Z]{40}(?=\s)/ sub_commits = sub_commits.split(/\n/) result = [] sub_commits.each do |sub| match = pattern.match(sub.strip) result.push(match[0][0...7]) end result end
is_submodule(module_name)
click to toggle source
# File lib/ggsm/util/submodule.rb, line 143 def is_submodule(module_name) get_submodule.include?(module_name) end