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.
- checksums.yaml +7 -0
- data/CHANGELOG.rdoc +9 -0
- data/README.rdoc +16 -10
- data/Rakefile +5 -8
- data/lib/rubygems/mirror.rb +36 -13
- data/lib/rubygems/mirror/command.rb +23 -9
- data/lib/rubygems/mirror/fetcher.rb +28 -6
- data/lib/rubygems/mirror/test_setup.rb +26 -2
- data/test/test_gem_mirror.rb +11 -4
- metadata +75 -141
- data/pkg/rubygems-mirror-1.0.0/CHANGELOG.rdoc +0 -5
- data/pkg/rubygems-mirror-1.0.0/README.rdoc +0 -70
- data/pkg/rubygems-mirror-1.0.0/pkg/rubygems-mirror-1.0.0/CHANGELOG.rdoc +0 -5
- data/pkg/rubygems-mirror-1.0.0/pkg/rubygems-mirror-1.0.0/README.rdoc +0 -70
checksums.yaml
ADDED
@@ -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
|
data/CHANGELOG.rdoc
CHANGED
@@ -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
|
data/README.rdoc
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
= rubygems-mirror
|
2
2
|
|
3
|
-
|
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
|
-
|
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}[
|
41
|
-
* {Documentation}[
|
42
|
-
* {Wiki}[
|
43
|
-
* {Source Code}[
|
44
|
-
* {Issues}[
|
45
|
-
* {Rubyforge}[
|
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
|
4
|
+
Hoe.plugin :doofus, :git
|
5
5
|
|
6
6
|
Hoe.spec 'rubygems-mirror' do
|
7
|
-
developer('James Tucker', '
|
7
|
+
developer('James Tucker', 'jftucker@gmail.com')
|
8
|
+
license "MIT"
|
8
9
|
|
9
|
-
extra_dev_deps << %w[
|
10
|
-
|
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
|
|
data/lib/rubygems/mirror.rb
CHANGED
@@ -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
|
8
|
+
VERSION = '1.1.0'
|
9
9
|
|
10
|
-
|
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 =
|
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
|
-
|
34
|
-
|
35
|
-
|
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
|
-
|
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
|
15
|
-
repositories to a local path. The config file is a YAML
|
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
|
-
|
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
|
-
|
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
|
-
|
79
|
+
trap(:INFO) { puts "Fetched: #{progress.count}/#{num_to_delete}" } if SUPPORTS_INFO_SIGNAL
|
67
80
|
|
68
|
-
|
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.
|
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
|
-
|
21
|
-
|
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
|
-
|
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::
|
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
|
data/test/test_gem_mirror.rb
CHANGED
@@ -4,7 +4,7 @@ require "rubygems/mirror/test_setup"
|
|
4
4
|
|
5
5
|
require 'minitest/autorun' # damn you autotest.
|
6
6
|
|
7
|
-
class TestGemMirror <
|
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
|
-
|
20
|
-
|
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
|
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
|
-
|
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
|
-
|
19
|
-
|
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
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
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
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
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
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
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
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
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
|
-
|
102
|
-
|
103
|
-
none: false
|
104
|
-
requirements:
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
105
59
|
- - ~>
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
|
108
|
-
segments:
|
109
|
-
- 2
|
110
|
-
- 12
|
111
|
-
version: "2.12"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.13'
|
112
62
|
type: :development
|
113
|
-
|
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
|
-
-
|
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
|
-
-
|
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:
|
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
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
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
|
-
|
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,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,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.
|