summaryrefslogtreecommitdiff
path: root/tool
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2020-04-01 18:40:27 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-04-03 10:49:45 +0900
commit691a15ebc7ebc27d2f0c25321a1fe85022ec8ea2 (patch)
treef8d820b5967c76657e79f78847503f5145a8b1ba /tool
parent668c97b72c8aeead20978d287073b5526887f709 (diff)
[sync_default_gems.rb] Reset files to be ignored
[ci skip]
Diffstat (limited to 'tool')
-rw-r--r--tool/sync_default_gems.rb17
1 files changed, 12 insertions, 5 deletions
diff --git a/tool/sync_default_gems.rb b/tool/sync_default_gems.rb
index 56f3fc0163..1a8f54b306 100644
--- a/tool/sync_default_gems.rb
+++ b/tool/sync_default_gems.rb
@@ -348,9 +348,7 @@ def sync_default_gems_with_commits(gem, range)
# Ignore Merge commit and insufficiency commit for ruby core repository.
commits.delete_if do |sha, subject|
- files = IO.popen(%W"git diff-tree --no-commit-id --name-only -r #{sha}") do |f|
- f.readlines
- end
+ files = IO.popen(%W"git diff-tree --no-commit-id --name-only -r #{sha}", &:readlines)
subject =~ /^Merge/ || subject =~ /^Auto Merge/ || files.all?{|file| file =~ IGNORE_FILE_PATTERN}
end
@@ -375,12 +373,21 @@ def sync_default_gems_with_commits(gem, range)
next if skipped
if result.empty?
+ skipped = true
+ elsif result.start_with?("CONFLICT")
+ result = IO.popen(%W"git status --porcelain", &:readlines).each(&:chomp!)
+ ignore = result.map {|line| /^DU / =~ line and IGNORE_FILE_PATTERN =~ (name = $') and name}
+ ignore.compact!
+ system(*%W"git reset", *ignore) unless ignore.empty?
+ skipped = !system({"GIT_EDITOR"=>"true"}, *%W"git cherry-pick --no-edit --continue")
+ end
+
+ if skipped
failed_commits << sha
`git reset` && `git checkout .` && `git clean -fd`
- skipped = true
puts "Failed to pick #{sha}"
+ next
end
- next if skipped
puts "Update commit message: #{sha}"