git-multi 4.0.0 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ae3ea0db8c3ed8b96a4c03075a8fc03776e263dc
4
- data.tar.gz: f5bc88dda1be61636658ecdb265afed9059d81de
2
+ SHA256:
3
+ metadata.gz: 0124014ecd67cbda989511455a0a46878a40365660a613337c87b35813a48af8
4
+ data.tar.gz: 46971c1b9b60f26a13eb67453d5ab0f9e88bbcf795ed6709b26b6511d8c341c4
5
5
  SHA512:
6
- metadata.gz: ae0f27414bc44b20290191c1e126bea2a75fb248bbf64a0f361ffc606a0b55d6fd3f916185874ad6afdb24821972002adbd95c9b05aea47a09e19278c76f881f
7
- data.tar.gz: 94649a8d55edbcc6a4ef5e90313d6e46c9357ac87117036e555c17abba1a0609f64d1e5b79d1734b42797cf163e90482c21676fc4ea6daeae4495b327e04a931
6
+ metadata.gz: f9061a4c54c89b1eb6ad29949e0c72c6d4d2aadce7e37e498cfc5b2ecd8cbd769685e81d9f188b9d12aea30079d7fbb71944de86a6910a66f2734a074a807eea
7
+ data.tar.gz: 58c513e28b65dcd040b8ac1bf29c62c7130dcf848f0f106db2052ff7578381260b30c4f182c30ba61b4f819cb0a55fd72c9c8773a8a5d08dd3d48b5b93e65f2f
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  /vendor/
10
+ Brewfile.lock.json
data/.pryrc CHANGED
@@ -4,11 +4,13 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'git/multi'
5
5
 
6
6
  # this loads all 'git multi' contribs
7
- Dir.glob File.join(__dir__, 'contrib', '*', '*.rb'), &method(:require)
7
+ # rubocop:disable Lint/NonDeterministicRequireOrder
8
+ Dir.glob File.join(__dir__, 'contrib', '**', '*.rb'), &method(:require)
9
+ # rubocop:enable Lint/NonDeterministicRequireOrder
8
10
 
9
11
  # configure a logger
10
12
  require 'logger'
11
- logger = Logger.new(STDOUT)
13
+ logger = Logger.new($stdout)
12
14
  logger.level = Logger::INFO
13
15
 
14
16
  # configure Octokit middleware with logger
@@ -28,15 +30,21 @@ end
28
30
 
29
31
  # utility function to set pry context
30
32
  # to an instance of <Octokit::Client>
31
- def client() pry(Git::Hub.send(:client)); end
33
+ def client
34
+ pry(Git::Hub.send(:client))
35
+ end
32
36
 
33
37
  # utility function to set pry context
34
38
  # to the Array of github repositories
35
- def repos() pry(Git::Multi.repositories); end
39
+ def repos
40
+ pry(Git::Multi.repositories)
41
+ end
36
42
 
37
43
  # utility function to set pry context
38
44
  # to the various 'git multi' commands:
39
- def cmds() pry(Git::Multi::Commands); end
45
+ def cmds
46
+ pry(Git::Multi::Commands)
47
+ end
40
48
 
41
49
  # utility function to set context
42
50
  # to the named github repository:
data/.rubocop.yml CHANGED
@@ -1,14 +1,15 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.3
2
+ TargetRubyVersion: 2.6
3
+ NewCops: enable
3
4
  Exclude:
4
5
  - 'doc/*'
5
6
  - 'tmp/*'
6
7
  - 'pkg/*'
7
8
 
8
- Layout/EmptyLinesAroundClassBody:
9
- Enabled: false
10
- Layout/EmptyLinesAroundModuleBody:
11
- Enabled: false
9
+ require:
10
+ - rubocop-minitest
11
+ - rubocop-rake
12
+
12
13
  Layout/LineLength:
13
14
  Enabled: false
14
15
 
@@ -22,6 +23,9 @@ Metrics/MethodLength:
22
23
  Metrics/ModuleLength:
23
24
  Enabled: false
24
25
 
26
+ Rake/Desc:
27
+ Enabled: false
28
+
25
29
  Style/BlockDelimiters:
26
30
  Enabled: false
27
31
  Style/Documentation:
@@ -34,11 +38,14 @@ Style/NestedTernaryOperator:
34
38
  Enabled: false
35
39
  Style/RedundantBegin:
36
40
  Enabled: false
37
- Style/SingleLineMethods:
38
- Enabled: false
41
+
39
42
  Style/TrailingCommaInArguments:
40
43
  Enabled: false
41
44
  Style/TrailingCommaInArrayLiteral:
42
45
  Enabled: false
43
46
  Style/TrailingCommaInHashLiteral:
44
47
  Enabled: false
48
+
49
+ # https://github.com/rubocop/rubocop/issues/10394
50
+ Style/SwapValues:
51
+ Enabled: false
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3.8
1
+ 2.6.9
data/Gemfile.lock CHANGED
@@ -1,51 +1,82 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- git-multi (4.0.0)
5
- faraday (>= 0.9)
4
+ git-multi (7.0.0)
5
+ faraday (~> 1)
6
6
  octokit (~> 4)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- addressable (2.7.0)
11
+ addressable (2.8.0)
12
12
  public_suffix (>= 2.0.2, < 5.0)
13
- ast (2.4.0)
14
- coderay (1.1.2)
15
- faraday (1.0.0)
13
+ ast (2.4.2)
14
+ coderay (1.1.3)
15
+ faraday (1.9.3)
16
+ faraday-em_http (~> 1.0)
17
+ faraday-em_synchrony (~> 1.0)
18
+ faraday-excon (~> 1.1)
19
+ faraday-httpclient (~> 1.0)
20
+ faraday-multipart (~> 1.0)
21
+ faraday-net_http (~> 1.0)
22
+ faraday-net_http_persistent (~> 1.0)
23
+ faraday-patron (~> 1.0)
24
+ faraday-rack (~> 1.0)
25
+ faraday-retry (~> 1.0)
26
+ ruby2_keywords (>= 0.0.4)
27
+ faraday-em_http (1.0.0)
28
+ faraday-em_synchrony (1.0.0)
29
+ faraday-excon (1.1.0)
30
+ faraday-httpclient (1.0.1)
31
+ faraday-multipart (1.0.3)
16
32
  multipart-post (>= 1.2, < 3)
