summaryrefslogtreecommitdiff
path: root/tool
diff options
context:
space:
mode:
Diffstat (limited to 'tool')
-rw-r--r--tool/sync_default_gems.rb24
1 files changed, 21 insertions, 3 deletions
diff --git a/tool/sync_default_gems.rb b/tool/sync_default_gems.rb
index 408614f8b8..33703d0492 100644
--- a/tool/sync_default_gems.rb
+++ b/tool/sync_default_gems.rb
@@ -259,14 +259,30 @@ def sync_default_gems_with_commits(gem, range)
puts commits.map{|commit| commit.join(": ")}.join("\n")
puts "----"
+ failed_commits = []
+
commits.each do |sha, subject|
puts "Pick #{sha} from #{$repositories[gem.to_sym]}."
- `git cherry-pick #{sha}`
- unless $?.success?
+ skipped = false
+ result = IO.popen(%W"git cherry-pick #{sha}").read
+ if result =~ /nothing\ to\ commit/
+ `git reset`
+ skipped = true
+ puts "Skip empty commit #{sha}"
+ end
+ next if skipped
+
+ if result.empty?
+ failed_commits << sha
+ `git reset` && `git checkout .` && `git clean -fd`
+ skipped = true
puts "Failed to pick #{sha}"
- break
end
+ next if skipped
+
+ puts "Update commit message: #{sha}"
+
prefix = "[#{($repositories[gem.to_sym])}]".gsub(/\//, '\/')
suffix = "https://github.com/#{($repositories[gem.to_sym])}/commit/#{sha[0,10]}"
`git filter-branch -f --msg-filter 'sed "1s/^/#{prefix} /" && echo && echo #{suffix}' -- HEAD~1..HEAD`
@@ -275,6 +291,8 @@ def sync_default_gems_with_commits(gem, range)
break
end
end
+
+ puts failed_commits
end
def sync_lib(repo)