git-multi 6.0.0 → 8.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/Gemfile.lock +25 -23
- data/git-multi.gemspec +1 -1
- data/lib/git/multi/config.rb +3 -4
- data/lib/git/multi/gemspec.rb +7 -0
- data/lib/git/multi/report.rb +4 -1
- data/lib/git/multi/version.rb +1 -1
- data/lib/git/multi.rb +25 -9
- data/man/git-multi.1 +5 -10
- data/man/git-multi.erb +0 -3
- data/man/git-multi.html +4 -12
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6fc5756a97dd43c7ca903ed1060715223b162d5413258bafd1961236f78e1cba
|
4
|
+
data.tar.gz: 5a86de46ae41373db370b8d8cfe3a030f5dbc402f93f9bd866cbed861a2ceab7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 775ba9085768be324c346075e72d57dcab01bdbc4292a56906c44fcfff4798cdcd078bf75032b1847bde27e9a2f624d7dbb275434ba0c3880a5ab3bede5662bd
|
7
|
+
data.tar.gz: 13e1998772853d33aae8b4adaa2d0a277dc40e002d0a07bfc890952136edc110eb079718c9faa67db57ac7cd4e92596e5e1bd25a0d137cfe498534c36b586efb
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.6.
|
1
|
+
2.6.10
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
git-multi (
|
4
|
+
git-multi (8.0.1)
|
5
5
|
faraday (~> 1)
|
6
6
|
octokit (~> 4)
|
7
7
|
|
@@ -12,7 +12,7 @@ GEM
|
|
12
12
|
public_suffix (>= 2.0.2, < 5.0)
|
13
13
|
ast (2.4.2)
|
14
14
|
coderay (1.1.3)
|
15
|
-
faraday (1.
|
15
|
+
faraday (1.10.0)
|
16
16
|
faraday-em_http (~> 1.0)
|
17
17
|
faraday-em_synchrony (~> 1.0)
|
18
18
|
faraday-excon (~> 1.1)
|
@@ -28,22 +28,23 @@ GEM
|
|
28
28
|
faraday-em_synchrony (1.0.0)
|
29
29
|
faraday-excon (1.1.0)
|
30
30
|
faraday-httpclient (1.0.1)
|
31
|
-
faraday-multipart (1.0.
|
32
|
-
multipart-post (
|
31
|
+
faraday-multipart (1.0.4)
|
32
|
+
multipart-post (~> 2)
|
33
33
|
faraday-net_http (1.0.1)
|
34
34
|
faraday-net_http_persistent (1.2.0)
|
35
35
|
faraday-patron (1.0.0)
|
36
36
|
faraday-rack (1.0.0)
|
37
37
|
faraday-retry (1.0.3)
|
38
38
|
interception (0.5)
|
39
|
+
json (2.6.2)
|
39
40
|
method_source (1.0.0)
|
40
|
-
minitest (5.
|
41
|
-
multipart-post (2.
|
42
|
-
octokit (4.
|
43
|
-
faraday (>=
|
44
|
-
sawyer (~> 0.
|
45
|
-
parallel (1.
|
46
|
-
parser (3.1.
|
41
|
+
minitest (5.16.2)
|
42
|
+
multipart-post (2.2.3)
|
43
|
+
octokit (4.25.1)
|
44
|
+
faraday (>= 1, < 3)
|
45
|
+
sawyer (~> 0.9)
|
46
|
+
parallel (1.22.1)
|
47
|
+
parser (3.1.2.0)
|
47
48
|
ast (~> 2.4.1)
|
48
49
|
pry (0.14.1)
|
49
50
|
coderay (~> 1.1)
|
@@ -51,32 +52,33 @@ GEM
|
|
51
52
|
pry-rescue (1.5.2)
|
52
53
|
interception (>= 0.5)
|
53
54
|
pry (>= 0.12.0)
|
54
|
-
public_suffix (4.0.
|
55
|
+
public_suffix (4.0.7)
|
55
56
|
rainbow (3.1.1)
|
56
57
|
rake (13.0.6)
|
57
|
-
regexp_parser (2.
|
58
|
+
regexp_parser (2.5.0)
|
58
59
|
rexml (3.2.5)
|
59
|
-
rubocop (1.
|
60
|
+
rubocop (1.32.0)
|
61
|
+
json (~> 2.3)
|
60
62
|
parallel (~> 1.10)
|
61
63
|
parser (>= 3.1.0.0)
|
62
64
|
rainbow (>= 2.2.2, < 4.0)
|
63
65
|
regexp_parser (>= 1.8, < 3.0)
|
64
|
-
rexml
|
65
|
-
rubocop-ast (>= 1.
|
66
|
+
rexml (>= 3.2.5, < 4.0)
|
67
|
+
rubocop-ast (>= 1.19.1, < 2.0)
|
66
68
|
ruby-progressbar (~> 1.7)
|
67
69
|
unicode-display_width (>= 1.4.0, < 3.0)
|
68
|
-
rubocop-ast (1.
|
69
|
-
parser (>= 3.
|
70
|
-
rubocop-minitest (0.
|
70
|
+
rubocop-ast (1.19.1)
|
71
|
+
parser (>= 3.1.1.0)
|
72
|
+
rubocop-minitest (0.20.1)
|
71
73
|
rubocop (>= 0.90, < 2.0)
|
72
74
|
rubocop-rake (0.6.0)
|
73
75
|
rubocop (~> 1.0)
|
74
76
|
ruby-progressbar (1.11.0)
|
75
77
|
ruby2_keywords (0.0.5)
|
76
|
-
sawyer (0.
|
78
|
+
sawyer (0.9.2)
|
77
79
|
addressable (>= 2.3.5)
|
78
|
-
faraday (
|
79
|
-
unicode-display_width (2.
|
80
|
+
faraday (>= 0.17.3, < 3)
|
81
|
+
unicode-display_width (2.2.0)
|
80
82
|
|
81
83
|
PLATFORMS
|
82
84
|
ruby
|
@@ -93,4 +95,4 @@ DEPENDENCIES
|
|
93
95
|
rubocop-rake
|
94
96
|
|
95
97
|
BUNDLED WITH
|
96
|
-
2.3.
|
98
|
+
2.3.19
|
data/git-multi.gemspec
CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.homepage = 'https://github.com/pvdb/git-multi'
|
15
15
|
spec.license = 'MIT'
|
16
16
|
|
17
|
-
spec.required_ruby_version = ['>= 2.6.0', '<
|
17
|
+
spec.required_ruby_version = ['>= 2.6.0', '< 3.0.0']
|
18
18
|
|
19
19
|
spec.metadata['homepage_uri'] = spec.homepage
|
20
20
|
spec.metadata['source_code_uri'] = spec.homepage
|
data/lib/git/multi/config.rb
CHANGED
@@ -7,8 +7,8 @@ module Git
|
|
7
7
|
value.empty? && default ? default : value
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
list = `git config --get-all
|
10
|
+
def global_options(name)
|
11
|
+
list = `git config --global --get-all #{name}`
|
12
12
|
list.split($RS).map(&:strip).map(&:freeze)
|
13
13
|
end
|
14
14
|
|
@@ -22,8 +22,7 @@ module Git
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def env_var(name, default = nil)
|
25
|
-
|
26
|
-
(value.nil? || value.empty?) && default ? default : value
|
25
|
+
ENV.fetch(name, default)
|
27
26
|
end
|
28
27
|
end
|
29
28
|
end
|
data/lib/git/multi/gemspec.rb
CHANGED
@@ -16,6 +16,13 @@ module Git
|
|
16
16
|
|
17
17
|
\tgit config --global --add \033[1mgit.multi.workarea\033[0m <your_root_workarea>
|
18
18
|
|
19
|
+
You can specify a list of user or organization repositories to ignore:
|
20
|
+
|
21
|
+
\tgit config --global --add \033[1mgit.multi.exclude\033[0m <org_name>/<repo_name>
|
22
|
+
\tgit config --global --add \033[1mgit.multi.exclude\033[0m <user_name>/<repo_name>
|
23
|
+
|
24
|
+
(can be used multiple times to exclude multiple user or organization repositories)
|
25
|
+
|
19
26
|
Thanks for using \033[1mgit multi\033[0m ... the ultimate multi-repo utility for git!
|
20
27
|
|
21
28
|
PIM
|
data/lib/git/multi/report.rb
CHANGED
@@ -35,6 +35,9 @@ module Git
|
|
35
35
|
Git::Multi.missing_repositories_for(owner).each do |missing|
|
36
36
|
setting_status(["\tmissing", missing.full_name], valid: false, optional: false)
|
37
37
|
end
|
38
|
+
Git::Multi.excluded_repositories_for(owner).each do |excluded|
|
39
|
+
setting_status(["\texcluded", excluded.full_name], valid: false, optional: false)
|
40
|
+
end
|
38
41
|
setting_status(["\tsubdirs", subdir_count, "(#{surplus_count} surplus)"])
|
39
42
|
end
|
40
43
|
|
@@ -44,7 +47,7 @@ module Git
|
|
44
47
|
if github_count.zero?
|
45
48
|
setting_status([message, 'listed but not configured'], valid: false, optional: false)
|
46
49
|
else
|
47
|
-
setting_status([message], true)
|
50
|
+
setting_status([message], valid: true)
|
48
51
|
Git::Multi.repositories_for(superproject).each do |repo|
|
49
52
|
if File.directory? repo.local_path
|
50
53
|
setting_status(["\tcloned ", repo.full_name], valid: true)
|
data/lib/git/multi/version.rb
CHANGED
data/lib/git/multi.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'etc'
|
2
2
|
require 'json'
|
3
|
+
require 'tmpdir'
|
3
4
|
require 'pathname'
|
4
5
|
require 'fileutils'
|
5
6
|
require 'shellwords'
|
@@ -36,9 +37,6 @@ module Git
|
|
36
37
|
TOKEN = global_option('github.token', DEFAULT_TOKEN)
|
37
38
|
|
38
39
|
GIT_MULTI_DIR = File.join(HOME, '.git', 'multi')
|
39
|
-
|
40
|
-
FileUtils.mkdir_p(GIT_MULTI_DIR) # ensure `~/.git/multi` directory exists
|
41
|
-
|
42
40
|
GITHUB_CACHE = File.join(GIT_MULTI_DIR, 'repositories.byte')
|
43
41
|
|
44
42
|
USERS = global_list('git.multi.users')
|
@@ -46,6 +44,7 @@ module Git
|
|
46
44
|
SUPERPROJECTS = global_list('git.multi.superprojects')
|
47
45
|
|
48
46
|
MULTI_REPOS = (USERS + ORGANIZATIONS + SUPERPROJECTS)
|
47
|
+
EXCLUDED_REPOS = global_options('git.multi.exclude')
|
49
48
|
|
50
49
|
MAN_PAGE = File.expand_path('../../man/git-multi.1', __dir__)
|
51
50
|
HTML_PAGE = File.expand_path('../../man/git-multi.html', __dir__)
|
@@ -129,6 +128,9 @@ module Git
|
|
129
128
|
#
|
130
129
|
|
131
130
|
def refresh_repositories
|
131
|
+
# ensure `~/.git/multi` directory exists
|
132
|
+
FileUtils.mkdir_p(GIT_MULTI_DIR)
|
133
|
+
|
132
134
|
File.open(GITHUB_CACHE, 'wb') do |file|
|
133
135
|
Marshal.dump(github_repositories, file)
|
134
136
|
end
|
@@ -152,7 +154,7 @@ module Git
|
|
152
154
|
$stdout.puts "#{full_name.invert} (#{fractional_index})"
|
153
155
|
interactive.call(self)
|
154
156
|
elsif $stderr.tty? && captured
|
155
|
-
errors = File.join(
|
157
|
+
errors = File.join(Dir.tmpdir, "git-multi.#{$PID}")
|
156
158
|
captured.call(self, errors)
|
157
159
|
if File.exist?(errors) && !File.zero?(errors)
|
158
160
|
# rubocop:disable Style/StderrPuts
|
@@ -194,6 +196,8 @@ module Git
|
|
194
196
|
repo.parent_dir = Pathname.new(File.join(WORKAREA, repo.owner.login))
|
195
197
|
repo.local_path = Pathname.new(File.join(WORKAREA, repo.full_name))
|
196
198
|
repo.fractional_index = "#{index + 1}/#{repos.count}"
|
199
|
+
# git multi will "hard ignore" all excluded repos
|
200
|
+
repo.excluded = EXCLUDED_REPOS.include?(repo.full_name)
|
197
201
|
# fix 'repo' => https://github.com/octokit/octokit.rb/issues/727
|
198
202
|
repo.compliant_ssh_url = "ssh://#{repo.ssh_url.split(':', 2).join('/')}"
|
199
203
|
# remove optional '.git' suffix from 'git@github.com:pvdb/git-multi.git'
|
@@ -213,7 +217,11 @@ module Git
|
|
213
217
|
# lists of repos for a given multi-repo
|
214
218
|
#
|
215
219
|
|
216
|
-
def
|
220
|
+
def full_names_for(superproject)
|
221
|
+
global_options("superproject.#{superproject}.repo")
|
222
|
+
end
|
223
|
+
|
224
|
+
def all_repositories_for(multi_repo = nil)
|
217
225
|
case (owner = superproject = full_names = multi_repo)
|
218
226
|
when nil
|
219
227
|
repositories # all of them
|
@@ -226,26 +234,34 @@ module Git
|
|
226
234
|
repository.owner.login == owner
|
227
235
|
}
|
228
236
|
when *SUPERPROJECTS
|
229
|
-
|
237
|
+
all_repositories_for(full_names_for(superproject))
|
230
238
|
else
|
231
239
|
raise ArgumentError, multi_repo
|
232
240
|
end
|
233
241
|
end
|
234
242
|
|
243
|
+
def repositories_for(multi_repo = nil)
|
244
|
+
all_repositories_for(multi_repo).delete_if(&:excluded)
|
245
|
+
end
|
246
|
+
|
235
247
|
#
|
236
248
|
# lists of repositories with a given state
|
237
249
|
#
|
238
250
|
|
239
251
|
def archived_repositories_for(multi_repo = nil)
|
240
|
-
|
252
|
+
all_repositories_for(multi_repo).find_all(&:archived)
|
241
253
|
end
|
242
254
|
|
243
255
|
def forked_repositories_for(multi_repo = nil)
|
244
|
-
|
256
|
+
all_repositories_for(multi_repo).find_all(&:fork)
|
245
257
|
end
|
246
258
|
|
247
259
|
def private_repositories_for(multi_repo = nil)
|
248
|
-
|
260
|
+
all_repositories_for(multi_repo).find_all(&:private)
|
261
|
+
end
|
262
|
+
|
263
|
+
def excluded_repositories_for(multi_repo = nil)
|
264
|
+
all_repositories_for(multi_repo).find_all(&:excluded)
|
249
265
|
end
|
250
266
|
|
251
267
|
#
|
data/man/git-multi.1
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
.\" Title: git-multi
|
3
3
|
.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
|
4
4
|
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
|
5
|
-
.\" Date:
|
5
|
+
.\" Date: 08/01/2022
|
6
6
|
.\" Manual: Git Manual
|
7
|
-
.\" Source: Git 2.35.1.
|
7
|
+
.\" Source: Git 2.35.1.455.g1a4874565f.dirty
|
8
8
|
.\" Language: English
|
9
9
|
.\"
|
10
|
-
.TH "GIT\-MULTI" "1" "
|
10
|
+
.TH "GIT\-MULTI" "1" "08/01/2022" "Git 2\&.35\&.1\&.455\&.g1a4874" "Git Manual"
|
11
11
|
.\" -----------------------------------------------------------------
|
12
12
|
.\" * Define some portability stuff
|
13
13
|
.\" -----------------------------------------------------------------
|
@@ -31,7 +31,7 @@
|
|
31
31
|
git-multi \- execute the same git command in multiple repositories
|
32
32
|
.SH "VERSION"
|
33
33
|
.sp
|
34
|
-
This is \
|
34
|
+
This is \fBv8\&.0\&.1\fR of \fIgit multi\fR \&... hooray!
|
35
35
|
.SH "SYNOPSIS"
|
36
36
|
.sp
|
37
37
|
There are some options for \fBgit multi\fR itself, in which case it is invoked as follows:
|
@@ -517,7 +517,7 @@ subscribers_url subscription_url svn_url
|
|
517
517
|
tags_url teams_url temp_clone_token
|
518
518
|
topics trees_url updated_at
|
519
519
|
url visibility watchers
|
520
|
-
watchers_count
|
520
|
+
watchers_count web_commit_signoff_required
|
521
521
|
.fi
|
522
522
|
.if n \{\
|
523
523
|
.RE
|
@@ -585,11 +585,6 @@ root directory where repos will been cloned
|
|
585
585
|
.RS 4
|
586
586
|
local, binary cache of GitHub repository metadata
|
587
587
|
.RE
|
588
|
-
.PP
|
589
|
-
\fB${HOME}/\&.git/multi/superprojects\&.config\fR
|
590
|
-
.RS 4
|
591
|
-
definitions for so\-called "superproject" multi\-repos
|
592
|
-
.RE
|
593
588
|
.SH "REFERENCES"
|
594
589
|
.sp
|
595
590
|
.RS 4
|
data/man/git-multi.erb
CHANGED
@@ -268,9 +268,6 @@ FILES
|
|
268
268
|
`${HOME}/.git/multi/repositories.byte`::
|
269
269
|
local, binary cache of GitHub repository metadata
|
270
270
|
|
271
|
-
`${HOME}/.git/multi/superprojects.config`::
|
272
|
-
definitions for so-called "superproject" multi-repos
|
273
|
-
|
274
271
|
REFERENCES
|
275
272
|
----------
|
276
273
|
|
data/man/git-multi.html
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
5
5
|
<head>
|
6
6
|
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
7
|
-
<meta name="generator" content="AsciiDoc 10.
|
7
|
+
<meta name="generator" content="AsciiDoc 10.2.0" />
|
8
8
|
<title>git-multi(1)</title>
|
9
9
|
<style type="text/css">
|
10
10
|
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
|
@@ -748,7 +748,7 @@ git-multi(1) Manual Page
|
|
748
748
|
<div class="sect1">
|
749
749
|
<h2 id="_version">VERSION</h2>
|
750
750
|
<div class="sectionbody">
|
751
|
-
<div class="paragraph"><p>This is <code>
|
751
|
+
<div class="paragraph"><p>This is <code>v8.0.1</code> of <em>git multi</em> … hooray!</p></div>
|
752
752
|
</div>
|
753
753
|
</div>
|
754
754
|
<div class="sect1">
|
@@ -1140,7 +1140,7 @@ subscribers_url subscription_url svn_url
|
|
1140
1140
|
tags_url teams_url temp_clone_token
|
1141
1141
|
topics trees_url updated_at
|
1142
1142
|
url visibility watchers
|
1143
|
-
watchers_count</code></pre>
|
1143
|
+
watchers_count web_commit_signoff_required</code></pre>
|
1144
1144
|
</div></div>
|
1145
1145
|
</div>
|
1146
1146
|
</div>
|
@@ -1200,14 +1200,6 @@ git multi ++<multi_repo> --find 'language == "Ruby"' | git multi --raw 'ca
|
|
1200
1200
|
local, binary cache of GitHub repository metadata
|
1201
1201
|
</p>
|
1202
1202
|
</dd>
|
1203
|
-
<dt class="hdlist1">
|
1204
|
-
<code>${HOME}/.git/multi/superprojects.config</code>
|
1205
|
-
</dt>
|
1206
|
-
<dd>
|
1207
|
-
<p>
|
1208
|
-
definitions for so-called "superproject" multi-repos
|
1209
|
-
</p>
|
1210
|
-
</dd>
|
1211
1203
|
</dl></div>
|
1212
1204
|
</div>
|
1213
1205
|
</div>
|
@@ -1241,7 +1233,7 @@ the <code>jq</code> command-line utility:
|
|
1241
1233
|
<div id="footer">
|
1242
1234
|
<div id="footer-text">
|
1243
1235
|
Last updated
|
1244
|
-
2022-
|
1236
|
+
2022-08-01 12:35:33 BST
|
1245
1237
|
</div>
|
1246
1238
|
</div>
|
1247
1239
|
</body>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-multi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 8.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Vandenberk
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -204,7 +204,11 @@ post_install_message: "\nThe only required setting for \e[1mgit multi\e[0m is:\n
|
|
204
204
|
config --global --add \e[1mgit.multi.users\e[0m <list_of_github_users>\n\tgit config
|
205
205
|
--global --add \e[1mgit.multi.organizations\e[0m <list_of_github_orgs>\n\nUnless
|
206
206
|
your top-level workarea is `${HOME}/Workarea` you should also set:\n\n\tgit config
|
207
|
-
--global --add \e[1mgit.multi.workarea\e[0m <your_root_workarea>\n\
|
207
|
+
--global --add \e[1mgit.multi.workarea\e[0m <your_root_workarea>\n\nYou can specify
|
208
|
+
a list of user or organization repositories to ignore:\n\n\tgit config --global
|
209
|
+
--add \e[1mgit.multi.exclude\e[0m <org_name>/<repo_name>\n\tgit config --global
|
210
|
+
--add \e[1mgit.multi.exclude\e[0m <user_name>/<repo_name>\n\n(can be used multiple
|
211
|
+
times to exclude multiple user or organization repositories)\n\nThanks for using
|
208
212
|
\e[1mgit multi\e[0m ... the ultimate multi-repo utility for git!\n\n"
|
209
213
|
rdoc_options: []
|
210
214
|
require_paths:
|
@@ -216,7 +220,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
216
220
|
version: 2.6.0
|
217
221
|
- - "<"
|
218
222
|
- !ruby/object:Gem::Version
|
219
|
-
version:
|
223
|
+
version: 3.0.0
|
220
224
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
221
225
|
requirements:
|
222
226
|
- - ">="
|