33
+ faraday-net_http (1.0.1)
34
+ faraday-net_http_persistent (1.2.0)
35
+ faraday-patron (1.0.0)
36
+ faraday-rack (1.0.0)
37
+ faraday-retry (1.0.3)
17
38
  interception (0.5)
18
- jaro_winkler (1.5.4)
19
- method_source (0.9.2)
20
- minitest (5.14.0)
39
+ method_source (1.0.0)
40
+ minitest (5.15.0)
21
41
  multipart-post (2.1.1)
22
- octokit (4.15.0)
42
+ octokit (4.22.0)
23
43
  faraday (>= 0.9)
24
44
  sawyer (~> 0.8.0, >= 0.5.3)
25
- parallel (1.19.1)
26
- parser (2.7.0.2)
27
- ast (~> 2.4.0)
28
- pry (0.12.2)
29
- coderay (~> 1.1.0)
30
- method_source (~> 0.9.0)
31
- pry-rescue (1.5.0)
45
+ parallel (1.21.0)
46
+ parser (3.1.0.0)
47
+ ast (~> 2.4.1)
48
+ pry (0.14.1)
49
+ coderay (~> 1.1)
50
+ method_source (~> 1.0)
51
+ pry-rescue (1.5.2)
32
52
  interception (>= 0.5)
33
53
  pry (>= 0.12.0)
34
- public_suffix (4.0.3)
35
- rainbow (3.0.0)
36
- rake (13.0.1)
37
- rubocop (0.79.0)
38
- jaro_winkler (~> 1.5.1)
54
+ public_suffix (4.0.6)
55
+ rainbow (3.1.1)
56
+ rake (13.0.6)
57
+ regexp_parser (2.2.0)
58
+ rexml (3.2.5)
59
+ rubocop (1.25.0)
39
60
  parallel (~> 1.10)
40
- parser (>= 2.7.0.1)
61
+ parser (>= 3.1.0.0)
41
62
  rainbow (>= 2.2.2, < 4.0)
63
+ regexp_parser (>= 1.8, < 3.0)
64
+ rexml
65
+ rubocop-ast (>= 1.15.1, < 2.0)
42
66
  ruby-progressbar (~> 1.7)
43
- unicode-display_width (>= 1.4.0, < 1.7)
44
- ruby-progressbar (1.10.1)
67
+ unicode-display_width (>= 1.4.0, < 3.0)
68
+ rubocop-ast (1.15.1)
69
+ parser (>= 3.0.1.1)
70
+ rubocop-minitest (0.17.1)
71
+ rubocop (>= 0.90, < 2.0)
72
+ rubocop-rake (0.6.0)
73
+ rubocop (~> 1.0)
74
+ ruby-progressbar (1.11.0)
75
+ ruby2_keywords (0.0.5)
45
76
  sawyer (0.8.2)
46
77
  addressable (>= 2.3.5)
47
78
  faraday (> 0.8, < 2.0)
48
- unicode-display_width (1.6.1)
79
+ unicode-display_width (2.1.0)
49
80
 
50
81
  PLATFORMS
51
82
  ruby
@@ -58,6 +89,8 @@ DEPENDENCIES
58
89
  pry-rescue
59
90
  rake
60
91
  rubocop
92
+ rubocop-minitest
93
+ rubocop-rake
61
94
 
62
95
  BUNDLED WITH
63
- 2.1.4
96
+ 2.3.6
data/README.md CHANGED
@@ -35,6 +35,8 @@ There are plenty of other utilities out there that do something similar, but typ
35
35
 
36
36
  ## Usage
37
37
 
38
+ Installing the gem installs the `git-multi` executable on your system's `${PATH}`, which means it can be run as a so-called [git subcommand](https://git.github.io/htmldocs/howto/new-command.html#:~:text=Runtime%20environment), as follows: `git multi`; a good starting point is:
39
+
38
40
  $ git multi --help
39
41
 
40
42
  ## Known Issues
data/bin/console CHANGED
@@ -6,4 +6,7 @@ require 'git/multi'
6
6
  require 'pry'
7
7
  Pry.start
8
8
 
9
+ # require "irb"
10
+ # IRB.start(__FILE__)
11
+
9
12
  # That's all Folks!
data/exe/git-multi CHANGED
@@ -6,13 +6,13 @@ require 'git/multi'
6
6
 
7
7
  multi_repo = command = nil
8
8
 
9
- if !STDIN.tty?
10
- # read list of repo full names from STDIN (~pseudo multi repo)
11
- multi_repo = STDIN.readlines.map(&:strip).map(&:freeze).freeze
12
- # reopen STDIN (to ensure all `Kernel.system` based cmds work)
13
- STDIN.reopen('/dev/tty')
14
- elsif (command = ARGV.shift)&.start_with? '++'
15
- multi_repo = command[2..-1]
9
+ if !$stdin.tty?
10
+ # read list of repo full names from $stdin (~pseudo multi-repo)
11
+ multi_repo = $stdin.readlines.map(&:strip).map(&:freeze).freeze
12
+ # reopen $stdin (to ensure all `Kernel.system` based cmds work)
13
+ $stdin.reopen('/dev/tty')
14
+ elsif (command = ARGV.shift)&.start_with?('++')
15
+ multi_repo = command.delete('++')
16
16
  command = nil
17
17
  end
18
18
 
@@ -54,8 +54,8 @@ begin
54
54
  end
55
55
  rescue ArgumentError
56
56
  abort \
57
- "Unknown multi repo: #{$ERROR_INFO.message}\n\n" \
58
- '(use `git multi --report` to list all known multi repos)'
57
+ "Unknown multi-repo: #{$ERROR_INFO.message}\n\n" \
58
+ '(use `git multi --report` to list all known multi-repos)'
59
59
  end
60
60
 
61
61
  # That's all Folks!
data/git-multi.gemspec CHANGED
@@ -14,7 +14,17 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = 'https://github.com/pvdb/git-multi'
15
15
  spec.license = 'MIT'
16
16
 
