gem-src 0.6.1 → 0.10.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: 49616d662bfc4d63838e221b220a0159b0d28c59
4
- data.tar.gz: 39f4410194d7b0bc0e3e42e6ae41351a63afc6a8
2
+ SHA256:
3
+ metadata.gz: 70651b92bbaa9d17a2f084c7e2ff97adf2b40a2ebe4ec00deae616afec1fe995
4
+ data.tar.gz: 5ac36fd408e1b1f96945986c6f4bef28d737b2ef8e0d8b9e66a913c16a76dede
5
5
  SHA512:
6
- metadata.gz: a0a8e311d525ebf2ef63b19595f05a03b5f668a2ea5734b870c509aaf83f7f57b691582139445ee5fbc4ce15fcf521e6ab1a36d043c3d267410307dfe0469c50
7
- data.tar.gz: 6866e89026ee3890f115d2b6e9831aba2fc306051e32c2b49dd034ad9a3dbd93a690a17d6658142fec4ac565d9aca2c646257361ea3faf9615fc86cdefce0eab
6
+ metadata.gz: 1ac67aa2d4b6f7ac57ffebb80e1ebed510477117dc9e3ce3573d51d9b9b146ab2152dbdf6ad3928220e7ac6d6353808687d1548f6e310a0730def45826ba24e1
7
+ data.tar.gz: 9e2818b0389ab44f3cf537ecfcf85c00adb77d9d59edad7010ca7471aabf411403aeedb97fc4426651e372bcb788b741239f7fb9122603953544397c500ee531
data/README.md CHANGED
@@ -1,24 +1,39 @@
1
1
  # gem-src
2
2
 
3
3
  gem-src is a gem plugin && rbenv plugin that automatically `git clone`s the gem's source right after every `gem install` so you can `git log`, `git grep` and of course write your patch there!
4
+ Plus, gem-src runs `git init` on each installed gem, and links it to the cloned source repository and the origin repository so that you can easily transfer commits to and from the gem and the repositories.
4
5
 
6
+ ***TL;DR***
5
7
 
6
- ## Installation
8
+ % git clone https://github.com/amatsuda/gem-src.git "$(rbenv root)/plugins/gem-src"
9
+ % mkdir ~/src
10
+ % echo "gemsrc_clone_root: ~/src" >> ~/.gemrc
7
11
 
8
- ### As a Rubygem
12
+ Then you're all set!
9
13
 
10
- gem-src is a gem plugin that can be installed via gem install command:
11
14
 
12
- % gem install gem-src
15
+ ## Installation
13
16
 
14
- ### As an rbenv plugin (recommended)
17
+ ### :star2: As an rbenv plugin (recommended)
15
18
 
16
19
  Alternatively, if you're using rbenv, you can install gem-src as an rbenv plugin:
17
20
 
18
- % git clone https://github.com/amatsuda/gem-src.git ~/.rbenv/plugins/gem-src
21
+ % git clone https://github.com/amatsuda/gem-src.git "$(rbenv root)/plugins/gem-src"
19
22
 
20
23
  then you get gem-src enabled for all `gem` and `bundle` commands invoked through rbenv.
21
24
 
25
+ ### :star2: As a Bundler plugin (experimental, but also recommended)
26
+
27
+ gem-src is a bundler plugin that can be installed via bundler plugin install command:
28
+
29
+ % bundler plugin install gem-src
30
+
31
+ ### As a Rubygem
32
+
33
+ gem-src is a gem plugin that can be installed via gem install command:
34
+
35
+ % gem install gem-src
36
+
22
37
  ## Configuration
23
38
 
24
39
  ### By default
@@ -46,7 +61,7 @@ So, the whole directory structure will be like this.
46
61
  Note that you might be cloning the same repository again and again as the gem is updated, or the gem install directory changes.
47
62
  For example, if you're using RVM, each of `~/.rvm/gems/*/gems/*` will have it's Git repo inside "src" directory.
48
63
 
49
- ### Specifying gemsrc_clone_root (strongly recommended)
64
+ ### :star2: Specifying gemsrc_clone_root (strongly recommended)
50
65
 
