git-multi 1.0.5 → 1.0.6

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
2
  SHA256:
3
- metadata.gz: 5662c60b6650e56066d055e7864327c792b31ef2bbb8d963e46ba86f31992707
4
- data.tar.gz: 486067d955e4a13f7e09ce5db09793df17bd03858e0ceec46092a2e002857f21
3
+ metadata.gz: 49bfee3e9faa4d3eea798863ec6891761b5f2dc144912437f8aed41f4ef3afc4
4
+ data.tar.gz: e35b5abff76ddc7f394f1b0e35a3479bd6a365f16861e39111a70a1f8f95fd13
5
5
  SHA512:
6
- metadata.gz: 2263f8291a3fff25abc42a61502d84a8c525e4c1acca473b7a8040149b088541003234aba3755e4264106cf67c503bf4d5829bcd7a607921cda468f1ec1f139b
7
- data.tar.gz: 570f5804de61968cc585506e127a48f14064cf22ab416e31b2fc291b4de131f8cee7dfa23f70446066a3b9de2588e7c62fdb4ca2eabddef847b6d911f2ad11f0
6
+ metadata.gz: b1a5a8d752b0c9ff87f3764f60bd83ea13ff293b1ad0fbf3a5d4e029e00423e438916242093fddbdc3d98092efd34f40f6166ffec2b629bdc6cd17c97c300e95
7
+ data.tar.gz: 503dd9d963fedc4c1d629ae1db81e79caad4274f5f5d4bdf600e8679e36c1dfd2fdd374da57dca193f94a3b6224af318b6e546ccea9632e6ea31bf0346edcd33
data/.pryrc CHANGED
@@ -16,10 +16,10 @@ require 'octokit'
16
16
  Octokit.middleware.response :logger, logger
17
17
 
18
18
  # enumerator for Faraday middleware apps
19
- def (middleware = Octokit.middleware).each_app
19
+ def (_middleware = Octokit.middleware).each_app
20
20
  Enumerator.new do |yielder|
21
21
  next_app = app
22
- while next_app do
22
+ while next_app
23
23
  yielder << next_app
24
24
  next_app = next_app.instance_variable_get(:@app)
25
25
  end
@@ -28,12 +28,12 @@ end
28
28
 
29
29
  # utility function to set pry context
30
30
  # to an instance of <Octokit::Client>
31
- def client() pry Git::Hub.send(:client) ; end
31
+ def client() pry Git::Hub.send(:client); end
32
32
 
33
33
  # utility function to set pry context
34
34
  # to the Array of github repositories
35
- def repos() pry Git::Multi.repositories ; end
35
+ def repos() pry Git::Multi.repositories; end
36
36
 
37
37
  # utility function to set pry context
38
38
  # to the various 'git multi' commands:
39
- def cmds() pry Git::Multi::Commands ; end
39
+ def cmds() pry Git::Multi::Commands; end
data/.rubocop.yml CHANGED
@@ -1,4 +1,33 @@
1
- Style/FrozenStringLiteralComment:
1
+ Layout/EmptyLinesAroundClassBody:
2
+ Enabled: false
3
+ Layout/EmptyLinesAroundModuleBody:
4
+ Enabled: false
5
+
6
+ Lint/HandleExceptions:
7
+ Enabled: false
8
+
9
+ Metrics/AbcSize:
2
10
  Enabled: false
11
+ Metrics/LineLength:
12
+ Enabled: false
13
+ Metrics/MethodLength:
14
+ Enabled: false
15
+ Metrics/ModuleLength:
16
+ Enabled: false
17
+
3
18
  Style/BlockDelimiters:
4
19
  Enabled: false
20
+ Style/Documentation:
21
+ Enabled: false
22
+ Style/FrozenStringLiteralComment:
23
+ Enabled: false
24
+ Style/Lambda:
25
+ Enabled: false
26
+ Style/NestedTernaryOperator:
27
+ Enabled: false
28
+ Style/SingleLineMethods:
29
+ Enabled: false
30
+ Style/TrailingCommaInArguments:
31
+ Enabled: false
32
+ Style/TrailingCommaInLiteral:
33
+ Enabled: false
data/Rakefile CHANGED
@@ -15,6 +15,10 @@ task :validate do
15
15
  gemspec.validate
16
16
  end