17
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
17
+ spec.required_ruby_version = ['>= 2.6.0', '< 2.7.0']
18
+
19
+ spec.metadata['homepage_uri'] = spec.homepage
20
+ spec.metadata['source_code_uri'] = spec.homepage
21
+ spec.metadata['changelog_uri'] = File.join(spec.homepage, 'blob', 'master', 'README.md')
22
+
23
+ spec.metadata['rubygems_mfa_required'] = 'true'
24
+
25
+ # Specify which files should be added to the gem when it is released.
26
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
27
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
18
28
  `git ls-files -z`
19
29
  .split("\x0")
20
30
  .reject { |f| f.match(%r{^(test|spec|features)/}) }
@@ -25,7 +35,7 @@ Gem::Specification.new do |spec|
25
35
 
26
36
  spec.post_install_message = Git::Multi::PIM
27
37
 
28
- spec.add_dependency 'faraday', '>= 0.9'
38
+ spec.add_dependency 'faraday', '~> 1'
29
39
  spec.add_dependency 'octokit', '~> 4'
30
40
 
31
41
  spec.add_development_dependency 'bundler'
@@ -34,4 +44,6 @@ Gem::Specification.new do |spec|
34
44
  spec.add_development_dependency 'pry-rescue'
35
45
  spec.add_development_dependency 'rake'
36
46
  spec.add_development_dependency 'rubocop'
47
+ spec.add_development_dependency 'rubocop-minitest'
48
+ spec.add_development_dependency 'rubocop-rake'
37
49
  end
data/lib/ext/dir.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  class Dir
2
2
  def git_repos(subdir = '*')
3
3
  Dir.glob(File.join(path, subdir, '*', '.git')).map { |path_to_git_dir|
4
- path_to_git_repo = File.dirname(path_to_git_dir) # without "/.git"
5
- repo_name = path_to_git_repo[%r{[^\/]+\/[^\/]+\z}] # e.g. "pvdb/git-multi"
6
- def repo_name.full_name() self; end
4
+ path_to_git_repo = File.dirname(path_to_git_dir) # without "/.git"
5
+ repo_name = path_to_git_repo[%r{[^/]+/[^/]+\z}] # e.g. "pvdb/git-multi"
6
+ def repo_name.full_name() self; end # rubocop:disable Style/SingleLineMethods
7
7
  repo_name
8
8
  }
9
9
  end
data/lib/ext/string.rb CHANGED
@@ -1,7 +1,5 @@
1
- # rubocop:disable Layout/EmptyLineBetweenDefs
2
-
3
1
  class String
4
-
2
+ # rubocop:disable Style/SingleLineMethods
5
3
  def colorize(color_code) "\e[#{color_code}m#{self}\e[0m"; end
6
4
 
7
5
  def bold() colorize('1'); end
@@ -12,7 +10,5 @@ class String
12
10
  def green() colorize('32'); end
13
11
 