51
66
  Instead of cloning the repo under installed gem directory for each `gem install`, you can specify one single directory to keep all the cloned source repositories.
52
67
 
@@ -98,6 +113,12 @@ When you firstly installed this gem, you might want to type in this command righ
98
113
  % gem pristine --all
99
114
  This will reinstall all the already installed gems, and so will `git clone` all the repos.
100
115
 
116
+ ## Skip cloning
117
+
118
+ If you want to skip cloning repositories, you can skip cloning by providing an environment variable `GEMSRC_SKIP`:
119
+
120
+ % GEMSRC_SKIP=true bundle install
121
+
101
122
 
102
123
  ## Contributing
103
124
 
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = "gem-src"
7
- gem.version = '0.6.1'
7
+ gem.version = '0.10.0'
8
8
  gem.authors = ["Akira Matsuda"]
9
9
  gem.email = ["ronnie@dio.jp"]
10
10
  gem.description = 'Gem.post_install { `git clone gem_source src` }'
@@ -19,8 +19,9 @@ Gem::Specification.new do |gem|
19
19
  gem.add_development_dependency 'rspec', ['>= 0']
20
20
 
21
21
  gem.post_install_message = <<-END
22
- [gem-src] If you have not yet configured "gemsrc_clone_root", we strongly recommend you to add the configuration to your .gemrc.
22
+ [gem-src] Installing gem-src as a gem is not recommended. Please consider installing as an rbenv plugin instead.
23
23
 
24
+ If you have not yet configured "gemsrc_clone_root", we strongly recommend you to add the configuration to your .gemrc.
24
25
  e.g.)
25
26
  % echo "gemsrc_clone_root: ~/src" >> ~/.gemrc
26
27
 
