rubygems-mirror 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|