14
12
  def undent() gsub(/^.{#{slice(/^ +/).length}}/, ''); end
15
-
13
+ # rubocop:enable Style/SingleLineMethods
16
14
  end
17
-
18
- # rubocop:enable Layout/EmptyLineBetweenDefs
data/lib/git/hub.rb CHANGED
@@ -2,10 +2,10 @@ require 'octokit'
2
2
 
3
3
  begin
4
4
  require 'net/http/persistent'
5
- Octokit.middleware.swap(
6
- Faraday::Adapter::NetHttp, # default Faraday adapter
7
- Faraday::Adapter::NetHttpPersistent # experimental Faraday adapter
8
- )
5
+ if Octokit.middleware.adapter == Faraday::Adapter::NetHttp
6
+ adapter = Faraday::RackBuilder::Handler.new(Faraday::Adapter::NetHttpPersistent)
7
+ Octokit.middleware.instance_variable_set(:@adapter, adapter)
8
+ end
9
9
  rescue LoadError
10
10
  # NOOP - `Net::HTTP::Persistent` is optional, so
11
11
  # if the gem isn't installed, then we run with the
@@ -16,7 +16,6 @@ end
16
16
 
17
17
  module Git
18
18
  module Hub
19
-
20
19
  module_function
21
20
 
22
21
  def client
@@ -30,31 +29,31 @@ module Git
30
29
 
31
30
  def connected?
32
31
  @connected ||= begin
33
- client.validate_credentials
34
- true
35
- rescue Faraday::ConnectionFailed
36
- false
37
- end
32
+ client.validate_credentials
33
+ true
34
+ rescue Faraday::ConnectionFailed
35
+ false
36
+ end
38
37
  end
39
38
 
40
39
  # FIXME: update login as part of `--refresh`
41
40
 
42
41
  def login
43
42
  @login ||= begin
44
- client.user.login
45
- rescue Octokit::Unauthorized, Faraday::ConnectionFailed
46
- nil
47
- end
43
+ client.user.login
44
+ rescue Octokit::Unauthorized, Faraday::ConnectionFailed
45
+ nil
46
+ end
48
47
  end
49
48
 
50
49
  # FIXME: update orgs as part of `--refresh`
51
50
 
52
51
  def orgs
53
52
  @orgs ||= begin
54
- client.organizations.map(&:login)
55
- rescue Octokit::Unauthorized, Faraday::ConnectionFailed
56
- []
57
- end
53
+ client.organizations.map(&:login)
54
+ rescue Octokit::Unauthorized, Faraday::ConnectionFailed
55
+ []
56
+ end
58
57
  end
59
58
 
60
59
  # pick a (semi-)random repo from GitHub
@@ -77,10 +76,10 @@ module Git
77
76
 
78
77
  @user_repositories = Hash.new { |repos, (user, type)|
79
78
  repos[[user, type]] = begin
80
- client
81
- .repositories(user, type: type)
82
- .sort_by { |repo| repo[:name].downcase }
83
- end
79
+ client
80
+ .repositories(user, type: type)
81
+ .sort_by { |repo| repo[:name].downcase }
82
+ end
84
83
  }
85
84
 
86
85
  def user_repositories(user, type = :owner)
@@ -94,16 +93,15 @@ module Git
94
93
 
95
94
  @org_repositories = Hash.new { |repos, (org, type)|
96
95
  repos[[org, type]] = begin
97
- client
98
- .org_repositories(org, type: type)
99
- .sort_by { |repo| repo[:name].downcase }
100
- end
96
+ client
97
+ .org_repositories(org, type: type)
98
+ .sort_by { |repo| repo[:name].downcase }
99
+ end
101
100
  }
102
101
 
103
102
  def org_repositories(org, type = :owner)
104
103
  # type can be one of: all, public, private, forks, sources, member
105
104
  @org_repositories[[org, type]]
106
105
  end
107
-
108
106
  end
109
107
  end
@@ -1,7 +1,6 @@
1
1
  module Git
2
2
  module Multi
3
3
  module Commands
4
-
5
4
  module_function
6
5
 
7
6
  def version
@@ -134,7 +133,7 @@ module Git
134
133
  begin
135
134
  if repository.instance_eval(commands.join(' && '))
136
135
  repository.just_do_it(
137
- ->(_repo) { nil },
136
+ ->(_repo) {}, # empty lambda: nil
138
137
  ->(repo) { puts repo.full_name },
139
138
  )
140
139
  end
@@ -203,7 +202,6 @@ module Git
203
202
  end
204
203
 
205
204
  private_class_method :system
206
-
207
205
  end
208
206
  end
209
207
  end
@@ -1,6 +1,5 @@
1
1
  module Git
2
2
  module Multi
3
-
4
3
  module_function
5
4
 
6
5
  def local_option(path, name, default = nil)
@@ -8,8 +7,8 @@ module Git
8
7
  value.empty? && default ? default : value
9
8
  end
10
9
 
11
- def full_names_for(superproject)
12
- list = `git config --get-all superproject.#{superproject}.repo`
10
+ def global_options(name)
11
+ list = `git config --global --get-all #{name}`
13
12
  list.split($RS).map(&:strip).map(&:freeze)
14
13
  end
15
14
 
@@ -23,9 +22,7 @@ module Git
23
22
  end
24
23
 
25
24
  def env_var(name, default = nil)
26
- value = ENV[name]
27
- (value.nil? || value.empty?) && default ? default : value
25
+ ENV.fetch(name, default)
28
26
  end
29
-
30
27
  end
31
28
  end
@@ -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
@@ -1,7 +1,6 @@
1
1
  module Git
2
2
  module Multi
3
3
  module Report
4
-
5
4
  TICK = ['2714'.hex].pack('U*').green.freeze
6
5
  CROSS = ['2718'.hex].pack('U*').red.freeze
7
6
  ARROW = ['2794'.hex].pack('U*').blue.freeze
@@ -34,7 +33,10 @@ module Git
34
33
  setting_status(["\tGitHub ", "#{github_count} repositories"])
35
34
  setting_status(["\tcloned ", cloned_count, "(#{missing_count} missing)"])
36
35
  Git::Multi.missing_repositories_for(owner).each do |missing|
37
- setting_status(["\tmissing", missing.full_name], false, false)
36
+ setting_status(["\tmissing", missing.full_name], valid: false, optional: false)
37
+ end
38
+ Git::Multi.excluded_repositories_for(owner).each do |excluded|
39
+ setting_status(["\texcluded", excluded.full_name], valid: false, optional: false)
38
40
  end
39
41
  setting_status(["\tsubdirs", subdir_count, "(#{surplus_count} surplus)"])
40
42
  end
@@ -43,14 +45,14 @@ module Git
43
45
  github_count = Git::Multi.repositories_for(superproject).count
44
46
 
45
47
  if github_count.zero?
46
- setting_status([message, 'listed but not configured'], false, false)
48
+ setting_status([message, 'listed but not configured'], valid: false, optional: false)
47
49
  else
48
- setting_status([message], true)
50
+ setting_status([message], valid: true)
49
51
  Git::Multi.repositories_for(superproject).each do |repo|
50
52
  if File.directory? repo.local_path
51
- setting_status(["\tcloned ", repo.full_name], true)
53
+ setting_status(["\tcloned ", repo.full_name], valid: true)
52
54
  else
53
- setting_status(["\tmissing", repo.full_name], false, false)
55
+ setting_status(["\tmissing", repo.full_name], valid: false, optional: false)
54
56
  end
55
57
  end
56
58
  end
@@ -77,7 +79,7 @@ module Git
77
79
  elsif token.empty?
78
80
  '(empty)'
79
81
  else
80
- "#{'*' * 36}#{token[36..-1]}"
82
+ "#{'*' * 36}#{token[36..]}"
81
83
  end
82
84
  end
83
85
 
@@ -103,7 +105,7 @@ module Git
103
105
  end
104
106
  end
105
107
 
106
- private_class_method def setting_status(messages, valid = false, optional = true)
108
+ private_class_method def setting_status(messages, valid: false, optional: true)
107
109
  fields = messages.compact.join(' - ')
108
110
  icon = valid ? TICK : optional ? ARROW : CROSS
109
111
  puts "#{icon} #{fields}"
@@ -116,19 +118,18 @@ module Git
116
118
  abbreviate(file),
117
119
  File.file?(file) ? "#{File.size(file).commify} bytes" : nil,
118
120
  ],
119
- file && !file.empty? && File.file?(file),
120
- false
121
+ valid: file && !file.empty? && File.file?(file),
122
+ optional: false,
121
123
  )
122
124
  end
123
125
 
124
126
  private_class_method def directory_status(messages, directory)
125
127
  setting_status(
126
128
  messages,
127
- directory && !directory.empty? && File.directory?(directory),
128
- false
129
+ valid: directory && !directory.empty? && File.directory?(directory),
130
+ optional: false,
129
131
  )
130
132
  end
131
-
132
133
  end
133
134
  end
134
135
  end
@@ -1,7 +1,7 @@
1
1
  module Git
2
2
  module Multi
3
3
  NAME = 'git-multi'.freeze
4
- VERSION = '4.0.0'.freeze
4
+ VERSION = '7.0.0'.freeze
5
5
 
6
6
  def self.version
7
7
  "#{NAME} v#{VERSION}"
data/lib/git/multi.rb CHANGED
@@ -36,9 +36,6 @@ module Git
36
36
  TOKEN = global_option('github.token', DEFAULT_TOKEN)
37
37
 
38
38
  GIT_MULTI_DIR = File.join(HOME, '.git', 'multi')