@@ -0,0 +1,81 @@
1
+ module Gem
2
+ class Src
3
+ IRREGULAR_REPOSITORIES = {
4
+ 'activesupport' => nil,
5
+ 'actionview' => nil,
6
+ 'actionpack' => nil,
7
+ 'activemodel' => nil,
8
+ 'activerecord' => nil,
9
+ 'activerecord-jdbcmysql-adapter' => 'https://github.com/jruby/activerecord-jdbc-adapter',
10
+ 'activerecord-jdbcpostgresql-adapter' => 'https://github.com/jruby/activerecord-jdbc-adapter',
11
+ 'activerecord-jdbcsqlite3-adapter' => 'https://github.com/jruby/activerecord-jdbc-adapter',
12
+ 'activejob' => nil,
13
+ 'actionmailbox' => nil,
14
+ 'actionmailer' => nil,
15
+ 'actioncable' => nil,
16
+ 'actiontext' => nil,
17
+ 'activestorage' => nil,
18
+ 'railties' => nil,
19
+ 'activeresource' => 'https://github.com/rails/activeresource.git',
20
+ 'autoparse' => 'https://github.com/google/autoparse.git',
21
+ 'aws-sdk-rails' => 'https://github.com/aws/aws-sdk-rails.git',
22
+ 'breadcrumbs_on_rails' => 'https://github.com/weppos/breadcrumbs_on_rails',
23
+ 'bson' => 'https://github.com/mongodb/bson-ruby.git',
24
+ 'coffee-script-source' => 'https://github.com/rails/ruby-coffee-script',
25
+ 'compass-core' => 'https://github.com/Compass/compass.git',
26
+ 'compass-import-once' => 'https://github.com/Compass/compass.git',
27
+ 'concurrent-ruby' => 'https://github.com/ruby-concurrency/concurrent-ruby/',
28
+ 'concurrent-ruby-edge' => 'https://github.com/ruby-concurrency/concurrent-ruby/',
29
+ 'concurrent-ruby-ext' => 'https://github.com/ruby-concurrency/concurrent-ruby/',
30
+ 'cool.io' => 'https://github.com/tarcieri/cool.io.git',
31
+ 'cucumber-core' => 'https://github.com/cucumber/cucumber-ruby-core.git',
32
+ 'cucumber-wire' => 'https://github.com/cucumber/cucumber-ruby-wire.git',
33
+ 'diff-lcs' => 'https://github.com/halostatue/diff-lcs.git',
34
+ 'elasticsearch' => 'https://github.com/elastic/elasticsearch-ruby.git',
35
+ 'elasticsearch-api' => 'https://github.com/elastic/elasticsearch-ruby.git',
36
+ 'elasticsearch-extensions' => 'https://github.com/elastic/elasticsearch-ruby.git',
37
+ 'elasticsearch-transport' => 'https://github.com/elastic/elasticsearch-ruby.git',
38
+ 'erubis' => 'https://github.com/kwatch/erubis.git',
39
+ 'flay' => 'https://github.com/seattlerb/flay',
40
+ 'geocoder' => 'https://github.com/alexreisner/geocoder',
41
+ 'hirb' => 'https://github.com/cldwalker/hirb',
42
+ 'houston' => 'https://github.com/nomad/houston',
43
+ 'html2haml' => 'https://github.com/haml/html2haml',
44
+ 'io-console' => 'https://github.com/ruby/io-console',
45
+ 'kaminari-actionview' => nil,
46
+ 'kaminari-activerecord' => nil,
47
+ 'kaminari-core' => nil,
48
+ 'kwalify' => nil,
49
+ 'log4r' => 'https://github.com/colbygk/log4r',
50
+ 'meta_request' => 'https://github.com/dejan/rails_panel',
51
+ 'method_source' => 'https://github.com/banister/method_source',
52
+ 'origin' => 'https://github.com/mongoid/origin',
53
+ 'padrino' => 'https://github.com/padrino/padrino-framework',
54
+ 'padrino-admin' => nil,
55
+ 'padrino-cache' => nil,
56
+ 'padrino-core' => nil,
57
+ 'padrino-gen' => nil,
58
+ 'padrino-helpers' => nil,
59
+ 'padrino-mailer' => nil,
60
+ 'padrino-performance' => nil,
61
+ 'padrino-support' => nil,
62
+ 'paranoia' => 'https://github.com/rubysherpas/paranoia',
63
+ 'pdf-core' => 'https://github.com/prawnpdf/pdf-core',
64
+ 'pg' => nil,
65
+ 'rack-mini-profiler' => 'https://github.com/MiniProfiler/rack-mini-profiler',
66
+ 'raindrops' => 'https://github.com/tmm1/raindrops',
67
+ 'redis-actionpack' => 'https://github.com/redis-store/redis-actionpack',
68
+ 'redis-activesupport' => 'https://github.com/redis-store/redis-activesupport',
69
+ 'redis-rack' => 'https://github.com/redis-store/redis-rack',
70
+ 'redis-rails' => 'https://github.com/redis-store/redis-rails',
71
+ 'rom-mapper' => 'https://github.com/rom-rb/rom-mapper',
72
+ 'rom-repository' => 'https://github.com/rom-rb/rom-repository',
73
+ 'rom-sql' => 'https://github.com/rom-rb/rom-sql',
74
+ 'rouge' => 'https://github.com/jneen/rouge',
75
+ 'rubygems-update' => nil,
76
+ 'spreadsheet' => 'https://github.com/zdavatz/spreadsheet',
77
+ 'thin' => 'https://github.com/macournoyer/thin',
78
+ 'uniform_notifier' => 'https://github.com/flyerhzm/uniform_notifier'
79
+ }.freeze unless defined? IRREGULAR_REPOSITORIES
80
+ end
81
+ end
@@ -1,27 +1,96 @@
1
+ # frozen-string-literal: true
2
+
1
3
  require 'rubygems'
2
4
  require 'net/https'
3
5
 
4
6
  module Gem
5
7
  class Src
6
- attr_reader :installer
8
+ class << self
9
+ def post_install_hook(installer)
10
+ return true if installer.class.name == 'Bundler::Source::Path::Installer'
11
+ return true if !!ENV['GEMSRC_SKIP']
12
+
13
+ gem_src = Gem::Src.new installer
14
+ gem_src.git_clone_homepage_or_source_code_uri_or_homepage_uri_or_github_organization_uri
15
+
16
+ gem_src.repositorize_installed_gem
17
+
18
+ gem_src.remote_add_src_and_origin
19
+ true
20
+ end
21
+ end
7
22
 
