multi_repo 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yaml +1 -1
- data/CHANGELOG.md +14 -0
- data/lib/multi_repo/helpers/pull_request_blaster_outer.rb +55 -47
- data/lib/multi_repo/version.rb +1 -1
- data/scripts/pull_request_blaster_outer +9 -4
- data/scripts/pull_request_merger +3 -3
- data/scripts/show_commit_history +18 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 313d72f8febb801872f9f65ade31381a3104b32a21d1628e8c56ee3186b78164
|
4
|
+
data.tar.gz: 1850ed479241b145ba84295dcfe0a0cde15bce8d28f81c2fb11df90e69349d40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e5ce408edfeab47540e55241c6508cc6d0d84be9e31cc9531ecf7136d44c2b8be3797c7a909128fa22a0ba67f864e485eac32f121c68bd5afba674d983845be
|
7
|
+
data.tar.gz: c178885fe71a1f399d25f661081cb7560bdaba988d9b4a4ac1ec0c4b207858c798f18b751da988c7aa864a6a1854af96d6de361b55530b37ac8069699e9241e8
|
data/.github/workflows/ci.yaml
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# Change Log
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
This project adheres to [Semantic Versioning](http://semver.org/).
|
4
|
+
|
5
|
+
## [Unreleased]
|
6
|
+
|
7
|
+
## [0.3.1] - 2024-01-31
|
8
|
+
### Fixed
|
9
|
+
- [pull_request_blaster_outer] Various fixes and cleanup output [[#21](https://github.com/ManageIQ/multi_repo/pull/21)]
|
10
|
+
- [show_commit_history] Prevent missing ranges from failing the entire run [[#22](https://github.com/ManageIQ/multi_repo/pull/22)]
|
11
|
+
- [pull_request_merger] Fixing issue passing kwargs on Ruby 3 [[#23](https://github.com/ManageIQ/multi_repo/pull/23)]
|
12
|
+
|
13
|
+
[Unreleased]: https://github.com/ManageIQ/more_core_extensions/compare/v0.3.1...HEAD
|
14
|
+
[0.3.1]: https://github.com/ManageIQ/more_core_extensions/compare/v0.3.0...v0.3.1
|
@@ -9,8 +9,7 @@ module MultiRepo::Helpers
|
|
9
9
|
@base = base
|
10
10
|
@head = head
|
11
11
|
@script = begin
|
12
|
-
s = Pathname.new(script)
|
13
|
-
s = Pathname.new(Dir.pwd).join(script) if s.relative?
|
12
|
+
s = Pathname.new(script).expand_path
|
14
13
|
raise "File not found #{s}" unless s.exist?
|
15
14
|
s.to_s
|
16
15
|
end
|
@@ -20,12 +19,10 @@ module MultiRepo::Helpers
|
|
20
19
|
end
|
21
20
|
|
22
21
|
def blast
|
23
|
-
puts "+++ blasting #{repo.name}..."
|
24
|
-
|
25
22
|
repo.git.fetch
|
26
23
|
|
27
24
|
unless repo.git.remote_branch?("origin", base)
|
28
|
-
puts "
|
25
|
+
puts "!! Skipping #{repo.name}: 'origin/#{base}' not found".light_yellow
|
29
26
|
return
|
30
27
|
end
|
31
28
|
|
@@ -33,20 +30,31 @@ module MultiRepo::Helpers
|
|
33
30
|
run_script
|
34
31
|
|
35
32
|
result = false
|
36
|
-
if !
|
37
|
-
puts
|
38
|
-
|
39
|
-
result = "
|
33
|
+
if !changes_found?
|
34
|
+
puts
|
35
|
+
puts "!! Skipping #{repo.name}: No changes found".light_yellow
|
36
|
+
result = "no changes".light_yellow
|
40
37
|
else
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
38
|
+
commit_changes
|
39
|
+
show_commit
|
40
|
+
puts
|
41
|
+
|
42
|
+
if dry_run
|
43
|
+
puts "** dry-run: Skipping opening pull request".light_black
|
44
|
+
result = "dry run".light_black
|
45
|
+
else
|
46
|
+
print "Do you want to open a pull request on #{repo.name} with the above changes? (y/N): "
|
47
|
+
answer = $stdin.gets.chomp
|
48
|
+
if answer.upcase.start_with?("Y")
|
49
|
+
fork_repo unless forked?
|
50
|
+
push_branch
|
51
|
+
result = open_pull_request
|
52
|
+
else
|
53
|
+
puts "!! Skipping #{repo.name}: User ignored".light_yellow
|
54
|
+
result = "ignored".light_yellow
|
55
|
+
end
|
47
56
|
end
|
48
57
|
end
|
49
|
-
puts "--- blasting #{repo.name} complete"
|
50
58
|
result
|
51
59
|
end
|
52
60
|
|
@@ -57,7 +65,9 @@ module MultiRepo::Helpers
|
|
57
65
|
end
|
58
66
|
|
59
67
|
def forked?
|
60
|
-
|
68
|
+
# NOTE: There is an assumption here that the fork's name will match the source's name.
|
69
|
+
# Ideally there would be a "forked from" field in the repo metadata, but there isn't.
|
70
|
+
github.client.repos(github.client.login, :type => "forks").any? { |m| m.name == repo.short_name }
|
61
71
|
end
|
62
72
|
|
63
73
|
def fork_repo
|
@@ -70,41 +80,41 @@ module MultiRepo::Helpers
|
|
70
80
|
|
71
81
|
def run_script
|
72
82
|
repo.chdir do
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
83
|
+
Bundler.with_unbundled_env do
|
84
|
+
parts = []
|
85
|
+
parts << "GITHUB_REPO=#{repo.name}"
|
86
|
+
parts << "DRY_RUN=true" if dry_run
|
87
|
+
parts << script
|
88
|
+
cmd = parts.join(" ")
|
89
|
+
|
90
|
+
unless system(cmd)
|
91
|
+
puts "!! Script execution failed.".light_red
|
92
|
+
exit $?.exitstatus
|
93
|
+
end
|
82
94
|
end
|
83
95
|
end
|
84
96
|
end
|
85
97
|
|
98
|
+
def changes_found?
|
99
|
+
repo.git.client.capturing.status("--porcelain").chomp.present?
|
100
|
+
end
|
101
|
+
|
86
102
|
def commit_changes
|
87
|
-
repo.
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
puts "!!! --dry-run enabled: If the above commit in #{repo.path} looks good, run again without dry run to fork the repo, push the branch and open a pull request."
|
94
|
-
end
|
95
|
-
true
|
96
|
-
rescue MiniGit::GitError => e
|
97
|
-
e.status.exitstatus == 0
|
98
|
-
end
|
99
|
-
end
|
103
|
+
repo.git.client.add("-v", ".")
|
104
|
+
repo.git.client.commit("-m", message)
|
105
|
+
end
|
106
|
+
|
107
|
+
def show_commit
|
108
|
+
repo.git.client.show
|
100
109
|
end
|
101
110
|
|
102
|
-
def
|
111
|
+
def blast_remote
|
103
112
|
"pr_blaster_outer"
|
104
113
|
end
|
105
114
|
|
106
|
-
def
|
107
|
-
|
115
|
+
def blast_remote_url
|
116
|
+
# NOTE: Similar to `forked?`, there is an assumption here that the fork's name will match the source's name.
|
117
|
+
"git@github.com:#{github.client.login}/#{repo.short_name}.git"
|
108
118
|
end
|
109
119
|
|
110
120
|
def pr_head
|
@@ -112,10 +122,8 @@ module MultiRepo::Helpers
|
|
112
122
|
end
|
113
123
|
|
114
124
|
def push_branch
|
115
|
-
repo.
|
116
|
-
|
117
|
-
repo.git.client.push("-f", origin_remote, "#{head}:#{head}")
|
118
|
-
end
|
125
|
+
repo.git.client.remote("add", blast_remote, blast_remote_url) unless repo.git.remote?(blast_remote)
|
126
|
+
repo.git.client.push("-f", blast_remote, "#{head}:#{head}")
|
119
127
|
end
|
120
128
|
|
121
129
|
def open_pull_request
|
@@ -123,7 +131,7 @@ module MultiRepo::Helpers
|
|
123
131
|
pr.html_url
|
124
132
|
rescue => err
|
125
133
|
raise unless err.message.include?("A pull request already exists")
|
126
|
-
puts "
|
134
|
+
puts "!! Skipping #{repo.name}: #{err.message}".light_yellow
|
127
135
|
end
|
128
136
|
end
|
129
137
|
end
|
data/lib/multi_repo/version.rb
CHANGED
@@ -4,7 +4,9 @@ require "bundler/inline"
|
|
4
4
|
gemfile do
|
5
5
|
source "https://rubygems.org"
|
6
6
|
gem "multi_repo", require: "multi_repo/cli", path: File.expand_path("..", __dir__)
|
7
|
+
gem "more_core_extensions"
|
7
8
|
end
|
9
|
+
require "more_core_extensions/core_ext/array/tableize"
|
8
10
|
|
9
11
|
opts = Optimist.options do
|
10
12
|
synopsis "Create a pull request on all repos."
|
@@ -19,8 +21,11 @@ opts = Optimist.options do
|
|
19
21
|
end
|
20
22
|
|
21
23
|
results = {}
|
22
|
-
|
23
|
-
|
24
|
+
begin
|
25
|
+
MultiRepo::CLI.each_repo(**opts) do |repo|
|
26
|
+
results[repo.name] = MultiRepo::Helpers::PullRequestBlasterOuter.new(repo, **opts).blast
|
27
|
+
end
|
28
|
+
ensure
|
29
|
+
puts "Summary:"
|
30
|
+
puts results.to_a.tableize(:header => false) unless results.empty?
|
24
31
|
end
|
25
|
-
|
26
|
-
pp results
|
data/scripts/pull_request_merger
CHANGED
@@ -57,9 +57,9 @@ opts[:prs].each do |pr|
|
|
57
57
|
|
58
58
|
repo_name, pr_number = PR_REGEX.match(pr).captures
|
59
59
|
|
60
|
-
merge_pull_request(repo_name, pr_number, opts)
|
61
|
-
add_labels(repo_name, pr_number, opts) if opts[:labels].present?
|
62
|
-
assign_user(repo_name, pr_number, opts)
|
60
|
+
merge_pull_request(repo_name, pr_number, **opts)
|
61
|
+
add_labels(repo_name, pr_number, **opts) if opts[:labels].present?
|
62
|
+
assign_user(repo_name, pr_number, **opts)
|
63
63
|
|
64
64
|
puts
|
65
65
|
end
|
data/scripts/show_commit_history
CHANGED
@@ -48,7 +48,15 @@ MultiRepo::CLI.repos_for(**opts).each do |repo|
|
|
48
48
|
end
|
49
49
|
results["other"] = []
|
50
50
|
|
51
|
-
log =
|
51
|
+
log =
|
52
|
+
begin
|
53
|
+
repo.git.client.capturing.log({:oneline => true}, range)
|
54
|
+
rescue MiniGit::GitError
|
55
|
+
puts "ERROR: commit range not found.".light_red
|
56
|
+
puts
|
57
|
+
next
|
58
|
+
end
|
59
|
+
|
52
60
|
log.lines.each do |line|
|
53
61
|
next unless (match = line.match(/Merge pull request #(\d+)\b/))
|
54
62
|
|
@@ -71,7 +79,15 @@ MultiRepo::CLI.repos_for(**opts).each do |repo|
|
|
71
79
|
|
72
80
|
repos_with_changes << repo if changes_found
|
73
81
|
when "commit"
|
74
|
-
output =
|
82
|
+
output =
|
83
|
+
begin
|
84
|
+
repo.git.client.capturing.log({:oneline => true, :decorate => true, :graph => true}, range)
|
85
|
+
rescue MiniGit::GitError
|
86
|
+
puts "ERROR: commit range not found.".light_red
|
87
|
+
puts
|
88
|
+
next
|
89
|
+
end
|
90
|
+
|
75
91
|
puts output
|
76
92
|
repos_with_changes << repo if output.present?
|
77
93
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multi_repo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ManageIQ Authors
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -279,6 +279,7 @@ files:
|
|
279
279
|
- ".rubocop_cc.yml"
|
280
280
|
- ".rubocop_local.yml"
|
281
281
|
- ".whitesource"
|
282
|
+
- CHANGELOG.md
|
282
283
|
- Gemfile
|
283
284
|
- LICENSE.txt
|
284
285
|
- README.md
|