39
-
40
- FileUtils.mkdir_p(GIT_MULTI_DIR) # ensure `~/.git/multi` directory exists
41
-
42
39
  GITHUB_CACHE = File.join(GIT_MULTI_DIR, 'repositories.byte')
43
40
 
44
41
  USERS = global_list('git.multi.users')
@@ -46,6 +43,7 @@ module Git
46
43
  SUPERPROJECTS = global_list('git.multi.superprojects')
47
44
 
48
45
  MULTI_REPOS = (USERS + ORGANIZATIONS + SUPERPROJECTS)
46
+ EXCLUDED_REPOS = global_options('git.multi.exclude')
49
47
 
50
48
  MAN_PAGE = File.expand_path('../../man/git-multi.1', __dir__)
51
49
  HTML_PAGE = File.expand_path('../../man/git-multi.html', __dir__)
@@ -129,6 +127,9 @@ module Git
129
127
  #
130
128
 
131
129
  def refresh_repositories
130
+ # ensure `~/.git/multi` directory exists
131
+ FileUtils.mkdir_p(GIT_MULTI_DIR)
132
+
132
133
  File.open(GITHUB_CACHE, 'wb') do |file|
133
134
  Marshal.dump(github_repositories, file)
134
135
  end
@@ -139,7 +140,6 @@ module Git
139
140
  #
140
141
 
141
142
  module Nike
142
-
143
143
  # rubocop:disable Metrics/PerceivedComplexity
144
144
  # rubocop:disable Metrics/CyclomaticComplexity
145
145
  def just_do_it(interactive, pipelined, captured = nil, options = {})
@@ -149,15 +149,15 @@ module Git
149
149
  else Dir.pwd
150
150
  end
151
151
  Dir.chdir(working_dir) do
152
- if STDOUT.tty? && STDERR.tty?
153
- STDOUT.puts "#{full_name.invert} (#{fractional_index})"
152
+ if $stdout.tty? && $stderr.tty?
153
+ $stdout.puts "#{full_name.invert} (#{fractional_index})"
154
154
  interactive.call(self)
155
- elsif STDERR.tty? && captured
155
+ elsif $stderr.tty? && captured
156
156
  errors = File.join(ENV['TMPDIR'], "git-multi.#{$PID}")
157
157
  captured.call(self, errors)
158
158
  if File.exist?(errors) && !File.zero?(errors)
159
159
  # rubocop:disable Style/StderrPuts
160
- STDERR.puts "#{full_name.invert} (#{fractional_index})"
160
+ $stderr.puts "#{full_name.invert} (#{fractional_index})"
161
161
  Kernel.system "cat #{errors} > /dev/tty ;"
162
162
  # rubocop:enable Style/StderrPuts
163
163
  end
@@ -182,7 +182,6 @@ module Git
182
182
  end
183
183
  end
184
184
  end
185
-
186
185
  end
187
186
 
188
187
  def repositories
@@ -196,8 +195,10 @@ module Git
196
195
  repo.parent_dir = Pathname.new(File.join(WORKAREA, repo.owner.login))
197
196
  repo.local_path = Pathname.new(File.join(WORKAREA, repo.full_name))
198
197
  repo.fractional_index = "#{index + 1}/#{repos.count}"
198
+ # git multi will "hard ignore" all excluded repos
199
+ repo.excluded = EXCLUDED_REPOS.include?(repo.full_name)
199
200
  # fix 'repo' => https://github.com/octokit/octokit.rb/issues/727
200
- repo.compliant_ssh_url = 'ssh://' + repo.ssh_url.split(':', 2).join('/')
201
+ repo.compliant_ssh_url = "ssh://#{repo.ssh_url.split(':', 2).join('/')}"
201
202
  # remove optional '.git' suffix from 'git@github.com:pvdb/git-multi.git'
202
203
  repo.abbreviated_ssh_url = repo.ssh_url.chomp('.git')
203
204
  # extend 'repo' with 'just do it' capabilities
@@ -215,7 +216,11 @@ module Git
215
216
  # lists of repos for a given multi-repo
216
217
  #
217
218
 
218
- def repositories_for(multi_repo = nil)
219
+ def full_names_for(superproject)
220
+ global_options("superproject.#{superproject}.repo")
221
+ end
222
+
223
+ def all_repositories_for(multi_repo = nil)
219
224
  case (owner = superproject = full_names = multi_repo)
220
225
  when nil
221
226
  repositories # all of them
@@ -228,26 +233,34 @@ module Git
228
233
  repository.owner.login == owner
229
234
  }
230
235
  when *SUPERPROJECTS
231
- repositories_for(full_names_for(superproject))
236
+ all_repositories_for(full_names_for(superproject))
232
237
  else
233
238
  raise ArgumentError, multi_repo
234
239
  end
235
240
  end
236
241
 
242
+ def repositories_for(multi_repo = nil)
243
+ all_repositories_for(multi_repo).delete_if(&:excluded)
244
+ end
245
+
237
246
  #
238
247
  # lists of repositories with a given state
239
248
  #
240
249
 
241
250
  def archived_repositories_for(multi_repo = nil)
242
- repositories_for(multi_repo).find_all(&:archived)
251
+ all_repositories_for(multi_repo).find_all(&:archived)
243
252
  end
244
253
 
245
254
  def forked_repositories_for(multi_repo = nil)
246
- repositories_for(multi_repo).find_all(&:fork)
255
+ all_repositories_for(multi_repo).find_all(&:fork)
247
256
  end
248
257
 
249
258
  def private_repositories_for(multi_repo = nil)
250
- repositories_for(multi_repo).find_all(&:private)
259
+ all_repositories_for(multi_repo).find_all(&:private)
260
+ end
261
+
262
+ def excluded_repositories_for(multi_repo = nil)
263
+ all_repositories_for(multi_repo).find_all(&:excluded)
251
264
  end
252
265
 
253
266
  #
@@ -293,6 +306,5 @@ module Git
293
306
  File.directory? repo.local_path
294
307
  }
295
308
  end
296
-
297
309
  end
298
310
  end
data/man/git-multi.1 CHANGED
@@ -1,13 +1,13 @@
1
1
  '\" t
2
2
  .\" Title: git-multi