8
23
  def initialize(installer)
9
- @installer, @tested_repositories = installer, []
24
+ @installer, @spec, @tested_repositories = installer, installer.spec, []
25
+ end
26
+
27
+ # Guess the git repo from the gemspec and perform git clone
28
+ def git_clone_homepage_or_source_code_uri_or_homepage_uri_or_github_organization_uri
29
+ return false if File.exist? clone_dir
30
+
31
+ now = Time.now
32
+
33
+ if IRREGULAR_REPOSITORIES.key? @spec.name
34
+ return git_clone IRREGULAR_REPOSITORIES[@spec.name]
35
+ end
36
+
37
+ result = git_clone(source_code_uri_from_metadata) ||
38
+ git_clone(@spec.homepage) ||
39
+ git_clone(github_url(@spec.homepage)) ||
40
+ git_clone(source_code_uri) ||
41
+ git_clone(homepage_uri) ||
42
+ git_clone(github_url(homepage_uri)) ||
43
+ git_clone(github_organization_uri(@spec.name))
44
+
45
+ if verbose?
46
+ puts "gem-src: #{@spec.name} - !!! Failed to find a repo." if result.nil?
47
+ puts "gem-src: #{@spec.name} - #{Time.now - now}s"
48
+ end
49
+ result
50
+ end
51
+
52
+ # git init the installed gem so that we can directly edit the files there
53
+ def repositorize_installed_gem
54
+ if File.directory? gem_dir
55
+ puts "gem-src: #{@spec.name} - repositorizing..." if verbose?
56
+ `cd #{gem_dir} && ! git rev-parse --is-inside-work-tree 2> /dev/null && git init && git checkout -qb gem-src_init && git add -A && git commit -m 'Initial commit by gem-src'`
57
+ end
58
+ end
59
+
60
+ # git remote add from the installed gem to the cloned repo so that we can easily transfer patches
61
+ def remote_add_src_and_origin
62
+ if File.directory?(clone_dir) && File.directory?(gem_dir)
63
+ puts "gem-src: #{@spec.name} - adding remotes..." if verbose?
64
+ `cd #{gem_dir} && git remote add src #{clone_dir}`
65
+ origin = `cd #{clone_dir} && git remote get-url origin`.chomp
66
+ `cd #{gem_dir} && git config remote.origin.url #{origin}` if origin
67
+ end
10
68
  end
11
69
 
70
+ private
71
+
12
72
  def clone_dir
13
73
  @clone_dir ||= if ENV['GEMSRC_CLONE_ROOT']
14
- File.expand_path installer.spec.name, ENV['GEMSRC_CLONE_ROOT']
74
+ File.expand_path @spec.name, ENV['GEMSRC_CLONE_ROOT']
15
75
  elsif Gem.configuration[:gemsrc_clone_root]
16
- File.expand_path installer.spec.name, Gem.configuration[:gemsrc_clone_root]
76
+ File.expand_path @spec.name, Gem.configuration[:gemsrc_clone_root]
17
77
  else
18
- gem_dir = installer.respond_to?(:gem_dir) ? installer.gem_dir : File.expand_path(File.join(installer.gem_home, 'gems', installer.spec.full_name))
19
78
  File.join gem_dir, 'src'
20
79
  end
21
80
  end
22
81
 
82
+ def gem_dir
83
+ if @installer.respond_to?(:gem_dir)
84
+ @installer.gem_dir
85
+ elsif @installer.respond_to?(:gem_home) # old rubygems
86
+ File.expand_path(File.join(@installer.gem_home, 'gems', @spec.full_name))
87
+ else # bundler
88
+ File.expand_path(File.join(Gem.dir, 'gems', @spec.full_name))
89
+ end
90
+ end
91
+
23
92
  def github_url(url)
24
- if url =~ /\Ahttps?:\/\/([^.]+)\.github.com\/(.+)/
93
+ if url =~ /\Ahttps?:\/\/([^.]+)\.github\.(?:com|io)\/(.+)/
25
94
  if $1 == 'www'
