rubygems-mirror 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 461dc98f6c8403d54cbeb5a111627cafd5cdb594
4
+ data.tar.gz: 06dc9f69498a7a36f1eba4ac2c30c24bbcb5bd16
5
+ SHA512:
6
+ metadata.gz: 2b14b48eb67fc2ae987987db40b6b70a9c708fe301d7be10563445fa6dfca7c176c43424d0e54f0145cbf4ea532145321b9479aed1189ae75ac582aa49f7fb52
7
+ data.tar.gz: ecee0c9751f96129eeded015b43d9d548b98f1034ef6d7530173318963c8939db66e3395ff0175218ad7817a3a68ba35b97bf4b6b27463cbc5bd77ad49ab923e
@@ -1,3 +1,12 @@
1
+ === 1.1.0 / 2015-07-28
2
+
3
+ * Documentation corrections and updates
4
+ * Fix no longer implicit dependencies with modern rubygems and ruby versions
5
+ * Concurrency can be specified in configuration file
6
+ * Support permanent redirects
7
+ * Fixed support for system gems
8
+ * Mirroring now includes all specs files and .rz's, and /quick
9
+
1
10
  === 1.0.0 / 2011-10-01
2
11
 
3
12
  * 1 major enhancement
@@ -1,6 +1,8 @@
1
1
  = rubygems-mirror
2
2
 
