summaryrefslogtreecommitdiff
path: root/tool/sync_default_gems.rb
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2023-08-17 17:58:32 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2023-08-17 17:58:36 -0700
commitad2bad4ab42c490beca0bd3c5cd9846fdff238c2 (patch)
tree2ef7eef001458153a10171dab12e569d0cb89410 /tool/sync_default_gems.rb
parent434cbc05f387616e1e4014a5942e265b7451ab08 (diff)
Fix the scope of rubygems conflict resolution
The `git reset` and `rm_rf` are not necessary because `bundler/` is considered as a `toplevels` and removed from the commit when there's no conflict. For conflict cases, it's useful to remove them from the conflict targets before moving on to fix other paths.
Diffstat (limited to 'tool/sync_default_gems.rb')
-rwxr-xr-xtool/sync_default_gems.rb26
1 files changed, 15 insertions, 11 deletions
diff --git a/tool/sync_default_gems.rb b/tool/sync_default_gems.rb
index db458cc325..e94ce81d1f 100755
--- a/tool/sync_default_gems.rb
+++ b/tool/sync_default_gems.rb
@@ -563,20 +563,24 @@ module SyncDefaultGems
end
next if skipped
- case gem
- when "rubygems"
- %w[bundler/spec/support/artifice/vcr_cassettes].each do |rem|
- if File.exist?(rem)
- system("git", "reset", rem)
- rm_rf(rem)
- end
- end
- system(*%w[git add spec/bundler])
- end
-
if result.empty?
skipped = true
elsif /^CONFLICT/ =~ result
+ # Automatically fix some parts of conflicts
+ case gem
+ when "rubygems"
+ # git doesn't auto-rename new files under the vcr_cassettes to spec/bundler.
+ # We delete them as `toplevels` if they don't conflict.
+ %w[bundler/spec/support/artifice/vcr_cassettes].each do |rem|
+ if File.exist?(rem)
+ system("git", "reset", rem)
+ rm_rf(rem)
+ end
+ end
+ # New files renamed to spec/bundler are safe to commit.
+ system(*%w[git add spec/bundler])
+ end
+
result = pipe_readlines(%W"git status --porcelain -z")
result.map! {|line| line[/\A(?:.U|[UA]A) (.*)/, 1]}
result.compact!