3
- .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
4
- .\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
5
- .\" Date: 01/25/2020
3
+ .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
4
+ .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
5
+ .\" Date: 02/02/2022
6
6
  .\" Manual: Git Manual
7
- .\" Source: Git 2.23.0.606.g08da6496b6.dirty
7
+ .\" Source: Git 2.35.1.4.g5d01301f2b.dirty
8
8
  .\" Language: English
9
9
  .\"
10
- .TH "GIT\-MULTI" "1" "01/25/2020" "Git 2\&.23\&.0\&.606\&.g08da64" "Git Manual"
10
+ .TH "GIT\-MULTI" "1" "02/02/2022" "Git 2\&.35\&.1\&.4\&.g5d01301f" "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 \fBv4\&.0\&.0\fR of \fIgit multi\fR \&... hooray!
34
+ This is \fBv7\&.0\&.0\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:
@@ -48,7 +48,7 @@ To execute the same git command in multiple repositories, the invocation is as f
48
48
  .fi
49
49
  .sp
50
50
  .sp
51
- Both ways of running \fBgit multi\fR take an optional, so\-called "multi repo" argument to limit the operation to the list of repositories in the referenced "multi repo", ie\&. a single GitHub user or a single GitHub organization:
51
+ Both ways of running \fBgit multi\fR take an optional, so\-called "multi\-repo" argument to limit the operation to the list of repositories in the referenced "multi\-repo", ie\&. a single GitHub user or a single GitHub organization:
52
52
  .sp
53
53
  .nf
54
54
  \fIgit multi\fR ++<multi_repo> \-\-<option> [<option_arguments>]
@@ -490,32 +490,34 @@ The following is a list of valid arguments for the \fBgit multi \-\-query\fR opt
490
490
  .RS 4
491
491
  .\}
492
492
  .nf
493
- archive_url archived assignees_url
494
- blobs_url branches_url clone_url
495
- collaborators_url comments_url commits_url
496
- compare_url contents_url contributors_url
497
- created_at default_branch deployments_url
498
- description disabled downloads_url
499
- events_url fork forks
500
- forks_count forks_url full_name
501
- git_commits_url git_refs_url git_tags_url
502
- git_url has_downloads has_issues
503
- has_pages has_projects has_wiki
504
- homepage hooks_url html_url
505
- id issue_comment_url issue_events_url
506
- issues_url keys_url labels_url
507
- language languages_url license
508
- merges_url milestones_url mirror_url
509
- name network_count node_id
510
- notifications_url open_issues open_issues_count
511
- organization owner permissions
512
- private pulls_url pushed_at
513
- releases_url size ssh_url
514
- stargazers_count stargazers_url statuses_url
515
- subscribers_count subscribers_url subscription_url
516
- svn_url tags_url teams_url
517
- temp_clone_token trees_url updated_at
518
- url watchers watchers_count
493
+ allow_forking archive_url archived
494
+ assignees_url blobs_url branches_url
495
+ clone_url collaborators_url comments_url
496
+ commits_url compare_url contents_url
497
+ contributors_url created_at default_branch
498
+ deployments_url description disabled
499
+ downloads_url events_url fork
500
+ forks forks_count forks_url
501
+ full_name git_commits_url git_refs_url
502
+ git_tags_url git_url has_downloads
503
+ has_issues has_pages has_projects
504
+ has_wiki homepage hooks_url
505
+ html_url id is_template
506
+ issue_comment_url issue_events_url issues_url
507
+ keys_url labels_url language
508
+ languages_url license merges_url
509
+ milestones_url mirror_url name
510
+ network_count node_id notifications_url
511
+ open_issues open_issues_count organization
512
+ owner permissions private
513
+ pulls_url pushed_at releases_url
514
+ size ssh_url stargazers_count
515
+ stargazers_url statuses_url subscribers_count
516
+ subscribers_url subscription_url svn_url
517
+ tags_url teams_url temp_clone_token
518
+ topics trees_url updated_at
519
+ url visibility watchers
520
+ watchers_count
519
521
  .fi