17
17
 
18
+ require 'rubocop/rake_task'
19
+
20
+ RuboCop::RakeTask.new
21
+
18
22
  require 'rake/testtask'
19
23
 
20
24
  Rake::TestTask.new(:test) do |t|
@@ -23,7 +27,7 @@ Rake::TestTask.new(:test) do |t|
23
27
  t.test_files = FileList['test/**/*_test.rb']
24
28
  end
25
29
 
26
- task :default => :test
30
+ task :default => [:rubocop, :test]
27
31
 
28
32
  require 'git/multi'
29
33
 
@@ -41,8 +45,8 @@ end
41
45
 
42
46
  task :documentation => git_asciidoc do
43
47
  Dir.chdir(documentation) do
44
- # use git's documentation approach and build system
45
- %x{ make git-multi.1 git-multi.html }
48
+ # use git's documentation framework
49
+ `make git-multi.1 git-multi.html`
46
50
  FileUtils.cp 'git-multi.1', Git::Multi::MAN_PAGE
47
51
  FileUtils.cp 'git-multi.html', Git::Multi::HTML_PAGE
48
52
  end
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ # rubocop:disable all
4
+
3
5
  TIME_INTERVALS = {
4
6
 
5
7
  :minute => ( MINUTE = 60 ), # seconds
@@ -50,9 +52,11 @@ RED = {
50
52
  :year => "#FF2222" ,
51
53
  }.freeze
52
54
 
53
- if __FILE__ == $0
55
+ # rubocop:enable all
56
+
57
+ if $PROGRAM_NAME == __FILE__
54
58
 
55
- $:.unshift File.expand_path('../../lib', __dir__)
59
+ $LOAD_PATH.unshift File.expand_path('../../lib', __dir__)
56
60
 
57
61
  require 'git/multi'
58
62
 
@@ -64,6 +68,7 @@ if __FILE__ == $0
64
68
  def project.age_in_seconds
65
69
  (Time.now - pushed_at).to_i
66
70
  end
71
+
67
72
  def project.age_in_words
68
73
  time_distance_in_words(age_in_seconds)
69
74
  end
@@ -75,7 +80,7 @@ if __FILE__ == $0
75
80
  require 'erb'
76
81
 
77
82
  # generate HTML page with a dashboard of global GitHub repository activity:
78
- puts ERB.new(File.read(File.join(__dir__, "git-dash.erb"))).result(binding)
83
+ puts ERB.new(File.read(File.join(__dir__, 'git-dash.erb'))).result(binding)
79
84
 
80
85
  end
81
86
 
data/exe/git-multi CHANGED
@@ -31,7 +31,7 @@ when /\A--/
31
31
  else
32
32
  abort \
33
33
  "Unknown 'git multi' command: #{command}\n\n" \
34
- "(use --help/-h to list all available commands)"
34
+ '(use --help/-h to list all available commands)'
35
35
  end
36
36
  when nil, '', '-h'
37
37
  Git::Multi::Commands.help
data/git-multi.gemspec CHANGED
@@ -1,6 +1,7 @@
1
1
  lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require 'git/multi/version'
4
+ require 'git/multi/gemspec'
4
5
 
5
6
  Gem::Specification.new do |spec|
6
7
  spec.name = Git::Multi::NAME
data/lib/ext/commify.rb CHANGED
@@ -6,6 +6,6 @@ end
6
6
 
7
7
  class String
8
8
  def commify
9
- gsub(/(\d)(?=(\d{3})+(\..*)?$)/,'\1,')
9
+ gsub(/(\d)(?=(\d{3})+(\..*)?$)/, '\1,')
10
10
  end
11
11
  end
data/lib/ext/dir.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  class Dir
2
2
  def git_repos(subdir = '*')
3
- Dir.glob(File.join(self.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[/[^\/]+\/[^\/]+\z/] # e.g. "pvdb/git-multi"
6
- def repo_name.full_name() self ; end # awesome duck-typing!
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
7
7
  repo_name
8
8
  }
9
9
  end
data/lib/ext/kernel.rb ADDED
@@ -0,0 +1,5 @@
1
+ module Kernel
2
+ def interactive?
3
+ STDOUT.tty? && STDERR.tty?
4
+ end
5
+ end
data/lib/ext/notify.rb CHANGED
@@ -13,7 +13,7 @@ def notify(message, options = {}, verbose = false)
13
13
  # send a given message to the Mac OS X Notification Center
14
14
  # but only if the git-multi script is running interactively
15
15
  # and if the "terminal-notifier" gem has been installed...
16
- if $INTERACTIVE && defined?(TerminalNotifier)
16
+ interactive? && defined?(TerminalNotifier) && begin
17
17
  options[:title] ||= 'git-multi'
18
18
  TerminalNotifier.notify(message, options, verbose)
19
19
  end
@@ -1,5 +1,7 @@
1
1
  module Sawyer
2
2
  class Resource
3
- def to_json(*args) to_h.to_json(args) ; end
3
+ def to_json(*args)
4
+ to_h.to_json(args)
5
+ end
4
6
  end
5
7
  end
data/lib/ext/string.rb CHANGED
@@ -1,14 +1,18 @@
1
+ # rubocop:disable Layout/EmptyLineBetweenDefs
2
+
1
3
  class String
2
4
 
3
- def colorize(color_code) "\e[#{color_code}m#{self}\e[0m" ; end
5
+ def colorize(color_code) "\e[#{color_code}m#{self}\e[0m"; end
4
6
 
5
- def bold() colorize('1') ; end
6
- def invert() colorize('7') ; end
7
+ def bold() colorize('1'); end
8
+ def invert() colorize('7'); end
7
9
 
8
- def red() colorize('31') ; end
9
- def blue() colorize('34') ; end
10
- def green() colorize('32') ; end
10
+ def red() colorize('31'); end
11
+ def blue() colorize('34'); end
12
+ def green() colorize('32'); end
11
13
 
12
- def undent() gsub(/^.{#{slice(/^ +/).length}}/, '') ; end
14
+ def undent() gsub(/^.{#{slice(/^ +/).length}}/, ''); end
13
15
 
14
16
  end
17
+
18
+ # rubocop:enable Layout/EmptyLineBetweenDefs
data/lib/git/hub.rb CHANGED
@@ -21,8 +21,8 @@ module Git
21
21
 
22
22
  def client
23
23
  @client ||= Octokit::Client.new(
24
- :access_token => Git::Multi::TOKEN,
25
- :auto_paginate => true,
24
+ access_token: Git::Multi::TOKEN,
25
+ auto_paginate: true,
26
26
  )
27
27
  end
28
28
 
@@ -39,7 +39,7 @@ module Git
39
39
  end
40
40
  end
41
41
 
42
- # FIXME update login as part of `--refresh`
42
+ # FIXME: update login as part of `--refresh`
43
43
 
44
44
  def login
45
45
  @login ||= begin
@@ -49,7 +49,7 @@ module Git
49
49
  end
50
50
  end
51
51
 
52
- # FIXME update orgs as part of `--refresh`
52
+ # FIXME: update orgs as part of `--refresh`
53
53
 
54
54
  def orgs
55
55
  @orgs ||= begin
@@ -78,12 +78,14 @@ module Git
78
78
  @user_repositories = Hash.new { |repos, (user, type)|
79
79
  repos[[user, type]] = begin
80
80
  notify("Refreshing #{type} '#{user}' repositories from GitHub")
81
- client.repositories(user, :type => type).
82
- sort_by { |repo| repo[:name].downcase }
81
+ client
82
+ .repositories(user, type: type)
83
+ .sort_by { |repo| repo[:name].downcase }
83
84
  end
84
85
  }
85
86
 
86
- def user_repositories(user, type = :owner) # all, owner, member
87
+ def user_repositories(user, type = :owner)
88
+ # type can be one of: all, owner, member
87
89
  @user_repositories[[user, type]]
88
90
  end
89
91
 
@@ -94,12 +96,14 @@ module Git
94
96
  @org_repositories = Hash.new { |repos, (org, type)|
95
97
  repos[[org, type]] = begin
96
98
  notify("Refreshing #{type} '#{org}' repositories from GitHub")
97
- client.org_repositories(org, :type => type).
98
- sort_by { |repo| repo[:name].downcase }
99
+ client
100
+ .org_repositories(org, type: type)
101
+ .sort_by { |repo| repo[:name].downcase }
99
102
  end
100
103
  }
101
104
 
102
- def org_repositories(org, type = :owner) # all, public, private, forks, sources, member
105
+ def org_repositories(org, type = :owner)
106
+ # type can be one of: all, public, private, forks, sources, member
103
107
  @org_repositories[[org, type]]
104
108
  end
105
109
 
@@ -28,9 +28,8 @@ module Git
28
28
  end
29
29
 
30
30
  def report
31
- if (missing_repos = Git::Multi::missing_repositories).any?
32
- notify(missing_repos.map(&:full_name), :subtitle => "#{missing_repos.count} missing repos")
33
- end
31
+ (missing_repos = Git::Multi.missing_repositories).any? &&
32
+ notify(missing_repos.map(&:full_name), subtitle: "#{missing_repos.count} missing repos")
34
33
  end
35
34
 
36
35
  def list
@@ -72,12 +71,12 @@ module Git
72
71
  def count
73
72
  # https://developer.github.com/v3/repos/#list-user-repositories
74
73
  user = Git::Multi::USER
75
- %w{ all owner member }.each { |type|
74
+ %w[all owner member].each { |type|
76
75
  puts ["#{user}/#{type}", Git::Hub.user_repositories(user, type).count].join("\t")
77
76
  }
78
77
  # https://developer.github.com/v3/repos/#list-organization-repositories
79
- for org in Git::Multi::ORGANIZATIONS
80
- %w{ all public private forks sources member }.each { |type|
78
+ Git::Multi::ORGANIZATIONS.each do |org|
79
+ %w[all public private forks sources member].each { |type|
81
80
  puts ["#{org}/#{type}", Git::Hub.org_repositories(org, type).count].join("\t")
82
81
  }
83
82
  end
@@ -102,12 +101,12 @@ module Git
102
101
  ->(project) {
103
102
  Kernel.system "git clone -q #{project.rels[:ssh].href.shellescape}"
104
103
  },
105
- :in_dir => :parent_dir
104
+ in: 'parent_dir'
106
105
  )
107
106
  end
108
107
  end
109
108
 
110
- def query args = []
109
+ def query(args = [])
111
110
  Git::Multi.repositories.each do |repo|
112
111
  repo.just_do_it(
113
112
  ->(project) {
@@ -123,58 +122,54 @@ module Git
123
122
  end
124
123
  end
125
124
 
126
- def system args = []
127
- args.map!(&:shellescape)
125
+ def system(args = [])
126
+ cmd = args.map!(&:shellescape).join(' ')
128
127
  Git::Multi.cloned_repositories.each do |repo|
129
128
  repo.just_do_it(
130
- ->(project) {
131
- Kernel.system "#{args.join(' ')}"
129
+ ->(_project) {
130
+ Kernel.system cmd
132
131
  },
133
132
  ->(project) {
134
- Kernel.system "#{args.join(' ')} 2>&1 | sed -e 's#^##{project.full_name.shellescape}: #'"
133
+ Kernel.system "#{cmd} 2>&1 | sed -e 's#^##{project.full_name.shellescape}: #'"
135
134
  },
136
- :in_dir => :local_path
135
+ in: 'local_path'
137
136
  )
138
137
  end
139
138
  end
140
139
 
141
- def raw args
140
+ def raw(args)
142
141
  args.unshift ['sh', '-c']
143
142
  system args.flatten
144
143
  end
145
144
 
146
- def exec command, args = []
145
+ def exec(command, args = [])
147
146
  args.unshift ['git', '--no-pager', command]
148
147
  system args.flatten
149
148
  end
150
149
 
151
- def find commands
150
+ def find(commands)
152
151
  Git::Multi.cloned_repositories.each do |repo|
153
152
  Dir.chdir(repo.local_path) do
154
- begin
155
- if repo.instance_eval(commands.join(' && '))
156
- repo.just_do_it(
157
- ->(project) { nil ; },
158
- ->(project) { puts project.full_name ; },
159
- )
160
- end
161
- rescue Octokit::NotFound
162
- # project no longer exists on github.com
163
- # consider running "git multi --stale"...
153
+ if repo.instance_eval(commands.join(' && '))
154
+ repo.just_do_it(
155
+ ->(_project) { nil },
156
+ ->(project) { puts project.full_name },
157
+ )
164
158
  end
159
+ rescue Octokit::NotFound
160
+ # project no longer exists on github.com
161
+ # consider running "git multi --stale"...
165
162
  end
166
163
  end
167
164
  end
168
165
 
169
- def eval commands
166
+ def eval(commands)
170
167
  Git::Multi.cloned_repositories.each do |repo|
171
168
  Dir.chdir(repo.local_path) do
172
- begin
173
- repo.instance_eval(commands.join(' ; '))
174
- rescue Octokit::NotFound
175
- # project no longer exists on github.com
176
- # consider running "git multi --stale"...
177
- end
169
+ repo.instance_eval(commands.join(' ; '))
170
+ rescue Octokit::NotFound
171
+ # project no longer exists on github.com
172
+ # consider running "git multi --stale"...
178
173
  end
179
174
  end
180
175
  end
@@ -0,0 +1,19 @@
1
+ module Git
2
+ module Multi
3
+ PIM = <<~"PIM".freeze # gem post_install_message, used in git-multi.gemspec
4
+
5
+ The required settings for \033[1mgit multi\33[0m are as follows:
6
+
7
+ \tgit config --global --add \033[1mgithub.user\033[0m <your_github_username>
8
+ \tgit config --global --add \033[1mgithub.organizations\033[0m <your_github_orgs>
9
+ \tgit config --global --add \033[1mgithub.token\033[0m <your_github_oauth_token>
10
+
11
+ Unless your top-level workarea is `${HOME}/Workarea` you should also set:
12
+
13
+ \tgit config --global --add \033[1mgit.multi.workarea\033[0m <your_root_workarea>
14
+
15
+ Thanks for using \033[1mgit multi\033[0m ... the ultimate multi-repo utility for git!
16
+
17
+ PIM
18
+ end
19
+ end
@@ -2,23 +2,25 @@ module Git
2
2
  module Multi
3
3
  module Settings
4
4
 
5
- TICK = ["2714".hex].pack("U*").green.freeze
6
- CROSS = ["2718".hex].pack("U*").red.freeze
7
- ARROW = ["2794".hex].pack("U*").blue.freeze
5
+ TICK = ['2714'.hex].pack('U*').green.freeze
6
+ CROSS = ['2718'.hex].pack('U*').red.freeze
7
+ ARROW = ['2794'.hex].pack('U*').blue.freeze
8
8
 
9
9
  module_function
10
10
 
11
- def setting_status messages, valid, optional = false
11
+ def setting_status(messages, valid, optional = false)
12
12
  fields = messages.compact.join(' - ')
13
13
  icon = valid ? TICK : optional ? ARROW : CROSS
14
- if $INTERACTIVE
15
- print " #{fields}" ; sleep 0.75 ; puts "\x0d#{icon}"
14
+ if interactive?
15
+ print " #{fields}"
16
+ sleep 0.66
17
+ puts "\x0d#{icon}"
16
18
  else
17
19
  puts "#{icon} #{fields}"
18
20
  end
19
21
  end
20
22
 
21
- def file_status file, message = 'File'
23
+ def file_status(file, message = 'File')
22
24
  setting_status(
23
25
  [
24
26
  message,
@@ -30,7 +32,7 @@ module Git
30
32
  )
31
33
  end
32
34
 
33
- def directory_status messages, directory
35
+ def directory_status(messages, directory)
34
36
  setting_status(
35
37
  messages,
36
38
  directory && !directory.empty? && File.directory?(directory),
@@ -38,7 +40,7 @@ module Git
38
40
  )
39
41
  end
40
42
 
41
- def workarea_status message, workarea, owner
43
+ def workarea_status(message, workarea, owner)
42
44
  directory_status(
43
45
  [
44
46
  message,
@@ -49,37 +51,37 @@ module Git
49
51
  )
50
52
  end
51
53
 
52
- def user_status user
53
- setting_status(["User", user], user && !user.empty?)
54
+ def user_status(user)
55
+ setting_status(['User', user], user && !user.empty?)
54
56
  end
55
57
 
56
- def organization_status orgs
57
- for org in orgs
58
- setting_status(["Organization", org], org && !org.empty?, true)
59
- setting_status(["Organization", "member?"], Git::Hub.orgs.include?(org), !Git::Hub.connected?)
58
+ def organization_status(orgs)
59
+ orgs.each do |org|
60
+ setting_status(['Organization', org], org && !org.empty?, true)
61
+ setting_status(['Organization', 'member?'], Git::Hub.orgs.include?(org), !Git::Hub.connected?)
60
62
  end
61
63
  end
62
64
 
63
- def token_status token
64
- setting_status(["Token", symbolize(token), describe(token)], !token.nil? && !token.empty?)
65
- setting_status(["Token", "valid?"], !token.nil? && !token.empty? && Git::Hub.login, !Git::Hub.connected?)
66
- setting_status(["Token", "owned by #{Git::Multi::USER}?"], Git::Hub.login == Git::Multi::USER, !Git::Hub.connected?)
65
+ def token_status(token)
66
+ setting_status(['Token', symbolize(token), describe(token)], !token.nil? && !token.empty?)
67
+ setting_status(['Token', 'valid?'], !token.nil? && !token.empty? && Git::Hub.login, !Git::Hub.connected?)
68
+ setting_status(['Token', "owned by #{Git::Multi::USER}?"], Git::Hub.login == Git::Multi::USER, !Git::Hub.connected?)
67
69
  end
68
70
 
69
- def home_status home
70
- directory_status(["Home", home], home)
71
+ def home_status(home)
72
+ directory_status(['Home', home], home)
71
73
  end
72
74
 
73
- def main_workarea_status workarea
74
- directory_status(["Workarea (main)", abbreviate(workarea, :home)], workarea)
75
+ def main_workarea_status(workarea)
76
+ directory_status(['Workarea (main)', abbreviate(workarea, :home)], workarea)
75
77
  end
76
78
 
77
- def user_workarea_status user
79
+ def user_workarea_status(user)
78
80
  workarea_status("Workarea (user: #{user})", Git::Multi::WORKAREA, user)
79
81
  end
80
82
 
81
- def organization_workarea_status orgs
82
- for org in orgs
83
+ def organization_workarea_status(orgs)
84
+ orgs.each do |org|
83
85
  workarea_status("Workarea (org: #{org})", Git::Multi::WORKAREA, org)
84
86
  end
85
87
  end
@@ -0,0 +1,53 @@
1
+ module Git
2
+ module Multi
3
+
4
+ module Settings
5
+
6
+ module_function
7
+
8
+ def describe(token)
9
+ if token.nil?
10
+ '(nil)'
11
+ elsif token.empty?
12
+ '(empty)'
13
+ else
14
+ "#{'*' * 36}#{token[36..-1]}"
15
+ end
16
+ end
17
+
18
+ def symbolize(token)
19
+ case token
20
+ when Git::Multi.env_var('OCTOKIT_ACCESS_TOKEN')
21
+ then '${OCTOKIT_ACCESS_TOKEN}'
22
+ when Git::Multi.git_option('github.token')
23
+ then 'github.token'
24
+ else '(unset)'
25
+ end
26
+ end
27
+
28
+ def abbreviate(directory, root_dir = nil)
29
+ case root_dir
30
+ when :home
31
+ then directory.gsub(Git::Multi::HOME, '${HOME}')
32
+ when :workarea
33
+ then directory.gsub(Git::Multi::WORKAREA, '${WORKAREA}')
34
+ else abbreviate(abbreviate(directory, :workarea), :home)
35
+ end
36
+ end
37
+
38
+ end
39
+
40
+ module_function
41
+
42
+ def git_option(name, default = nil)
43
+ value = `git config #{name}`.chomp.freeze
44
+ value.empty? && default ? default : value
45
+ end
46
+
47
+ def env_var(name, default = nil)
48
+ value = ENV[name].freeze
49
+ (value.nil? || value.empty?) && default ? default : value
50
+ end
51
+
52
+ end
53
+ end
@@ -1,37 +1,20 @@
1
1
  require 'octokit'
2
2
  require 'sawyer'
3
- require 'psych'
3
+ require 'faraday'
4
+ require 'addressable'
4
5
 
5
6
  module Git
6
7
  module Multi
7
- NAME = 'git-multi'
8
- VERSION = '1.0.5'
8
+ NAME = 'git-multi'.freeze
9
+ VERSION = '1.0.6'.freeze
9
10
 
10
- LONG_VERSION = "%s v%s (%s v%s, %s v%s, %s v%s)" % [
11
- NAME,
12
- VERSION,
13
- 'octokit.rb',
14
- Octokit::VERSION,
15
- 'sawyer',
16
- Sawyer::VERSION,
17
- 'psych',
18
- Psych::VERSION,
19
- ]
11
+ DEPENDENCY_VERSIONS = [
12
+ "octokit.rb v#{Octokit::VERSION}",
13
+ "sawyer v#{Sawyer::VERSION}",
14
+ "faraday v#{Faraday::VERSION}",
15
+ "addressable v#{Addressable::VERSION::STRING}",
16
+ ].join(', ').freeze
20
17
 
21
- PIM = <<~"EOPIM" # gem post_install_message
22
-
23
- The required settings for \033[1mgit multi\33[0m are as follows:
24
-
25
- \tgit config --global --add \033[1mgithub.user\033[0m <your_github_username>
26
- \tgit config --global --add \033[1mgithub.organizations\033[0m <your_github_orgs>
27
- \tgit config --global --add \033[1mgithub.token\033[0m <your_github_oauth_token>
28
-
29
- Unless your top-level workarea is `${HOME}/Workarea` you should also set:
30
-
31
- \tgit config --global --add \033[1mgit.multi.workarea\033[0m <your_root_workarea>
32
-
33
- Thanks for using \033[1mgit multi\033[0m ... the ultimate multi-repo utility for git!
34
-
35
- EOPIM
18
+ LONG_VERSION = "#{NAME} v#{VERSION} (#{DEPENDENCY_VERSIONS})".freeze
36
19
  end
37
20
  end
data/lib/git/multi.rb CHANGED
@@ -8,14 +8,15 @@ require 'octokit'
8
8
  require 'sawyer'
9
9
 
10
10
  require 'ext/dir'
11
- require 'ext/utils'
12
11
  require 'ext/string'
13
12
  require 'ext/notify'
13
+ require 'ext/kernel'
14
14
  require 'ext/commify'
15
15
  require 'ext/sawyer/resource'
16
16
 
17
17
  require 'git/hub'
18
18
 
19
+ require 'git/multi/utils'
19
20
  require 'git/multi/version'
20
21
  require 'git/multi/settings'
21
22
  require 'git/multi/commands'
@@ -86,18 +87,15 @@ module Git
86
87
 
87
88
  module Nike
88
89
 
89
- def just_do_it interactive, pipeline, options = {}
90
- working_dir = case options[:in_dir]
91
- when :parent_dir then self.parent_dir
92
- when :local_path then self.local_path
93
- else Dir.pwd
94
- end
90
+ def just_do_it(interactive, pipeline, options = {})
91
+ working_dir = case (options[:in] || '').to_sym
92
+ when :parent_dir then parent_dir
93
+ when :local_path then local_path
94
+ else Dir.pwd
95
+ end
95
96
  Dir.chdir(working_dir) do
96
- if $INTERACTIVE
97
- puts "%s (%s)" % [
98
- self.full_name.invert,
99
- self.fractional_index
100
- ]
97
+ if interactive?
98
+ puts "#{full_name.invert} (#{fractional_index})"
101
99
  interactive.call(self)
102
100
  else
103
101
  pipeline.call(self)
@@ -109,6 +107,7 @@ module Git
109
107
 
110
108
  def repositories
111
109
  if File.size?(REPOSITORIES)
110
+ # rubocop:disable Security/MarshalLoad
112
111
  @repositories ||= Marshal.load(File.read(REPOSITORIES)).tap do |projects|
113
112
  notify "Finished loading #{REPOSITORIES}"
114
113
  projects.each_with_index do |project, index|
@@ -119,15 +118,17 @@ module Git
119
118
  project.local_path = Pathname.new(File.join(WORKAREA, project.full_name))
120
119
  project.fractional_index = "#{index + 1}/#{projects.count}"
121
120
  # fix 'project' => https://github.com/octokit/octokit.rb/issues/727
122
- project.compliant_ssh_url = 'ssh://%s/%s' % project.ssh_url.split(':', 2)
121
+ project.compliant_ssh_url = 'ssh://' + project.ssh_url.split(':', 2).join('/')
123
122
  # remove optional '.git' suffix from 'git@github.com:pvdb/git-multi.git'
124
123
  project.abbreviated_ssh_url = project.ssh_url.chomp('.git')
125
124
  # extend 'project' with 'just do it' capabilities
126
125
  project.extend Nike
127
126
  end
128
127
  end
128
+ # rubocop:enable Security/MarshalLoad
129
129
  else
130
- refresh_repositories and repositories
130
+ refresh_repositories
131
+ repositories # retry
131
132
  end
132
133
  end
133
134
 
data/man/git-multi.1 CHANGED
@@ -2,12 +2,12 @@
2
2
  .\" Title: git-multi
3
3
  .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
4
4
  .\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
5
- .\" Date: 09/22/2018
5
+ .\" Date: 09/23/2018
6
6
  .\" Manual: Git Manual
7
7
  .\" Source: Git 2.19.0.216.g2d3b1c576.dirty
8
8
  .\" Language: English
9
9
  .\"
10
- .TH "GIT\-MULTI" "1" "09/22/2018" "Git 2\&.19\&.0\&.216\&.g2d3b1c" "Git Manual"
10
+ .TH "GIT\-MULTI" "1" "09/23/2018" "Git 2\&.19\&.0\&.216\&.g2d3b1c" "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 \fBv1\&.0\&.5\fR of \fIgit multi\fR \&... hooray!
34
+ This is \fBv1\&.0\&.6\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:
data/man/git-multi.html CHANGED
@@ -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>v1.0.5</code> of <em>git multi</em> &#8230; hooray!</p></div>
751
+ <div class="paragraph"><p>This is <code>v1.0.6</code> of <em>git multi</em> &#8230; hooray!</p></div>
752
752
  </div>
753
753
  </div>
754
754
  <div class="sect1">
@@ -1179,7 +1179,7 @@ the <code>jq</code> command-line utility:
1179
1179
  <div id="footer">
1180
1180
  <div id="footer-text">
1181
1181
  Last updated
1182
- 2018-09-22 08:14:58 BST
1182
+ 2018-09-23 14:13:02 BST
1183
1183
  </div>
1184
1184
  </div>
1185
1185
  </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: 1.0.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Vandenberk
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-22 00:00:00.000000000 Z
11
+ date: 2018-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: octokit
@@ -91,14 +91,16 @@ files:
91
91
  - git-multi.gemspec
92
92
  - lib/ext/commify.rb
93
93
  - lib/ext/dir.rb
94
+ - lib/ext/kernel.rb
94
95
  - lib/ext/notify.rb
95
96
  - lib/ext/sawyer/resource.rb
96
97
  - lib/ext/string.rb
97
- - lib/ext/utils.rb
98
98
  - lib/git/hub.rb
99
99
  - lib/git/multi.rb
100
100
  - lib/git/multi/commands.rb
101
+ - lib/git/multi/gemspec.rb
101
102
  - lib/git/multi/settings.rb
103
+ - lib/git/multi/utils.rb
102
104
  - lib/git/multi/version.rb
103
105
  - man/git-multi.1
104
106
  - man/git-multi.erb
data/lib/ext/utils.rb DELETED
@@ -1,31 +0,0 @@
1
- $INTERACTIVE = (STDOUT.tty? && STDERR.tty?)
2
-
3
- def git_option name, default = nil
4
- value = `git config #{name}`.chomp.freeze
5
- value.empty? && default ? default : value
6
- end
7
-
8
- def env_var name, default = nil
9
- value = ENV[name].freeze
10
- (value.nil? || value.empty?) && default ? default : value
11
- end
12
-
13
- def describe token
14
- token.nil? ? '(nil)' : token.empty? ? '(empty)' : "#{'*'*36}#{token[36..-1]}"
15
- end
16
-
17
- def symbolize token
18
- case token
19
- when env_var('OCTOKIT_ACCESS_TOKEN') then '${OCTOKIT_ACCESS_TOKEN}'
20
- when git_option('github.token') then 'github.token'
21
- else '(unset)'
22
- end
23
- end
24
-
25
- def abbreviate directory, root_dir = nil
26
- case root_dir
27
- when :home then directory.gsub(Git::Multi::HOME, '${HOME}')
28
- when :workarea then directory.gsub(Git::Multi::WORKAREA, '${WORKAREA}')
29
- else abbreviate(abbreviate(directory, :workarea), :home)
30
- end
31
- end