зеркало из https://github.com/github/ruby.git
102 строки
2.5 KiB
Ruby
Executable File
102 строки
2.5 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
require "fileutils"
|
|
|
|
test_lib_files = [
|
|
["lib/core_assertions.rb", "test/lib"],
|
|
["lib/find_executable.rb", "test/lib"],
|
|
["lib/envutil.rb", "test/lib"],
|
|
["lib/helper.rb", "test/lib"],
|
|
["rakelib/sync_tool.rake", "rakelib"],
|
|
].map do |file, dest|
|
|
[file, dest, File.read("#{__dir__}/#{file}")]
|
|
end
|
|
|
|
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 = "From https://github.com/ruby/ruby/commit/#{commit}"
|
|
|
|
update = true
|
|
keep = nil
|
|
topdir = nil
|
|
while arg = ARGV.shift
|
|
case arg
|
|
when '--dry-run'
|
|
update = false
|
|
keep = true
|
|
when '--update'
|
|
update = true
|
|
keep = false if keep.nil?
|
|
when '--no-update'
|
|
update = false
|
|
keep = true if keep.nil?
|
|
when '--keep'
|
|
keep = true
|
|
when '--no-keep'
|
|
keep = false
|
|
when '--'
|
|
break
|
|
else
|
|
if topdir
|
|
ARGV.unshift(arg)
|
|
else
|
|
topdir = arg
|
|
end
|
|
break
|
|
end
|
|
end
|
|
topdir ||= '..'
|
|
repos = ARGV unless ARGV.empty?
|
|
|
|
repos.each do |repo|
|
|
puts "#{repo}: start"
|
|
|
|
Dir.chdir("#{topdir}/#{repo}") do
|
|
if `git branch --list #{branch_name}`.empty?
|
|
system(*%W"git switch master")
|
|
system(*%W"git switch -c #{branch_name}")
|
|
else
|
|
puts "#{repo}: skip"
|
|
next
|
|
end
|
|
|
|
test_lib_files.each do |file, dest, code|
|
|
FileUtils.mkdir_p(dest)
|
|
file = "#{dest}/#{File.basename(file)}"
|
|
File.binwrite(file, code)
|
|
system "git add #{file}"
|
|
end
|
|
|
|
rf = File.binread("Rakefile")
|
|
if rf.sub!(/(?>\A|(\n)\n*)task +:sync_tool +do\n(?>(?> .*)?\n)*end\n(?=\z|(\n))/) {$1&&$2}
|
|
File.binwrite("Rakefile", rf)
|
|
system "git add Rakefile"
|
|
end
|
|
|
|
if IO.popen(%W"git commit -m #{title}\n\n#{message}", &:read).chomp =~ /nothing to commit/
|
|
puts "#{repo}: nothing to update"
|
|
elsif update
|
|
system(*%W"git push")
|
|
system(*%W"gh repo set-default ruby/#{repo}")
|
|
system(*%W"gh pr create --base master --head ruby:#{branch_name} --title #{title} --body #{message}")
|
|
puts "#{repo}: updated"
|
|
end
|
|
|
|
unless keep
|
|
system "git switch master"
|
|
system "git branch -D #{branch_name}"
|
|
end
|
|
end
|
|
rescue StandardError => e
|
|
puts e
|
|
end
|