Parse long git status for submodule summaries, if .gitmodules exists and any changed 'files' are submodules.
This commit is contained in:
@@ -75,11 +75,25 @@ puts "%s#%s On branch: %s#{@branch}#{ahead} %s| [%s*%s]%s => $#{ENV["git_env_c
|
|||||||
@c[:dark], @c[:rst], @c[:branch], @c[:dark], @c[:rst], @c[:dark], @c[:rst], @c[:dark], @c[:rst]
|
@c[:dark], @c[:rst], @c[:branch], @c[:dark], @c[:rst], @c[:dark], @c[:rst], @c[:dark], @c[:rst]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def has_modules?
|
||||||
|
@has_modules ||= File.exists?(File.join(@project_root, '.gitmodules'))
|
||||||
|
end
|
||||||
|
|
||||||
# Index modification states
|
# Index modification states
|
||||||
@changes.each do |change|
|
@changes.each do |change|
|
||||||
x, y, file = change[0, 1], change[1, 1], change[3..-1]
|
x, y, file = change[0, 1], change[1, 1], change[3..-1]
|
||||||
|
|
||||||
|
# Fetch the long git status once, but only if any submodules have changed
|
||||||
|
if not @git_status_long and has_modules?
|
||||||
|
@gitmodules ||= File.read(File.join(@project_root, '.gitmodules'))
|
||||||
|
# If changed 'file' is actually a git submodule
|
||||||
|
if @gitmodules.include?(file)
|
||||||
|
# Parse long git status for submodule summaries
|
||||||
|
@git_status_long = `git status`.gsub(/\e\[[^m]*m/, "") # (strip colors)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
msg, col, group = case change[0..1]
|
msg, col, group = case change[0..1]
|
||||||
when "DD"; [" both deleted", :del, :unmerged]
|
when "DD"; [" both deleted", :del, :unmerged]
|
||||||
when "AU"; [" added by us", :new, :unmerged]
|
when "AU"; [" added by us", :new, :unmerged]
|
||||||
@@ -132,9 +146,16 @@ def output_file_group(group)
|
|||||||
|
|
||||||
# Find relative path, i.e. ../../lib/path/to/file
|
# Find relative path, i.e. ../../lib/path/to/file
|
||||||
rel_file = relative_path(Dir.pwd, File.join(@project_root, h[:file]))
|
rel_file = relative_path(Dir.pwd, File.join(@project_root, h[:file]))
|
||||||
|
|
||||||
|
# If some submodules have changed, parse their summaries from long git status
|
||||||
|
sub_stat = nil
|
||||||
|
if @git_status_long && (sub_stat = @git_status_long[/#{h[:file]} \((.*)\)/, 1])
|
||||||
|
# Format summary with parantheses
|
||||||
|
sub_stat = "(#{sub_stat})"
|
||||||
|
end
|
||||||
|
|
||||||
puts "#{c_group}##{@c[:rst]} #{@c[h[:col]]}#{h[:msg]}:\
|
puts "#{c_group}##{@c[:rst]} #{@c[h[:col]]}#{h[:msg]}:\
|
||||||
#{padding}#{@c[:dark]} [#{@c[:rst]}#{@e}#{@c[:dark]}] #{c_group}#{rel_file}#{@c[:rst]}"
|
#{padding}#{@c[:dark]} [#{@c[:rst]}#{@e}#{@c[:dark]}] #{c_group}#{rel_file}#{@c[:rst]} #{sub_stat}"
|
||||||
# Save the ordered list of output files
|
# Save the ordered list of output files
|
||||||
# fetch first file (in the case of oldFile -> newFile) and remove quotes
|
# fetch first file (in the case of oldFile -> newFile) and remove quotes
|
||||||
@output_files << if h[:msg] == "typechange"
|
@output_files << if h[:msg] == "typechange"
|
||||||
|
|||||||
Reference in New Issue
Block a user