diff --git a/tool/sync_test_lib.rb b/tool/sync_test_lib.rb new file mode 100755 index 00000000000000..d950b4994defea --- /dev/null +++ b/tool/sync_test_lib.rb @@ -0,0 +1,51 @@ +#!/usr/bin/env ruby + +require "fileutils" + +test_lib_files = %w[core_assertions.rb find_executable.rb envutil.rb] + +repos = %w[ + bigdecimal cgi cmath date delegate did_you_mean digest drb erb etc + fileutils find forwardable io-console io-nonblock io-wait ipaddr + irb logger net-http net-protocol open-uri open3 openssl optparse + ostruct pathname pstore psych racc resolv stringio strscan tempfile + time timeout tmpdir uri weakref win32ole yaml zlib +] + +branch_name = "update-test-lib-#{Time.now.strftime("%Y%m%d")}" +title = "Update test libraries from ruby/ruby #{Time.now.strftime("%Y-%m-%d")}" +commit = `git rev-parse HEAD`.chomp +message = "Update test libraries from https://github.com/ruby/ruby/commit/#{commit}" + +repos.each do |repo| + puts "#{repo}: start" + + Dir.chdir("../#{repo}") do + if `git branch --list #{branch_name}`.empty? + system "git switch master" + system "git switch -c #{branch_name}" + else + puts "#{repo}: " + next + end + + test_lib_files.each do |file| + FileUtils.cp("../ruby/tool/lib/#{file}", "test/lib/#{file}") + system "git add test/lib/#{file}" + end + + if `git commit -m '#{message}'`.chomp =~ /nothing to commit/ + puts "#{repo}: nothing to update" + else + system "git push" + system "gh repo set-default ruby/#{repo}" + system "gh pr create --base master --head ruby:#{branch_name} --title \"#{title}\" --body \"#{message}\"" + puts "#{repo}: updated" + end + + system "git switch master" + system "git branch -D #{branch_name}" + end +rescue StandardError => e + ptus e +end