summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2024-05-28 17:45:21 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2024-05-28 17:46:44 -0700
commit0e96dd93c51337a01fa29b563c2d330c472b03b7 (patch)
tree26d20a9fa700220949796f1b52b6cb783970ddf1
parent4d34fb54b0e21af3802cddb669f34fe446ed5f3d (diff)
merger.rb: Don't ask "conflicts resolved?" if not needed
-rwxr-xr-xtool/merger.rb31
1 files changed, 22 insertions, 9 deletions
diff --git a/tool/merger.rb b/tool/merger.rb
index 7ab163eb37..a690b47da3 100755
--- a/tool/merger.rb
+++ b/tool/merger.rb
@@ -163,6 +163,17 @@ class << Merger = Object.new
execute('git', 'add', '.') && execute('git', 'commit', '-F', file)
end
+ def has_conflicts?
+ changes = IO.popen(%w[git status --porcelain -z]) { |io| io.readlines("\0", chomp: true) }
+ # Discover unmerged files
+ # AU: unmerged, added by us
+ # DU: unmerged, deleted by us
+ # UU: unmerged, both modified
+ # AA: unmerged, both added
+ conflict = changes.grep(/\A(?:.U|AA) /) {$'}
+ !conflict.empty?
+ end
+
private
# Prints the version of Ruby found in version.h
@@ -281,15 +292,17 @@ else
f.flush
f.close
- Merger.interactive('conflicts resolved?', f.path) do
- IO.popen(ENV['PAGER'] || ['less', '-R'], 'w') do |g|
- g << Merger.stat
- g << "\n\n"
- f.open
- g << f.read
- f.close
- g << "\n\n"
- g << Merger.diff
+ if Merger.has_conflicts?
+ Merger.interactive('conflicts resolved?', f.path) do
+ IO.popen(ENV['PAGER'] || ['less', '-R'], 'w') do |g|
+ g << Merger.stat
+ g << "\n\n"
+ f.open
+ g << f.read
+ f.close
+ g << "\n\n"
+ g << Merger.diff
+ end
end
end