520
522
  .if n \{\
521
523
  .RE
@@ -545,6 +547,33 @@ git multi \-\-json | jq \-r \*(Aq\&.[] | select(\&.fork == true) | \&.full_name\
545
547
  .if n \{\
546
548
  .RE
547
549
  .\}
550
+ .SH "CHAINED INVOCATION"
551
+ .sp
552
+ When \fBgit multi\fR gets its input from a Unix pipeline \fI(as opposed to from a TTY)\fR, it constructs an "implicit" multi repo comprised of the "full" repo names it reads from \fBSTDIN\fR \fI(one full repo name per line)\fR\&.
553
+ .sp
554
+ This allows multiple \fBgit multi\fR invocations to be chained, for example by using the \fB\-\-json\fR or \fB\-\-find\fR options as follows:
555
+ .sp
556
+ .if n \{\
557
+ .RS 4
558
+ .\}
559
+ .nf
560
+ # run a git query or subcommand on repos that aren\*(Aqt archived (on GitHub)
561
+ git multi ++<multi_repo> \-\-json | jq \-r \*(Aq\&.[] | select(\&."archived" == false) | \&."full_name"\*(Aq | git multi <git_command>
562
+ .fi
563
+ .if n \{\
564
+ .RE
565
+ .\}
566
+ .sp
567
+ .if n \{\
568
+ .RS 4
569
+ .\}
570
+ .nf
571
+ # run a shell command inside repos that have Ruby as their main language
572
+ git multi ++<multi_repo> \-\-find \*(Aqlanguage == "Ruby"\*(Aq | git multi \-\-raw \*(Aqcat \&.ruby\-version\*(Aq
573
+ .fi
574
+ .if n \{\
575
+ .RE
576
+ .\}
548
577
  .SH "FILES"
549
578
  .PP
550
579
  \fB${HOME}/Workarea\fR
@@ -556,11 +585,6 @@ root directory where repos will been cloned
556
585
  .RS 4
557
586
  local, binary cache of GitHub repository metadata
558
587
  .RE
559
- .PP
560
- \fB${HOME}/\&.git/multi/superprojects\&.config\fR
561
- .RS 4
562
- definitions for so\-called "superproject" multi repos
563
- .RE
564
588
  .SH "REFERENCES"
565
589
  .sp
566
590
  .RS 4
data/man/git-multi.erb CHANGED
@@ -26,9 +26,9 @@ invocation is as follows:
26
26
  [verse]
27
27
  'git multi' <git_command> [<git_command_arguments>]
28
28
 
29
- Both ways of running `git multi` take an optional, so-called "multi repo"
29
+ Both ways of running `git multi` take an optional, so-called "multi-repo"
30
30
  argument to limit the operation to the list of repositories in the referenced
31
- "multi repo", ie. a single GitHub user or a single GitHub organization:
31
+ "multi-repo", ie. a single GitHub user or a single GitHub organization:
32
32
 
33
33
  [verse]
34
34
  'git multi' ++<multi_repo> --<option> [<option_arguments>]
@@ -246,6 +246,19 @@ are some examples:
246
246
  # print out the name of all "forked" repositories
247
247
  git multi --json | jq -r '.[] | select(.fork == true) | .full_name'
248
248
 
249
+ CHAINED INVOCATION
250
+ ------------------
251
+
252
+ When `git multi` gets its input from a Unix pipeline _(as opposed to from a TTY)_, it constructs an "implicit" multi repo comprised of the "full" repo names it reads from `STDIN` _(one full repo name per line)_.
253
+
254
+ This allows multiple `git multi` invocations to be chained, for example by using the `--json` or `--find` options as follows:
255
+
256
+ # run a git query or subcommand on repos that aren't archived (on GitHub)
257
+ git multi ++<multi_repo> --json | jq -r '.[] | select(."archived" == false) | ."full_name"' | git multi <git_command>
258
+
259
+ # run a shell command inside repos that have Ruby as their main language
260
+ git multi ++<multi_repo> --find 'language == "Ruby"' | git multi --raw 'cat .ruby-version'
261
+
249
262
  FILES
250
263
  -----
251
264
 
@@ -255,9 +268,6 @@ FILES
255
268
  `${HOME}/.git/multi/repositories.byte`::
256
269
  local, binary cache of GitHub repository metadata
257
270
 
258
- `${HOME}/.git/multi/superprojects.config`::
259
- definitions for so-called "superproject" multi repos
260
-
261
271
  REFERENCES
262
272
  ----------
263
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 8.6.10" />
7
+ <meta name="generator" content="AsciiDoc 10.1.1" />
8
8
  <title>git-multi(1)</title>
9
9
  <style type="text/css">
10
10
  /* Shared CSS for AsciiDoc xhtml11 and html5 backends */
@@ -436,7 +436,7 @@ thead, p.table.header {
436
436
  p.table {
437
437
  margin-top: 0;
438
438
  }
439
- /* Because the table frame attribute is overriden by CSS in most browsers. */
439
+ /* Because the table frame attribute is overridden by CSS in most browsers. */
440
440
  div.tableblock > table[frame="void"] {
441
441
  border-style: none;
442
442
  }
@@ -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>v4.0.0</code> of <em>git multi</em> &#8230; hooray!</p></div>
751
+ <div class="paragraph"><p>This is <code>v7.0.0</code> of <em>git multi</em> &#8230; hooray!</p></div>
752
752
  </div>
753
753
  </div>
754
754
  <div class="sect1">
@@ -766,9 +766,9 @@ invocation is as follows:</p></div>
766
766
  <pre class="content"><em>git multi</em> &lt;git_command&gt; [&lt;git_command_arguments&gt;]</pre>
767
767
  <div class="attribution">
768
768
  </div></div>
769
- <div class="paragraph"><p>Both ways of running <code>git multi</code> take an optional, so-called "multi repo"
769
+ <div class="paragraph"><p>Both ways of running <code>git multi</code> take an optional, so-called "multi-repo"
770
770
  argument to limit the operation to the list of repositories in the referenced
771
- "multi repo", ie. a single GitHub user or a single GitHub organization:</p></div>
771
+ "multi-repo", ie. a single GitHub user or a single GitHub organization:</p></div>
772
772
  <div class="verseblock">
773
773
  <pre class="content"><em>git multi</em> ++&lt;multi_repo&gt; --&lt;option&gt; [&lt;option_arguments&gt;]</pre>
774
774
  <div class="attribution">
@@ -1113,32 +1113,34 @@ and cached locally <em>(in binary format)</em> for performance and offline usage
1113
1113
  <div class="paragraph"><p>The following is a list of valid arguments for the <code>git multi --query</code> option:</p></div>
1114
1114
  <div class="literalblock">
1115
1115
  <div class="content">
1116
- <pre><code>archive_url archived assignees_url
1117
- blobs_url branches_url clone_url
1118
- collaborators_url comments_url commits_url
1119
- compare_url contents_url contributors_url
1120
- created_at default_branch deployments_url
1121
- description disabled downloads_url
1122
- events_url fork forks
1123
- forks_count forks_url full_name
1124
- git_commits_url git_refs_url git_tags_url
1125
- git_url has_downloads has_issues
1126
- has_pages has_projects has_wiki
1127
- homepage hooks_url html_url
1128
- id issue_comment_url issue_events_url
1129
- issues_url keys_url labels_url
1130
- language languages_url license
1131
- merges_url milestones_url mirror_url
1132
- name network_count node_id
1133
- notifications_url open_issues open_issues_count
1134
- organization owner permissions
1135
- private pulls_url pushed_at
1136
- releases_url size ssh_url
1137
- stargazers_count stargazers_url statuses_url
1138
- subscribers_count subscribers_url subscription_url
1139
- svn_url tags_url teams_url
1140
- temp_clone_token trees_url updated_at
1141
- url watchers watchers_count</code></pre>
1116
+ <pre><code>allow_forking archive_url archived
1117
+ assignees_url blobs_url branches_url
1118
+ clone_url collaborators_url comments_url
1119
+ commits_url compare_url contents_url
1120
+ contributors_url created_at default_branch
1121
+ deployments_url description disabled
1122
+ downloads_url events_url fork
1123
+ forks forks_count forks_url
1124
+ full_name git_commits_url git_refs_url
1125
+ git_tags_url git_url has_downloads
1126
+ has_issues has_pages has_projects
1127
+ has_wiki homepage hooks_url
1128
+ html_url id is_template
1129
+ issue_comment_url issue_events_url issues_url
1130
+ keys_url labels_url language
1131
+ languages_url license merges_url
1132
+ milestones_url mirror_url name
1133
+ network_count node_id notifications_url
1134
+ open_issues open_issues_count organization
1135
+ owner permissions private
1136
+ pulls_url pushed_at releases_url
1137
+ size ssh_url stargazers_count
1138
+ stargazers_url statuses_url subscribers_count
1139
+ subscribers_url subscription_url svn_url
1140
+ tags_url teams_url temp_clone_token
1141
+ topics trees_url updated_at
1142
+ url visibility watchers
1143
+ watchers_count</code></pre>
1142
1144
  </div></div>
1143
1145
  </div>
1144
1146
  </div>
@@ -1162,6 +1164,23 @@ git multi --json | jq -r '.[] | select(.fork == true) | .full_name'</code></pre>
1162
1164
  </div>
1163
1165
  </div>
1164
1166
  <div class="sect1">
1167
+ <h2 id="_chained_invocation">CHAINED INVOCATION</h2>
1168
+ <div class="sectionbody">
1169
+ <div class="paragraph"><p>When <code>git multi</code> gets its input from a Unix pipeline <em>(as opposed to from a TTY)</em>, it constructs an "implicit" multi repo comprised of the "full" repo names it reads from <code>STDIN</code> <em>(one full repo name per line)</em>.</p></div>
1170
+ <div class="paragraph"><p>This allows multiple <code>git multi</code> invocations to be chained, for example by using the <code>--json</code> or <code>--find</code> options as follows:</p></div>
1171
+ <div class="literalblock">
1172
+ <div class="content">
1173
+ <pre><code># run a git query or subcommand on repos that aren't archived (on GitHub)
1174
+ git multi ++&lt;multi_repo&gt; --json | jq -r '.[] | select(."archived" == false) | ."full_name"' | git multi &lt;git_command&gt;</code></pre>
1175
+ </div></div>
1176
+ <div class="literalblock">
1177
+ <div class="content">
1178
+ <pre><code># run a shell command inside repos that have Ruby as their main language
1179
+ git multi ++&lt;multi_repo&gt; --find 'language == "Ruby"' | git multi --raw 'cat .ruby-version'</code></pre>
1180
+ </div></div>
1181
+ </div>
1182
+ </div>
1183
+ <div class="sect1">
1165
1184
  <h2 id="_files">FILES</h2>
1166
1185
  <div class="sectionbody">
1167
1186
  <div class="dlist"><dl>
@@ -1181,14 +1200,6 @@ git multi --json | jq -r '.[] | select(.fork == true) | .full_name'</code></pre>
1181
1200
  local, binary cache of GitHub repository metadata
1182
1201
  </p>
1183
1202
  </dd>
1184
- <dt class="hdlist1">
1185
- <code>${HOME}/.git/multi/superprojects.config</code>
1186
- </dt>
1187
- <dd>
1188
- <p>
1189
- definitions for so-called "superproject" multi repos
1190
- </p>
1191
- </dd>
1192
1203
  </dl></div>
1193
1204
  </div>
1194
1205
  </div>
@@ -1222,7 +1233,7 @@ the <code>jq</code> command-line utility:
1222
1233
  <div id="footer">
1223
1234
  <div id="footer-text">
1224
1235
  Last updated
1225
- 2020-01-25 11:55:56 GMT
1236
+ 2022-02-02 17:29:17 GMT
1226
1237
  </div>
1227
1238
  </div>
1228
1239
  </body>
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-multi
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 7.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Vandenberk
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-25 00:00:00.000000000 Z
11
+ date: 2022-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.9'
19
+ version: '1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.9'
26
+ version: '1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: octokit
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +122,34 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-minitest
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-rake
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
125
153
  description: Run the same git command in a set of related repos
126
154
  email:
127
155
  - pvandenberk@mac.com
@@ -165,14 +193,22 @@ files:
165
193
  homepage: https://github.com/pvdb/git-multi
166
194
  licenses:
167
195
  - MIT
168
- metadata: {}
196
+ metadata:
197
+ homepage_uri: https://github.com/pvdb/git-multi
198
+ source_code_uri: https://github.com/pvdb/git-multi
199
+ changelog_uri: https://github.com/pvdb/git-multi/blob/master/README.md
200
+ rubygems_mfa_required: 'true'
169
201
  post_install_message: "\nThe only required setting for \e[1mgit multi\e[0m is:\n\n\tgit
170
202
  config --global --add \e[1mgithub.token\e[0m <your_github_oauth_token>\n\nThe following
171
203
  settings for \e[1mgit multi\e[0m are\noptional, and take 0, 1 or more values:\n\n\tgit
172
204
  config --global --add \e[1mgit.multi.users\e[0m <list_of_github_users>\n\tgit config
173
205
  --global --add \e[1mgit.multi.organizations\e[0m <list_of_github_orgs>\n\nUnless
174
206
  your top-level workarea is `${HOME}/Workarea` you should also set:\n\n\tgit config
175
- --global --add \e[1mgit.multi.workarea\e[0m <your_root_workarea>\n\nThanks for using
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
176
212
  \e[1mgit multi\e[0m ... the ultimate multi-repo utility for git!\n\n"
177
213
  rdoc_options: []
178
214
  require_paths:
@@ -181,16 +217,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
181
217
  requirements:
182
218
  - - ">="
183
219
  - !ruby/object:Gem::Version
184
- version: '0'
220
+ version: 2.6.0
221
+ - - "<"
222
+ - !ruby/object:Gem::Version
223
+ version: 2.7.0
185
224
  required_rubygems_version: !ruby/object:Gem::Requirement
186
225
  requirements:
187
226
  - - ">="
188
227
  - !ruby/object:Gem::Version
189
228
  version: '0'
190
229
  requirements: []
191
- rubyforge_project:
192
- rubygems_version: 2.5.2.3
193
- signing_key:
230
+ rubygems_version: 3.0.3.1
231
+ signing_key:
194
232
  specification_version: 4
195
233
  summary: The ultimate multi-repo utility for git!
196
234
  test_files: []