3
- http://github.com/rubygems/rubygems-mirror
3
+ https://github.com/rubygems/rubygems-mirror
4
+
5
+ {<img src="https://badge.fury.io/rb/rubygems-mirror.svg" alt="Gem Version" />}[http://badge.fury.io/rb/rubygems-mirror]
4
6
 
5
7
  == DESCRIPTION:
6
8
 
@@ -24,9 +26,13 @@ will maintain stability in master.
24
26
 
25
27
  * In a file at ~/.gem/.mirrorrc add a config that looks like the following:
26
28
 
27
- ---
28
- - from: http://rubygems.org
29
- to: /data/rubygems
29
+ ---
30
+ - from: http://rubygems.org
31
+ to: /data/rubygems
32
+ parallelism: 10
33
+ retries: 3
34
+ delete: false
35
+ skiperror: true
30
36
 
31
37
  * Either install the gem, then run `gem mirror`, or
32
38
  * Clone then run `rake mirror:update`
@@ -37,12 +43,12 @@ will maintain stability in master.
37
43
 
38
44
  == RESOURCES
39
45
 
40
- * {Website}[http://rubygems.org/]
41
- * {Documentation}[http://rubygems.rubyforge.org/rubygems-mirror/README_rdoc.html]
42
- * {Wiki}[http://wiki.github.com/rubygems/rubygems-mirror/]
43
- * {Source Code}[http://github.com/rubygems/rubygems-mirror/]
44
- * {Issues}[http://github.com/rubygems/rubygems-mirror/issues]
45
- * {Rubyforge}[http://rubyforge.org/projects/rubygems]
46
+ * {Website}[https://rubygems.org/]
47
+ * {Documentation}[https://github.com/rubygems/rubygems-mirror/blob/master/README.rdoc]
48
+ * {Wiki}[https://wiki.github.com/rubygems/rubygems-mirror/]
49
+ * {Source Code}[https://github.com/rubygems/rubygems-mirror/]
50
+ * {Issues}[https://github.com/rubygems/rubygems-mirror/issues]
51
+ * {Rubyforge}[https://rubyforge.org/projects/rubygems]
46
52
 
47
53
  == LICENSE:
48
54
 
data/Rakefile CHANGED
@@ -1,21 +1,18 @@
1
1
  #!/usr/bin/env rake
2
2
 
3
3
  require 'hoe'
4
- Hoe.plugin :doofus, :git, :gemcutter
4
+ Hoe.plugin :doofus, :git
5
5
 
6
6
  Hoe.spec 'rubygems-mirror' do
7
- developer('James Tucker', 'raggi@rubyforge.org')
7
+ developer('James Tucker', 'jftucker@gmail.com')
8
+ license "MIT"
8
9
 
9
- extra_dev_deps << %w[hoe-doofus >=1.0.0]
10
- extra_dev_deps << %w[hoe-git >=1.3.0]
11
- extra_dev_deps << %w[hoe-gemcutter >=1.0.0]
12
- extra_dev_deps << %w[builder >=2.1.2]
13
- extra_deps << %w[net-http-persistent >=2.1]
10
+ extra_dev_deps << %w[minitest ~>5.7]
11
+ extra_deps << %w[net-http-persistent ~>2.9]
14
12
 
15
13
  self.extra_rdoc_files = FileList["**/*.rdoc"]
16
14
  self.history_file = "CHANGELOG.rdoc"
17
15
  self.readme_file = "README.rdoc"
18
- self.rubyforge_name = 'rubygems'
19
16
  self.testlib = :minitest
20
17
  end
21
18
 
@@ -5,20 +5,19 @@ class Gem::Mirror
5
5
  autoload :Fetcher, 'rubygems/mirror/fetcher'
6
6
  autoload :Pool, 'rubygems/mirror/pool'
7
7
 
8
- VERSION = '1.0.1'
8
+ VERSION = '1.1.0'
9
9
 
10
- SPECS_FILE = "specs.#{Gem.marshal_version}"
11
- SPECS_FILE_Z = "specs.#{Gem.marshal_version}.gz"
10
+ SPECS_FILES = [ "specs.#{Gem.marshal_version}", "prerelease_specs.#{Gem.marshal_version}", "latest_specs.#{Gem.marshal_version}" ]
12
11
 
13
12
  DEFAULT_URI = 'http://production.cf.rubygems.org/'
14
13
  DEFAULT_TO = File.join(Gem.user_home, '.gem', 'mirror')
15
14
 
16
15
  RUBY = 'ruby'
17
16
 
18
- def initialize(from = DEFAULT_URI, to = DEFAULT_TO, parallelism = 10)
17
+ def initialize(from = DEFAULT_URI, to = DEFAULT_TO, parallelism = nil, retries = nil, skiperror = nil)
19
18
  @from, @to = from, to
20
- @fetcher = Fetcher.new
21
- @pool = Pool.new(parallelism)
19
+ @fetcher = Fetcher.new :retries => retries, :skiperror => skiperror
20
+ @pool = Pool.new(parallelism || 10)
22
21
  end
23
22
 
24
23
  def from(*args)
@@ -30,15 +29,24 @@ class Gem::Mirror
30
29
  end
31
30
 
32
31
  def update_specs
33
- specz = to(SPECS_FILE_Z)
34
- @fetcher.fetch(from(SPECS_FILE_Z), specz)
35
- open(to(SPECS_FILE), 'wb') { |f| f << Gem.gunzip(File.read(specz)) }
32
+ SPECS_FILES.each do |sf|
33
+ sfz = "#{sf}.gz"
34
+
35
+ specz = to(sfz)
36
+ @fetcher.fetch(from(sfz), specz)
37
+ open(to(sf), 'wb') { |f| f << Gem.gunzip(File.read(specz)) }
38
+ end
36
39
  end
37
40
 
38
41
  def gems
39
- update_specs unless File.exists?(to(SPECS_FILE))
42
+ gems = []
43
+
44
+ SPECS_FILES.each do |sf|
45
+ update_specs unless File.exist?(to(sf))
46
+
47
+ gems += Marshal.load(File.read(to(sf)))
48
+ end
40
49
 
41
- gems = Marshal.load(File.read(to(SPECS_FILE)))
42
50
  gems.map! do |name, ver, plat|
43
51
  # If the platform is ruby, it is not in the gem name
44
52
  "#{name}-#{ver}#{"-#{plat}" unless plat == RUBY}.gem"
@@ -50,10 +58,18 @@ class Gem::Mirror
50
58
  Dir[to('gems', '*.gem')].entries.map { |f| File.basename(f) }
51
59
  end
52
60
 
61
+ def existing_gemspecs
62
+ Dir[to("quick/Marshal.#{Gem.marshal_version}", '*.rz')].entries.map { |f| File.basename(f) }
63
+ end
64
+
53
65
  def gems_to_fetch
54
66
  gems - existing_gems
55
67
  end
56
68
 
69
+ def gemspecs_to_fetch
70
+ gems.map { |g| "#{g}spec.rz" } - existing_gemspecs
71
+ end
72
+
57
73
  def gems_to_delete
58
74
  existing_gems - gems
59
75
  end
@@ -62,7 +78,14 @@ class Gem::Mirror
62
78
  gems_to_fetch.each do |g|
63
79
  @pool.job do
64
80
  @fetcher.fetch(from('gems', g), to('gems', g))
65
- yield
81
+ yield if block_given?
82
+ end
83
+ end
84
+
85
+ gemspecs_to_fetch.each do |g_spec|
86
+ @pool.job do
87
+ @fetcher.fetch(from("quick/Marshal.#{Gem.marshal_version}", g_spec), to("quick/Marshal.#{Gem.marshal_version}", g_spec))
88
+ yield if block_given?
66
89
  end
67
90
  end
68
91
 
@@ -73,7 +96,7 @@ class Gem::Mirror
73
96
  gems_to_delete.each do |g|
74
97
  @pool.job do
75
98
  File.delete(to('gems', g))
76
- yield
99
+ yield if block_given?
77
100
  end
78
101
  end
79
102
 
@@ -11,13 +11,17 @@ class Gem::Commands::MirrorCommand < Gem::Command
11
11
 
12
12
  def description # :nodoc:
13
13
  <<-EOF
14
- The mirror command uses the ~/.gem/.mirrorrc config file to mirror remote gem
15
- repositories to a local path. The config file is a YAML document that looks
16
- like this:
14
+ The mirror command uses the ~/.gem/.mirrorrc config file to mirror
15
+ remote gem repositories to a local path. The config file is a YAML
16
+ document that looks like this:
17
17
 
18
18
  ---
19
19
  - from: http://gems.example.com # source repository URI
20
20
  to: /path/to/mirror # destination directory
21
+ parallelism: 10 # use 10 threads for downloads
22
+ retries: 3 # retry 3 times if fail to download a gem, optional, def is 1. (no retry)
23
+ delete: false # whether delete gems (if remote ones are removed),optional, default is false.
24
+ skiperror: true # whether skip error, optional, def is true. will stop at error if set this to false.
21
25
 
22
26
  Multiple sources and destinations may be specified.
23
27
  EOF
@@ -38,13 +42,20 @@ Multiple sources and destinations may be specified.
38
42
 
39
43
  get_from = mir['from']
40
44
  save_to = File.expand_path mir['to']
45
+ parallelism = mir['parallelism']
46
+ retries = mir['retries'] || 1
47
+ skiperror = mir['skiperror']
48
+ delete = mir['delete']
41
49
 
42
50
  raise "Directory not found: #{save_to}" unless File.exist? save_to
43
51
  raise "Not a directory: #{save_to}" unless File.directory? save_to
44
52
 
45
- mirror = Gem::Mirror.new(get_from, save_to)
53
+ mirror = Gem::Mirror.new(get_from, save_to, parallelism, retries, skiperror)
46
54
 
47
- say "Fetching: #{mirror.from(Gem::Mirror::SPECS_FILE_Z)}"
55
+ Gem::Mirror::SPECS_FILES.each do |sf|
56
+ say "Fetching: #{mirror.from(sf)}"
57
+ end
58
+
48
59
  mirror.update_specs
49
60
 
50
61
  say "Total gems: #{mirror.gems.size}"
@@ -58,14 +69,17 @@ Multiple sources and destinations may be specified.
58
69
 
59
70
  mirror.update_gems { progress.updated true }
60
71
 
61
- num_to_delete = mirror.gems_to_delete.size
62
72
 
63
- progress = ui.progress_reporter num_to_delete,
73
+ if delete
74
+ num_to_delete = mirror.gems_to_delete.size
75
+
76
+ progress = ui.progress_reporter num_to_delete,
64
77
  "Deleting #{num_to_delete} gems"
65
78
 
66
- trap(:INFO) { puts "Fetched: #{progress.count}/#{num_to_delete}" } if SUPPORTS_INFO_SIGNAL
79
+ trap(:INFO) { puts "Fetched: #{progress.count}/#{num_to_delete}" } if SUPPORTS_INFO_SIGNAL
67
80
 
68
- mirror.delete_gems { progress.updated true }
81
+ mirror.delete_gems { progress.updated true }
82
+ end
69
83
  end
70
84
  end
71
85
  end
@@ -5,20 +5,42 @@ class Gem::Mirror::Fetcher
5
5
  # TODO beef
6
6
  class Error < StandardError; end
7
7
 
8
- def initialize
8
+ def initialize(opts = {})
9
9
  @http = Net::HTTP::Persistent.new(self.class.name, :ENV)
10
+ @opts = opts
11
+
12
+ # default opts
13
+ @opts[:retries] ||= 1
14
+ @opts[:skiperror] = true if @opts[:skiperror].nil?
10
15
  end
11
16
 
12
17
  # Fetch a source path under the base uri, and put it in the same or given
13
18
  # destination path under the base path.
14
19
  def fetch(uri, path)
15
- modified_time = File.exists?(path) && File.stat(path).mtime.rfc822
20
+ modified_time = File.exist?(path) && File.stat(path).mtime.rfc822
16
21
 
17
22
  req = Net::HTTP::Get.new URI.parse(uri).path
18
23
  req.add_field 'If-Modified-Since', modified_time if modified_time
19
24
 
20
- @http.request URI(uri), req do |resp|
21
- return handle_response(resp, path)
25
+ retries = @opts[:retries]
26
+
27
+ begin
28
+ puts "get: #{uri}, #{retries}"
29
+
30
+ # Net::HTTP will throw an exception on things like http timeouts.
31
+ # Therefore some generic error handling is needed in case no response
32
+ # is returned so the whole mirror operation doesn't abort prematurely.
33
+ begin
34
+ @http.request URI(uri), req do |resp|
35
+ return handle_response(resp, path)
36
+ end
37
+ rescue Exception => e
38
+ warn "Error connecting to #{uri.to_s}: #{e.message}"
39
+ end
40
+ rescue Error
41
+ retries -= 1
42
+ retry if retries > 0
43
+ raise if not @opts[:skiperror]
22
44
  end
23
45
  end
24
46
 
@@ -27,12 +49,12 @@ class Gem::Mirror::Fetcher
27
49
  def handle_response(resp, path)
28
50
  case resp.code.to_i
29
51
  when 304
30
- when 302
52
+ when 301, 302
31
53
  fetch resp['location'], path
32
54
  when 200
33
55
  write_file(resp, path)
34
56
  when 403, 404
35
- warn "#{resp.code} on #{File.basename(path)}"
57
+ raise Error,"#{resp.code} on #{File.basename(path)}"
36
58
  else
37
59
  raise Error, "unexpected response #{resp.inspect}"
38
60
  end
@@ -67,11 +67,13 @@ class Gem::Mirror
67
67
  Dir.mkdir gemdir = File.join(@source_path, 'gems')
68
68
 
69
69
  @source_working = working = Dir.mktmpdir("test_gem_source_#{$$}")
70
+ FileUtils.mkdir_p rzspecdir = File.join(@source_path, "quick/Marshal.#{Gem.marshal_version}")
70
71
 
71
72
  Dir.mkdir File.join(working, 'lib')
72
73
 
73
74
  gemspecs = %w[a b c].map do |name|
74
75
  FileUtils.touch File.join(working, 'lib', "#{name}.rb")
76
+ FileUtils.touch File.join(rzspecdir, "#{name}spec.rz")
75
77
  Gem::Specification.new do |s|
76
78
  s.platform = Gem::Platform::RUBY
77
79
  s.name = name
@@ -88,13 +90,35 @@ class Gem::Mirror
88
90
  end
89
91
  end
90
92
 
93
+ # add prerelease gem versions
94
+ prerelease_gemspecs = %w[x y].map do |name|
95
+ FileUtils.touch File.join(working, 'lib', "#{name}.rb")
96
+ FileUtils.touch File.join(rzspecdir, "#{name}spec.rz")
97
+ Gem::Specification.new do |s|
98
+ s.platform = Gem::Platform::RUBY
99
+ s.name = name
100
+ s.version = "0.1.b"
101
+ s.author = 'rubygems'
102
+ s.email = 'example@example.com'
103
+ s.homepage = 'http://example.com'
104
+ s.has_rdoc = false
105
+ s.description = 'desc'
106
+ s.summary = "summ"
107
+ s.require_paths = %w[lib]
108
+ s.files = %W[lib/#{name}.rb]
109
+ s.rubyforge_project = 'rubygems'
110
+ end
111
+ end
112
+
113
+ gemspecs.concat(prerelease_gemspecs)
114
+
91
115
  gemspecs.each do |spec|
92
116
  path = File.join(working, "#{spec.name}.gemspec")
93
117
  open(path, 'w') do |io|
94
118
  io.write(spec.to_ruby)
95
119
  end
96
120
  Dir.chdir(working) do
97
- gem_file = Gem::Builder.new(spec).build
121
+ gem_file = Gem::Package.build(spec)
98
122
  FileUtils.mv(gem_file, File.join(@source_path, 'gems', gem_file))
99
123
  end
100
124
  end
@@ -149,7 +173,7 @@ class Gem::Mirror
149
173
  @server && @server.shutdown
150
174
  @server_thread && @server_thread.join
151
175
  end
152
-
176
+
153
177
  def with_server
154
178
  setup_ui
155
179
  setup_gem_source
@@ -4,7 +4,7 @@ require "rubygems/mirror/test_setup"
4
4
 
5
5
  require 'minitest/autorun' # damn you autotest.
6
6
 
7
- class TestGemMirror < MiniTest::Unit::TestCase
7
+ class TestGemMirror < Minitest::Test
8
8
  include Gem::Mirror::TestSetup
9
9
 
10
10
  # Used to make sure we don't raise on construction, works against defaults
@@ -16,8 +16,9 @@ class TestGemMirror < MiniTest::Unit::TestCase
16
16
  with_server do
17
17
  mirror = Gem::Mirror.new(*opts)
18
18
  mirror.update_specs
19
- assert File.exists?(mirror_path + "/#{Gem::Mirror::SPECS_FILE_Z}")
20
- assert File.exists?(mirror_path + "/#{Gem::Mirror::SPECS_FILE_Z}")
19
+ Gem::Mirror::SPECS_FILES.each do |sf|
20
+ assert File.exist?(mirror_path + "/#{sf}.gz")
21
+ end
21
22
  end
22
23
  end
23
24
 
@@ -32,8 +33,14 @@ class TestGemMirror < MiniTest::Unit::TestCase
32
33
  Dir[path + '/gems/*'].map { |f| File.basename(f) }
33
34
  end
34
35
 
36
+ source_rz_specs, mirror_rz_specs = [source_path, mirror_path].map do |path|
37
+ Dir[path + "/quick/Marshal.#{Gem.marshal_version}/*"].map { |f| File.basename(f) }
38
+ end
39
+
35
40
  assert_equal source_gems, mirror_gems
36
- assert_equal 3, updates
41
+ assert_equal source_rz_specs, mirror_rz_specs
42
+ # XXX(raggi): need to figure out how to hide the system gems in 2.0
43
+ assert 10 <= updates
37
44
  end
38
45
  end
39
46
 
metadata CHANGED
@@ -1,137 +1,86 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rubygems-mirror
3
- version: !ruby/object:Gem::Version
4
- hash: 21
5
- prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 1
10
- version: 1.0.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - James Tucker
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2011-10-02 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2015-07-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: net-http-persistent
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 1
29
- segments:
30
- - 2
31
- - 1
32
- version: "2.1"
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '2.9'
33
20
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: hoe-doofus
37
- prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 23
44
- segments:
45
- - 1
46
- - 0
47
- - 0
48
- version: 1.0.0
49
- type: :development
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: hoe-git
53
21
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
55
- none: false
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- hash: 27
60
- segments:
61
- - 1
62
- - 3
63
- - 0
64
- version: 1.3.0
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '2.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '4.0'
65
34
  type: :development
66
- version_requirements: *id003
67
- - !ruby/object:Gem::Dependency
68
- name: hoe-gemcutter
69
35
  prerelease: false
70
- requirement: &id004 !ruby/object:Gem::Requirement
71
- none: false
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- hash: 23
76
- segments:
77
- - 1
78
- - 0
79
- - 0
80
- version: 1.0.0
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '4.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '5.7'
81
48
  type: :development
82
- version_requirements: *id004
83
- - !ruby/object:Gem::Dependency
84
- name: builder
85
49
  prerelease: false
86
- requirement: &id005 !ruby/object:Gem::Requirement
87
- none: false
88
- requirements:
89
- - - ">="
90
- - !ruby/object:Gem::Version
91
- hash: 15
92
- segments:
93
- - 2
94
- - 1
95
- - 2
96
- version: 2.1.2
97
- type: :development
98
- version_requirements: *id005
99
- - !ruby/object:Gem::Dependency
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '5.7'
55
+ - !ruby/object:Gem::Dependency
100
56
  name: hoe
101
- prerelease: false
102
- requirement: &id006 !ruby/object:Gem::Requirement
103
- none: false
104
- requirements:
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
105
59
  - - ~>
106
- - !ruby/object:Gem::Version
107
- hash: 27
108
- segments:
109
- - 2
110
- - 12
111
- version: "2.12"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.13'
112
62
  type: :development
113
- version_requirements: *id006
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '3.13'
114
69
  description: |-
115
70
  This is an update to the old `gem mirror` command. It uses net/http/persistent
116
71
  and threads to grab the mirror set a little faster than the original.
117
72
  Eventually it will replace `gem mirror` completely. Right now the API is not
118
73
  completely stable (it will change several times before release), however, I
119
74
  will maintain stability in master.
120
- email:
121
- - raggi@rubyforge.org
75
+ email:
76
+ - jftucker@gmail.com
122
77
  executables: []
123
-
124
78
  extensions: []
125
-
126
- extra_rdoc_files:
127
- - Manifest.txt
79
+ extra_rdoc_files:
128
80
  - CHANGELOG.rdoc
129
- - pkg/rubygems-mirror-1.0.0/CHANGELOG.rdoc
130
- - pkg/rubygems-mirror-1.0.0/pkg/rubygems-mirror-1.0.0/CHANGELOG.rdoc
131
- - pkg/rubygems-mirror-1.0.0/pkg/rubygems-mirror-1.0.0/README.rdoc
132
- - pkg/rubygems-mirror-1.0.0/README.rdoc
81
+ - Manifest.txt
133
82
  - README.rdoc
134
- files:
83
+ files:
135
84
  - .autotest
136
85
  - CHANGELOG.rdoc
137
86
  - Manifest.txt
@@ -144,46 +93,31 @@ files:
144
93
  - lib/rubygems/mirror/test_setup.rb
145
94
  - lib/rubygems_plugin.rb
146
95
  - test/test_gem_mirror.rb
147
- - pkg/rubygems-mirror-1.0.0/CHANGELOG.rdoc
148
- - pkg/rubygems-mirror-1.0.0/pkg/rubygems-mirror-1.0.0/CHANGELOG.rdoc
149
- - pkg/rubygems-mirror-1.0.0/pkg/rubygems-mirror-1.0.0/README.rdoc
150
- - pkg/rubygems-mirror-1.0.0/README.rdoc
151
96
  - .gemtest
152
- homepage: http://github.com/rubygems/rubygems-mirror
153
- licenses: []
154
-
97
+ homepage: https://github.com/rubygems/rubygems-mirror
98
+ licenses:
99
+ - MIT
155
100
  metadata: {}
156
-
157
101
  post_install_message:
158
- rdoc_options:
102
+ rdoc_options:
159
103
  - --main
160
104
  - README.rdoc
161
- require_paths:
105
+ require_paths:
162
106
  - lib
163
- required_ruby_version: !ruby/object:Gem::Requirement
164
- none: false
165
- requirements:
166
- - - ">="
167
- - !ruby/object:Gem::Version
168
- hash: 3
169
- segments:
170
- - 0
171
- version: "0"
172
- required_rubygems_version: !ruby/object:Gem::Requirement
173
- none: false
174
- requirements:
175
- - - ">="
176
- - !ruby/object:Gem::Version
177
- hash: 3
178
- segments:
179
- - 0
180
- version: "0"
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
181
117
  requirements: []
182
-
183
- rubyforge_project: rubygems
184
- rubygems_version: 1.8.10
118
+ rubyforge_project:
119
+ rubygems_version: 2.0.3
185
120
  signing_key:
186
121
  specification_version: 4
187
122
  summary: This is an update to the old `gem mirror` command
188
- test_files:
189
- - test/test_gem_mirror.rb
123
+ test_files: []
@@ -1,5 +0,0 @@
1
- === 1.0.0 / 2011-10-01
2
-
3
- * 1 major enhancement
4
-
5
- * Birthday!
@@ -1,70 +0,0 @@
1
- = rubygems-mirror
2
-
3
- http://github.com/rubygems/rubygems-mirror
4
-
5
- == DESCRIPTION:
6
-
7
- This is an update to the old `gem mirror` command. It uses net/http/persistent
8
- and threads to grab the mirror set a little faster than the original.
9
- Eventually it will replace `gem mirror` completely. Right now the API is not
10
- completely stable (it will change several times before release), however, I
11
- will maintain stability in master.
12
-
13
- == FEATURES/PROBLEMS:
14
-
15
- * Fast mirroring
16
- * Limited tests - just functional
17
-
18
- == REQUIREMENTS:
19
-
20
- * rubygems
21
- * net/http/persistent
22
-
23
- == USAGE
24
-
25
- * In a file at ~/.gem/.mirrorrc add a config that looks like the following:
26
-
27
- ---
28
- - from: http://rubygems.org
29
- to: /data/rubygems
30
-
31
- * Either install the gem, then run `gem mirror`, or
32
- * Clone then run `rake mirror:update`
33
-
34
- == INSTALL:
35
-
36
- * gem install rubygems-mirror
37
-
38
- == RESOURCES
39
-
40
- * {Website}[http://rubygems.org/]
41
- * {Documentation}[http://rubygems.rubyforge.org/rubygems-mirror/README_rdoc.html]
42
- * {Wiki}[http://wiki.github.com/rubygems/rubygems-mirror/]
43
- * {Source Code}[http://github.com/rubygems/rubygems-mirror/]
44
- * {Issues}[http://github.com/rubygems/rubygems-mirror/issues]
45
- * {Rubyforge}[http://rubyforge.org/projects/rubygems]
46
-
47
- == LICENSE:
48
-
49
- (The MIT License)
50
-
51
- Copyright (c) 2010 James Tucker, The RubyGems Team
52
-
53
- Permission is hereby granted, free of charge, to any person obtaining
54
- a copy of this software and associated documentation files (the
55
- 'Software'), to deal in the Software without restriction, including
56
- without limitation the rights to use, copy, modify, merge, publish,
57
- distribute, sublicense, and/or sell copies of the Software, and to
58
- permit persons to whom the Software is furnished to do so, subject to
59
- the following conditions:
60
-
61
- The above copyright notice and this permission notice shall be
62
- included in all copies or substantial portions of the Software.
63
-
64
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
65
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
66
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
67
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
68
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
69
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
70
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,5 +0,0 @@
1
- === 1.0.0 / 2011-10-01
2
-
3
- * 1 major enhancement
4
-
5
- * Birthday!
@@ -1,70 +0,0 @@
1
- = rubygems-mirror
2
-
3
- http://github.com/rubygems/rubygems-mirror
4
-
5
- == DESCRIPTION:
6
-
7
- This is an update to the old `gem mirror` command. It uses net/http/persistent
8
- and threads to grab the mirror set a little faster than the original.
9
- Eventually it will replace `gem mirror` completely. Right now the API is not
10
- completely stable (it will change several times before release), however, I
11
- will maintain stability in master.
12
-
13
- == FEATURES/PROBLEMS:
14
-
15
- * Fast mirroring
16
- * Limited tests - just functional
17
-
18
- == REQUIREMENTS:
19
-
20
- * rubygems
21
- * net/http/persistent
22
-
23
- == USAGE
24
-
25
- * In a file at ~/.gem/.mirrorrc add a config that looks like the following:
26
-
27
- ---
28
- - from: http://rubygems.org
29
- to: /data/rubygems
30
-
31
- * Either install the gem, then run `gem mirror`, or
32
- * Clone then run `rake mirror:update`
33
-
34
- == INSTALL:
35
-
36
- * gem install rubygems-mirror
37
-
38
- == RESOURCES
39
-
40
- * {Website}[http://rubygems.org/]
41
- * {Documentation}[http://rubygems.rubyforge.org/rubygems-mirror/README_rdoc.html]
42
- * {Wiki}[http://wiki.github.com/rubygems/rubygems-mirror/]
43
- * {Source Code}[http://github.com/rubygems/rubygems-mirror/]
44
- * {Issues}[http://github.com/rubygems/rubygems-mirror/issues]
45
- * {Rubyforge}[http://rubyforge.org/projects/rubygems]
46
-
47
- == LICENSE:
48
-
49
- (The MIT License)
50
-
51
- Copyright (c) 2010 James Tucker, The RubyGems Team
52
-
53
- Permission is hereby granted, free of charge, to any person obtaining
54
- a copy of this software and associated documentation files (the
55
- 'Software'), to deal in the Software without restriction, including
56
- without limitation the rights to use, copy, modify, merge, publish,
57
- distribute, sublicense, and/or sell copies of the Software, and to
58
- permit persons to whom the Software is furnished to do so, subject to
59
- the following conditions:
60
-
61
- The above copyright notice and this permission notice shall be
62
- included in all copies or substantial portions of the Software.
63
-
64
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
65
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
66
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
67
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
68
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
69
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
70
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.