compact_index_client 0.1.0 → 2.0.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 +4 -4
- data/README.md +3 -0
- data/compact_index_client.gemspec +2 -0
- data/lib/compact_index_client/version.rb +1 -1
- metadata +17 -20
- data/.travis.yml +0 -8
- data/lib/compact_index_client.rb +0 -57
- data/lib/compact_index_client/cache.rb +0 -80
- data/lib/compact_index_client/updater.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c94f99287d3f49fc248f190beb0f14f45e7a136
|
4
|
+
data.tar.gz: 1f03bc6759acb7ac448f3bde2e8f2f2e7d155e56
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c451c41fabb75204c4d11ae43bc535e151d9b686f5dbf7f655ecdccb6934984cfac38042b233fdbed8c08461ab7165b598344bc2c2b64ab559c665cda4b4745
|
7
|
+
data.tar.gz: b0bd3dc61158d39a8284999b60ad3a7702b0c2fcf74faee1e4945b661f974b7c3e999b4c1b3aa5ae136aca3cb4a7687cfca4e6ee5594ccc0b1ec9609a6b8151a
|
data/README.md
CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.post_install_message = "This gem is deprecated and is no longer supported by the Bundler team."
|
22
|
+
|
21
23
|
spec.add_development_dependency "bundler", "~> 1.10"
|
22
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
25
|
spec.add_development_dependency "rspec"
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: compact_index_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel E. Giddins
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.10'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.10'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description:
|
@@ -59,11 +59,10 @@ executables: []
|
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
-
-
|
63
|
-
-
|
64
|
-
-
|
65
|
-
-
|
66
|
-
- ".travis.yml"
|
62
|
+
- .gitignore
|
63
|
+
- .rspec
|
64
|
+
- .rubocop.yml
|
65
|
+
- .rubocop_todo.yml
|
67
66
|
- CHANGELOG.md
|
68
67
|
- Gemfile
|
69
68
|
- Gemfile.lock
|
@@ -76,31 +75,29 @@ files:
|
|
76
75
|
- bin/rubocop
|
77
76
|
- bin/setup
|
78
77
|
- compact_index_client.gemspec
|
79
|
-
- lib/compact_index_client.rb
|
80
|
-
- lib/compact_index_client/cache.rb
|
81
|
-
- lib/compact_index_client/updater.rb
|
82
78
|
- lib/compact_index_client/version.rb
|
83
79
|
homepage: https://github.com/bundler/compact_index_client
|
84
80
|
licenses:
|
85
81
|
- MIT
|
86
82
|
metadata: {}
|
87
|
-
post_install_message:
|
83
|
+
post_install_message: This gem is deprecated and is no longer supported by the Bundler
|
84
|
+
team.
|
88
85
|
rdoc_options: []
|
89
86
|
require_paths:
|
90
87
|
- lib
|
91
88
|
required_ruby_version: !ruby/object:Gem::Requirement
|
92
89
|
requirements:
|
93
|
-
- -
|
90
|
+
- - '>='
|
94
91
|
- !ruby/object:Gem::Version
|
95
92
|
version: '0'
|
96
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
94
|
requirements:
|
98
|
-
- -
|
95
|
+
- - '>='
|
99
96
|
- !ruby/object:Gem::Version
|
100
97
|
version: '0'
|
101
98
|
requirements: []
|
102
99
|
rubyforge_project:
|
103
|
-
rubygems_version: 2.
|
100
|
+
rubygems_version: 2.0.14.1
|
104
101
|
signing_key:
|
105
102
|
specification_version: 4
|
106
103
|
summary: The client for the new Bundler compact index format.
|
data/.travis.yml
DELETED
data/lib/compact_index_client.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
require "pathname"
|
2
|
-
require "set"
|
3
|
-
|
4
|
-
class CompactIndexClient
|
5
|
-
require "compact_index_client/cache"
|
6
|
-
require "compact_index_client/updater"
|
7
|
-
require "compact_index_client/version"
|
8
|
-
|
9
|
-
def initialize(directory, fetcher)
|
10
|
-
@directory = Pathname.new(directory)
|
11
|
-
@updater = Updater.new(fetcher)
|
12
|
-
@cache = Cache.new(@directory)
|
13
|
-
@endpoints = Set.new
|
14
|
-
@info_checksums_by_name = {}
|
15
|
-
end
|
16
|
-
|
17
|
-
def names
|
18
|
-
update(@cache.names_path, "names")
|
19
|
-
@cache.names
|
20
|
-
end
|
21
|
-
|
22
|
-
def versions
|
23
|
-
update(@cache.versions_path, "versions")
|
24
|
-
versions, @info_checksums_by_name = @cache.versions
|
25
|
-
versions
|
26
|
-
end
|
27
|
-
|
28
|
-
def dependencies(names)
|
29
|
-
names.each {|n| update_info(n) }
|
30
|
-
names.map do |name|
|
31
|
-
@cache.dependencies(name).map {|d| d.unshift(name) }
|
32
|
-
end.flatten(1)
|
33
|
-
end
|
34
|
-
|
35
|
-
def spec(name, version, platform = nil)
|
36
|
-
update_info(name)
|
37
|
-
@cache.specific_dependency(name, version, platform)
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
|
42
|
-
def update(local_path, remote_path)
|
43
|
-
return if @endpoints.include?(remote_path)
|
44
|
-
@updater.update(local_path, url(remote_path))
|
45
|
-
@endpoints << remote_path
|
46
|
-
end
|
47
|
-
|
48
|
-
def update_info(name)
|
49
|
-
path = @cache.dependencies_path(name)
|
50
|
-
return if @info_checksums_by_name[name] == @updater.checksum_for_file(path)
|
51
|
-
update(path, "info/#{name}")
|
52
|
-
end
|
53
|
-
|
54
|
-
def url(path)
|
55
|
-
path
|
56
|
-
end
|
57
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
class CompactIndexClient
|
2
|
-
class Cache
|
3
|
-
attr_reader :directory
|
4
|
-
|
5
|
-
def initialize(directory)
|
6
|
-
@directory = Pathname.new(directory).expand_path
|
7
|
-
FileUtils.mkdir_p dependencies_path(nil)
|
8
|
-
end
|
9
|
-
|
10
|
-
def names
|
11
|
-
lines(names_path)
|
12
|
-
end
|
13
|
-
|
14
|
-
def names_path
|
15
|
-
directory + "names"
|
16
|
-
end
|
17
|
-
|
18
|
-
def versions
|
19
|
-
versions_by_name = Hash.new {|hash, key| hash[key] = [] }
|
20
|
-
info_checksums_by_name = {}
|
21
|
-
lines(versions_path).map do |line|
|
22
|
-
next if line == "-1"
|
23
|
-
name, versions_string, info_checksum = line.split(" ", 3)
|
24
|
-
info_checksums_by_name[name] = info_checksum || ""
|
25
|
-
versions_by_name[name].concat(versions_string.split(",").map! do |version|
|
26
|
-
version.split("-", 2).unshift(name)
|
27
|
-
end)
|
28
|
-
end
|
29
|
-
[versions_by_name, info_checksums_by_name]
|
30
|
-
end
|
31
|
-
|
32
|
-
def versions_path
|
33
|
-
directory + "versions"
|
34
|
-
end
|
35
|
-
|
36
|
-
def dependencies(name)
|
37
|
-
lines(dependencies_path(name)).map do |line|
|
38
|
-
parse_gem(line)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def dependencies_path(name)
|
43
|
-
directory + "dependencies" + name.to_s
|
44
|
-
end
|
45
|
-
|
46
|
-
def specific_dependency(name, version, platform)
|
47
|
-
pattern = [version, platform].compact.join("-")
|
48
|
-
matcher = /\A#{Regexp.escape(pattern)}\b/ unless pattern.empty?
|
49
|
-
lines(dependencies_path(name)).each do |line|
|
50
|
-
return parse_gem(line) if line =~ matcher
|
51
|
-
end if matcher
|
52
|
-
nil
|
53
|
-
end
|
54
|
-
|
55
|
-
private
|
56
|
-
|
57
|
-
def lines(path)
|
58
|
-
return [] unless path.file?
|
59
|
-
lines = path.read.lines
|
60
|
-
header = lines.index("---\n")
|
61
|
-
lines = header ? lines[header + 1..-1] : lines
|
62
|
-
lines.each!(&:strip!)
|
63
|
-
end
|
64
|
-
|
65
|
-
def parse_gem(string)
|
66
|
-
version_and_platform, rest = string.split(" ", 2)
|
67
|
-
version, platform = version_and_platform.split("-", 2)
|
68
|
-
dependencies, requirements = rest.split("|", 2).map {|s| s.split(",") } if rest
|
69
|
-
dependencies = dependencies ? dependencies.map {|d| parse_dependency(d) } : []
|
70
|
-
requirements = requirements ? requirements.map {|r| parse_dependency(r) } : []
|
71
|
-
[version, platform, dependencies, requirements]
|
72
|
-
end
|
73
|
-
|
74
|
-
def parse_dependency(string)
|
75
|
-
dependency = string.split(":")
|
76
|
-
dependency[-1] = dependency[-1].split("&")
|
77
|
-
dependency
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
class CompactIndexClient
|
2
|
-
class Updater
|
3
|
-
attr_reader :fetcher
|
4
|
-
def initialize(fetcher)
|
5
|
-
@fetcher = fetcher
|
6
|
-
end
|
7
|
-
|
8
|
-
def update(local_path, remote_path)
|
9
|
-
headers = {}
|
10
|
-
if local_path.file?
|
11
|
-
headers["If-None-Match"] = checksum_for_file(local_path)
|
12
|
-
headers["Range"] = "bytes=#{local_path.size}-"
|
13
|
-
end
|
14
|
-
response = fetcher.call(remote_path, headers)
|
15
|
-
return if response.is_a?(Net::HTTPNotModified)
|
16
|
-
mode = response.is_a?(Net::HTTPPartialContent) ? "a" : "w"
|
17
|
-
local_path.open(mode) {|f| f << response.body }
|
18
|
-
|
19
|
-
return if checksum_for_file(local_path) == response["ETag"]
|
20
|
-
local_path.delete
|
21
|
-
update(local_path, remote_path)
|
22
|
-
end
|
23
|
-
|
24
|
-
def checksum_for_file(path)
|
25
|
-
return nil unless path.file?
|
26
|
-
Digest::MD5.file(path).hexdigest
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|