compact_index 0.3.1 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +0 -1
- data/compact_index.gemspec +0 -2
- data/lib/compact_index.rb +14 -7
- data/lib/compact_index/version.rb +1 -1
- data/lib/compact_index/versions_file.rb +17 -4
- metadata +2 -31
- data/lib/compact_index/gem_info.rb +0 -91
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bbd6a30b0d60a7d08b00d9d46e06c277995840cf
|
4
|
+
data.tar.gz: 7afb08dbfa5fcc801aac009bb2153fab50a8ff6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aeb75821bbec6205ddaf38aed73d4552e7e1f7d11889cf7f9f6cf4e9981f12ebe7e51a9c5e822d62d165922f6c9ab8dc2fa44ef66a26ffa272fdd251e43577f1
|
7
|
+
data.tar.gz: 900911a7cbef27e3602158d148257ecc60fa5e016983ecd668f1a92ac43299e2f39662f01ccf6ffc6b6a71103a9f0c82bf1a0904c9d475d6e7ebdc4fc633b9fa
|
data/.travis.yml
CHANGED
data/compact_index.gemspec
CHANGED
@@ -18,8 +18,6 @@ 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.add_dependency "sequel"
|
22
|
-
spec.add_dependency "pg"
|
23
21
|
spec.add_development_dependency "rake", "~> 10.0"
|
24
22
|
spec.add_development_dependency "rspec", "~> 3"
|
25
23
|
end
|
data/lib/compact_index.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require "compact_index/version"
|
2
2
|
require "compact_index/versions_file"
|
3
|
-
require "compact_index/gem_info"
|
4
3
|
|
5
4
|
module CompactIndex
|
6
5
|
def self.names(gem_names)
|
@@ -14,16 +13,16 @@ module CompactIndex
|
|
14
13
|
def self.info(params)
|
15
14
|
output = "---\n"
|
16
15
|
params.each do |version|
|
17
|
-
output << version_line(version
|
16
|
+
output << version_line(version) << "\n"
|
18
17
|
end
|
19
18
|
output
|
20
19
|
end
|
21
20
|
|
22
21
|
private
|
23
|
-
def self.version_line(version
|
24
|
-
if dependencies
|
25
|
-
dependencies.sort! { |a,b| a[:gem] <=> b[:gem] }
|
26
|
-
deps = dependencies.map do |d|
|
22
|
+
def self.version_line(version)
|
23
|
+
if version[:dependencies]
|
24
|
+
version[:dependencies].sort! { |a,b| a[:gem] <=> b[:gem] }
|
25
|
+
deps = version[:dependencies].map do |d|
|
27
26
|
[
|
28
27
|
d[:gem],
|
29
28
|
d[:version].gsub(/, /, "&")
|
@@ -33,8 +32,16 @@ module CompactIndex
|
|
33
32
|
deps = []
|
34
33
|
end
|
35
34
|
|
36
|
-
line = version
|
35
|
+
line = version[:number]
|
37
36
|
line << " " << deps.join(",") if deps.any?
|
37
|
+
line << "|"
|
38
|
+
|
39
|
+
after_pipe = []
|
40
|
+
after_pipe << "checksum:#{version[:checksum]}"
|
41
|
+
after_pipe << "ruby:#{version[:ruby_version]}" if version[:ruby_version]
|
42
|
+
after_pipe << "rubygems:#{version[:rubygems_version]}" if version[:rubygems_version]
|
43
|
+
line << after_pipe.join(",")
|
44
|
+
|
38
45
|
line
|
39
46
|
end
|
40
47
|
end
|
@@ -8,7 +8,7 @@ class CompactIndex::VersionsFile
|
|
8
8
|
def create(gems)
|
9
9
|
content = "created_at: #{Time.now.iso8601}"
|
10
10
|
content += "\n---\n"
|
11
|
-
content +=
|
11
|
+
content += parse_gems_for_create(gems)
|
12
12
|
|
13
13
|
File.open(@path, 'w') do |io|
|
14
14
|
io.write content
|
@@ -34,6 +34,16 @@ class CompactIndex::VersionsFile
|
|
34
34
|
|
35
35
|
private
|
36
36
|
|
37
|
+
|
38
|
+
def parse_gems_for_create(gems)
|
39
|
+
fixed_format_gems = gems.map do |k,v|
|
40
|
+
numbers = v.map { |x| x[:number] }
|
41
|
+
{ name: k, versions: numbers, checksum: v.first[:checksum] }
|
42
|
+
end
|
43
|
+
fixed_format_gems.sort! { |a,b| a[:name] <=> b[:name] }
|
44
|
+
gem_lines(fixed_format_gems)
|
45
|
+
end
|
46
|
+
|
37
47
|
def parse_gems(gems)
|
38
48
|
sorted_gems = format_by_created_time(gems)
|
39
49
|
gem_lines(sorted_gems)
|
@@ -41,16 +51,19 @@ class CompactIndex::VersionsFile
|
|
41
51
|
|
42
52
|
def format_by_created_time(gems)
|
43
53
|
by_created_at = {}
|
54
|
+
checksums = {}
|
44
55
|
gems.each do |name, versions|
|
45
56
|
versions.each do |v|
|
46
57
|
by_created_at[v[:created_at]] ||= {}
|
47
58
|
by_created_at[v[:created_at]][name] ||= []
|
48
59
|
by_created_at[v[:created_at]][name] << v[:number]
|
60
|
+
checksums[v[:created_at]] ||= {}
|
61
|
+
checksums[v[:created_at]] = v[:checksum]
|
49
62
|
end
|
50
63
|
end
|
51
|
-
by_created_at.sort.map do |
|
64
|
+
by_created_at.sort.map do |created_at,gems|
|
52
65
|
gems.map do |name, versions|
|
53
|
-
{ name: name, versions: versions }
|
66
|
+
{ name: name, versions: versions, checksum: checksums[created_at] }
|
54
67
|
end
|
55
68
|
end.flatten
|
56
69
|
end
|
@@ -58,7 +71,7 @@ class CompactIndex::VersionsFile
|
|
58
71
|
def gem_lines(gems)
|
59
72
|
gems.reduce("") do |concat, entry|
|
60
73
|
versions = sort_versions(entry[:versions])
|
61
|
-
concat + "#{entry[:name]} #{versions.join(',')}\n"
|
74
|
+
concat + "#{entry[:name]} #{versions.join(',')} #{entry[:checksum]}\n"
|
62
75
|
end
|
63
76
|
end
|
64
77
|
|
metadata
CHANGED
@@ -1,43 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: compact_index
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- fotanus@gmail.com
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: sequel
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: pg
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
13
|
- !ruby/object:Gem::Dependency
|
42
14
|
name: rake
|
43
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -92,7 +64,6 @@ files:
|
|
92
64
|
- db/migrations/06_add_created_at_to_versions.rb
|
93
65
|
- db/migrations/07_add_checksum_to_versions.rb
|
94
66
|
- lib/compact_index.rb
|
95
|
-
- lib/compact_index/gem_info.rb
|
96
67
|
- lib/compact_index/version.rb
|
97
68
|
- lib/compact_index/versions_file.rb
|
98
69
|
homepage: https://github.com/bundler/compact_index
|
@@ -1,91 +0,0 @@
|
|
1
|
-
require 'compact_index'
|
2
|
-
|
3
|
-
# Return data about all the gems: all gem names, all versions of all gems, all dependencies for all versions of a gem
|
4
|
-
class CompactIndex::GemInfo
|
5
|
-
DepKey = Struct.new(:name, :number, :platform, :required_ruby_version, :rubygems_version, :checksum)
|
6
|
-
|
7
|
-
def initialize(connection)
|
8
|
-
@conn = connection
|
9
|
-
end
|
10
|
-
|
11
|
-
# @param [String] array of strings with the gem names
|
12
|
-
def deps_for(gems = [])
|
13
|
-
dataset =
|
14
|
-
if gems.any?
|
15
|
-
@conn[<<-SQL, Sequel.value_list(gems)]
|
16
|
-
SELECT rv.name, rv.number, rv.platform, rv.required_ruby_version, rv.checksum,
|
17
|
-
rv.rubygems_version, d.requirements, for_dep_name.name dep_name
|
18
|
-
FROM
|
19
|
-
(SELECT r.name, v.number, v.platform,v.rubygems_version, v.checksum,
|
20
|
-
v.required_ruby_version, v.id AS version_id
|
21
|
-
FROM rubygems AS r, versions AS v
|
22
|
-
WHERE v.rubygem_id = r.id
|
23
|
-
AND v.indexed is true
|
24
|
-
AND r.name IN ?) AS rv
|
25
|
-
LEFT JOIN dependencies AS d ON
|
26
|
-
d.version_id = rv.version_id
|
27
|
-
LEFT JOIN rubygems AS for_dep_name ON
|
28
|
-
d.rubygem_id = for_dep_name.id
|
29
|
-
AND d.scope = 'runtime';
|
30
|
-
SQL
|
31
|
-
else
|
32
|
-
@conn[<<-SQL]
|
33
|
-
SELECT rv.name, rv.number, rv.platform, d.requirements, for_dep_name.name dep_name
|
34
|
-
FROM
|
35
|
-
(SELECT r.name, v.number, v.platform, v.id AS version_id
|
36
|
-
FROM rubygems AS r, versions AS v
|
37
|
-
WHERE v.rubygem_id = r.id
|
38
|
-
AND v.indexed is true) AS rv
|
39
|
-
LEFT JOIN dependencies AS d ON
|
40
|
-
d.version_id = rv.version_id
|
41
|
-
LEFT JOIN rubygems AS for_dep_name ON
|
42
|
-
d.rubygem_id = for_dep_name.id
|
43
|
-
AND d.scope = 'runtime';
|
44
|
-
SQL
|
45
|
-
end
|
46
|
-
|
47
|
-
deps = {}
|
48
|
-
|
49
|
-
dataset.each do |row|
|
50
|
-
key = DepKey.new(row[:name], row[:number], row[:platform], row[:required_ruby_version], row[:rubygems_version], row[:checksum])
|
51
|
-
deps[key] = [] unless deps[key]
|
52
|
-
deps[key] << [row[:dep_name], row[:requirements]] if row[:dep_name]
|
53
|
-
end
|
54
|
-
|
55
|
-
deps.map do |dep_key, gem_deps|
|
56
|
-
{
|
57
|
-
name: dep_key.name,
|
58
|
-
number: dep_key.number,
|
59
|
-
platform: dep_key.platform,
|
60
|
-
rubygems_version: dep_key.rubygems_version,
|
61
|
-
required_ruby_version: dep_key.required_ruby_version,
|
62
|
-
checksum: dep_key.checksum,
|
63
|
-
dependencies: gem_deps
|
64
|
-
}
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
# return list of gem names
|
69
|
-
def names
|
70
|
-
@conn[:rubygems].select(:name).order(:name).all.map {|r| r[:name] }
|
71
|
-
end
|
72
|
-
|
73
|
-
# return a list of gem names and their versions
|
74
|
-
def versions
|
75
|
-
specs_hash = Hash.new {|h, k| h[k] = [] }
|
76
|
-
rows = @conn[<<-SQL]
|
77
|
-
SELECT v.full_name, v.number, v.platform
|
78
|
-
FROM versions AS v
|
79
|
-
WHERE v.indexed is true
|
80
|
-
SQL
|
81
|
-
rows.each do |row|
|
82
|
-
full_name = row[:full_name]
|
83
|
-
version = row[:number]
|
84
|
-
version += "-" << row[:platform] unless row[:platform] == "ruby"
|
85
|
-
name = full_name.chomp("-" << version)
|
86
|
-
specs_hash[name] << version
|
87
|
-
end
|
88
|
-
|
89
|
-
specs_hash.each {|k, v| v.sort! }
|
90
|
-
end
|
91
|
-
end
|