26
95
  "https://github.com/#{$2}"
27
96
  elsif $1 == 'wiki'
@@ -46,19 +115,23 @@ module Gem
46
115
  Net::HTTP.new('github.com', 443).tap {|h| h.use_ssl = true }.request_head(url).code != '404'
47
116
  end
48
117
 
118
+ def source_code_uri_from_metadata
119
+ @spec.metadata['source_code_uri']
120
+ end
121
+
49
122
  def api
50
123
  require 'open-uri'
51
- @api ||= open("http://rubygems.org/api/v1/gems/#{installer.spec.name}.yaml", &:read)
124
+ @api ||= OpenURI.open_uri("https://rubygems.org/api/v1/gems/#{@spec.name}.yaml", &:read)
52
125
  rescue OpenURI::HTTPError
53
126
  ""
54
127
  end
55
128
 
56
129
  def source_code_uri
57
- api[/^source_code_uri: (.*)$/, 1]
130
+ api_uri_for('source_code')
58
131
  end
59
132
 
60
133
  def homepage_uri
61
- api[/^homepage_uri: (.*)$/, 1]
134
+ api_uri_for('homepage')
62
135
  end
63
136
 
64
137
  def github_organization_uri(name)
@@ -67,10 +140,13 @@ module Gem
67
140
 
68
141
  def git_clone(repository)
69
142
  return if repository.nil? || repository.empty?
143
+ return if repository.include? 'rubyforge.org'
70
144
  return if @tested_repositories.include? repository
71
145
  @tested_repositories << repository
72
146
  return if github?(repository) && !github_page_exists?(repository)
73
147
 
148
+ puts "gem-src: #{@spec.name} - Cloning from #{repository}..." if verbose?
149
+
74
150
  if use_ghq?
75
151
  system 'ghq', 'get', repository
76
152
  else
@@ -82,21 +158,20 @@ module Gem
82
158
  ENV['GEMSRC_USE_GHQ'] || Gem.configuration[:gemsrc_use_ghq]
83
159
  end
84
160
 
85
- def git_clone_homepage_or_source_code_uri_or_homepage_uri_or_github_organization_uri
86
- return false if File.exist? clone_dir
87
- git_clone(installer.spec.homepage) ||
88
- git_clone(github_url(installer.spec.homepage)) ||
89
- git_clone(source_code_uri) ||
90
- git_clone(homepage_uri) ||
91
- git_clone(github_url(homepage_uri)) ||
92
- git_clone(github_organization_uri(installer.spec.name))
161
+ def api_uri_for(key)
162
+ uri = api[Regexp.new("^#{key}_uri: (.*)$"), 1]
163
+ uri =~ /\A(?:https?|git):\/\// ? uri : nil
93
164
  end
94
- end
165
+
166
+ def verbose?
167
+ !!ENV['GEMSRC_VERBOSE'] || Gem.configuration[:gemsrc_verbose]
168
+ end
169
+ end unless defined?(Src) # for rubygems test suite.
95
170
  end
96
171
 
172
+ require 'gem/src/irregular_repositories'
173
+
97
174
 
98
175
  Gem.post_install do |installer|
99
- next true if installer.class.name == 'Bundler::Source::Path::Installer'
100
- Gem::Src.new(installer).git_clone_homepage_or_source_code_uri_or_homepage_uri_or_github_organization_uri
101
- true
176
+ Gem::Src.post_install_hook installer
102
177
  end
@@ -0,0 +1,7 @@
1
+ # frozen-string-literal: true
2
+
3
+ Bundler::Plugin::API.hook Bundler::Plugin::Events::GEM_AFTER_INSTALL do |spec_install|
4
+ require_relative 'lib/rubygems_plugin'
5
+
6
+ Gem::Src.post_install_hook spec_install
7
+ end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+
3
+ describe Gem::Src do
4
+ def quick_gem(name, version='2')
5
+ require 'rubygems/specification'
6
+
7
+ spec = Gem::Specification.new do |s|
8
+ s.platform = Gem::Platform::RUBY
9
+ s.name = name
10
+ s.version = version
11
+ s.author = 'A User'
12
+ s.email = 'example@example.com'
13
+ s.homepage = 'http://example.com'
14
+ s.summary = "this is a summary"
15
+ s.description = "This is a test description"
16
+
17
+ yield(s) if block_given?
18
+ end
19
+
20
+ Gem::Specification.map # HACK: force specs to (re-)load before we write
21
+
22
+ written_path = write_file spec.spec_file do |io|
23
+ io.write spec.to_ruby_for_cache
24
+ end
25
+
26
+ spec.loaded_from = spec.loaded_from = written_path
27
+
28
+ Gem::Specification.add_spec spec.for_cache
29
+
30
+ spec
31
+ end
32
+
33
+ describe '#clone_dir' do
34
+ subject do
35
+ gem = quick_gem 'my_awesome_gem'
36
+ installer = Gem::Installer.new gem
37
+ installer.stub(:gem_dir, '~/g/my_awesome_gem')
38
+ Gem::Src.new installer
39
+ end
40
+ context "with ENV['GEMSRC_CLONE_ROOT']" do
41
+ around do |example|
42
+ e, g = ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root]
43
+ ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root] = '~/foo', nil
44
+ example.run
45
+ ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root] = e, g
46
+ end
47
+ its(:clone_dir) { should == '~/foo/my_awesome_gem' }
48
+ end
49
+
50
+ context "with Gem.configuration[:gemsrc_clone_root]" do
51
+ around do |example|
52
+ e, g = ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root]
53
+ ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root] = nil, '~/bar'
54
+ example.run
55
+ ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root] = e, g
56
+ end
57
+ its(:clone_dir) { should == '~/bar/my_awesome_gem' }
58
+ end
59
+
60
+ context "without clone_root configuration" do
61
+ around do |example|
62
+ e, g = ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root]
63
+ ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root] = nil, nil
64
+ example.run
65
+ ENV['GEMSRC_CLONE_ROOT'], Gem.configuration[:gemsrc_clone_root] = e, g
66
+ end
67
+ its(:clone_dir) { should == '~/aho/my_awesome_gem/src' }
68
+ end
69
+
70
+ end
71
+ end
@@ -0,0 +1,6 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+
4
+ require 'bundler/setup'
5
+ Bundler.require
6
+ require File.join(File.dirname(__FILE__), '../lib/rubygems_plugin')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gem-src
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Akira Matsuda
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-03 00:00:00.000000000 Z
11
+ date: 2020-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -38,13 +38,18 @@ files:
38
38
  - Rakefile
39
39
  - etc/rbenv.d/exec/~gem-src.bash
40
40
  - gem-src.gemspec
41
+ - lib/gem/src/irregular_repositories.rb
41
42
  - lib/rubygems_plugin.rb
43
+ - plugins.rb
44
+ - spec/gem-src_spec.rb
45
+ - spec/spec_helper.rb
42
46
  homepage: https://github.com/amatsuda/gem-src
43
47
  licenses: []
44
48
  metadata: {}
45
49
  post_install_message: |
46
- [gem-src] If you have not yet configured "gemsrc_clone_root", we strongly recommend you to add the configuration to your .gemrc.
50
+ [gem-src] Installing gem-src as a gem is not recommended. Please consider installing as an rbenv plugin instead.
47
51
 
52
+ If you have not yet configured "gemsrc_clone_root", we strongly recommend you to add the configuration to your .gemrc.
48
53
  e.g.)
49
54
  % echo "gemsrc_clone_root: ~/src" >> ~/.gemrc
50
55
 
@@ -63,9 +68,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
68
  - !ruby/object:Gem::Version
64
69
  version: '0'
65
70
  requirements: []
66
- rubyforge_project:
67
- rubygems_version: 2.2.2
68
- signing_key:
71
+ rubygems_version: 3.2.0.rc.1
72
+ signing_key:
69
73
  specification_version: 4
70
74
  summary: Gem.post_install { `git clone gem_source src` }
71
- test_files: []
75
+ test_files:
76
+ - spec/gem-src_spec.rb
77
+ - spec/spec_helper.rb