gemstash 2.0.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +57 -0
- data/exe/gemstash +3 -0
- data/lib/gemstash/api_key_authorization.rb +3 -0
- data/lib/gemstash/authorization.rb +7 -3
- data/lib/gemstash/cache.rb +42 -2
- data/lib/gemstash/cli/authorize.rb +5 -5
- data/lib/gemstash/cli/base.rb +4 -1
- data/lib/gemstash/cli/setup.rb +19 -4
- data/lib/gemstash/cli/start.rb +4 -1
- data/lib/gemstash/cli/status.rb +2 -0
- data/lib/gemstash/cli/stop.rb +2 -0
- data/lib/gemstash/cli.rb +2 -0
- data/lib/gemstash/config.ru +3 -3
- data/lib/gemstash/configuration.rb +8 -2
- data/lib/gemstash/db/authorization.rb +2 -0
- data/lib/gemstash/db/cached_rubygem.rb +3 -0
- data/lib/gemstash/db/dependency.rb +2 -0
- data/lib/gemstash/db/rubygem.rb +3 -0
- data/lib/gemstash/db/upstream.rb +3 -0
- data/lib/gemstash/db/version.rb +3 -0
- data/lib/gemstash/db.rb +3 -0
- data/lib/gemstash/dependencies.rb +6 -2
- data/lib/gemstash/env.rb +24 -4
- data/lib/gemstash/gem_fetcher.rb +4 -2
- data/lib/gemstash/gem_pusher.rb +7 -5
- data/lib/gemstash/gem_source/dependency_caching.rb +4 -4
- data/lib/gemstash/gem_source/private_source.rb +6 -3
- data/lib/gemstash/gem_source/rack_middleware.rb +3 -0
- data/lib/gemstash/gem_source/upstream_source.rb +9 -3
- data/lib/gemstash/gem_source.rb +4 -2
- data/lib/gemstash/gem_yanker.rb +4 -0
- data/lib/gemstash/health.rb +2 -0
- data/lib/gemstash/http_client.rb +12 -4
- data/lib/gemstash/logging.rb +3 -1
- data/lib/gemstash/man/gemstash-authorize.1.txt +0 -65
- data/lib/gemstash/man/gemstash-configuration.5.txt +0 -65
- data/lib/gemstash/man/gemstash-customize.7.txt +0 -65
- data/lib/gemstash/man/gemstash-debugging.7.txt +0 -65
- data/lib/gemstash/man/gemstash-deploy.7.txt +0 -65
- data/lib/gemstash/man/gemstash-mirror.7.txt +0 -65
- data/lib/gemstash/man/gemstash-multiple-sources.7.txt +0 -65
- data/lib/gemstash/man/gemstash-private-gems.7.txt +0 -65
- data/lib/gemstash/man/gemstash-readme.7.txt +0 -65
- data/lib/gemstash/man/gemstash-setup.1.txt +0 -65
- data/lib/gemstash/man/gemstash-start.1.txt +0 -65
- data/lib/gemstash/man/gemstash-status.1.txt +0 -65
- data/lib/gemstash/man/gemstash-stop.1.txt +0 -65
- data/lib/gemstash/man/gemstash-version.1.txt +0 -65
- data/lib/gemstash/migrations/01_gem_dependencies.rb +2 -0
- data/lib/gemstash/migrations/02_authorizations.rb +2 -0
- data/lib/gemstash/migrations/03_cached_gems.rb +2 -0
- data/lib/gemstash/migrations/04_health_tests.rb +2 -0
- data/lib/gemstash/puma.rb +2 -0
- data/lib/gemstash/rack_env_rewriter.rb +11 -2
- data/lib/gemstash/specs_builder.rb +5 -1
- data/lib/gemstash/storage.rb +17 -7
- data/lib/gemstash/upstream.rb +8 -5
- data/lib/gemstash/version.rb +4 -2
- data/lib/gemstash/web.rb +8 -4
- data/lib/gemstash.rb +3 -1
- metadata +40 -133
@@ -1,66 +1 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
@@ -1,66 +1 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
@@ -1,66 +1 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
@@ -1,66 +1 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
@@ -1,66 +1 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
@@ -1,66 +1 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
@@ -1,66 +1 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
@@ -1,66 +1 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
data/lib/gemstash/puma.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "gemstash"
|
2
4
|
require "forwardable"
|
3
5
|
|
@@ -33,8 +35,15 @@ module Gemstash
|
|
33
35
|
def rewrite
|
34
36
|
check_match
|
35
37
|
log_start = "Rewriting '#{@rack_env["REQUEST_URI"]}'"
|
36
|
-
|
37
|
-
@rack_env["
|
38
|
+
|
39
|
+
new_request_uri = @rack_env["REQUEST_URI"].dup
|
40
|
+
new_request_uri[@request_uri_match.begin(0)...@request_uri_match.end(0)] = ""
|
41
|
+
|
42
|
+
new_path_info = @rack_env["PATH_INFO"].dup
|
43
|
+
new_path_info[@path_info_match.begin(0)...@path_info_match.end(0)] = ""
|
44
|
+
|
45
|
+
@rack_env["REQUEST_URI"] = new_request_uri
|
46
|
+
@rack_env["PATH_INFO"] = new_path_info
|
38
47
|
log.info "#{log_start} to '#{@rack_env["REQUEST_URI"]}'"
|
39
48
|
end
|
40
49
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "gemstash"
|
2
4
|
require "stringio"
|
3
5
|
require "zlib"
|
@@ -33,6 +35,7 @@ module Gemstash
|
|
33
35
|
check_auth if gemstash_env.config[:protected_fetch]
|
34
36
|
fetch_from_storage
|
35
37
|
return result if result
|
38
|
+
|
36
39
|
fetch_versions
|
37
40
|
marshal
|
38
41
|
gzip
|
@@ -59,8 +62,9 @@ module Gemstash
|
|
59
62
|
def fetch_from_storage
|
60
63
|
specs = fetch_resource
|
61
64
|
return unless specs.exist?(:specs)
|
65
|
+
|
62
66
|
@result = specs.load(:specs).content(:specs)
|
63
|
-
rescue
|
67
|
+
rescue StandardError
|
64
68
|
# On the off-chance of a race condition between specs.exist? and specs.load
|
65
69
|
@result = nil
|
66
70
|
end
|
data/lib/gemstash/storage.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "gemstash"
|
2
4
|
require "digest"
|
3
5
|
require "fileutils"
|
@@ -66,7 +68,7 @@ module Gemstash
|
|
66
68
|
end
|
67
69
|
end
|
68
70
|
|
69
|
-
YAML.
|
71
|
+
YAML.safe_load_file(file, permitted_classes: [Symbol])
|
70
72
|
end
|
71
73
|
|
72
74
|
private
|
@@ -74,12 +76,14 @@ module Gemstash
|
|
74
76
|
def check_storage_version
|
75
77
|
version = Gemstash::Storage.metadata[:storage_version]
|
76
78
|
return if version <= Gemstash::Storage::VERSION
|
79
|
+
|
77
80
|
raise Gemstash::Storage::VersionTooNew.new(@folder, version)
|
78
81
|
end
|
79
82
|
|
80
83
|
def path_valid?(path)
|
81
84
|
return false if path.nil?
|
82
85
|
return false unless File.writable?(path)
|
86
|
+
|
83
87
|
true
|
84
88
|
end
|
85
89
|
end
|
@@ -90,6 +94,7 @@ module Gemstash
|
|
90
94
|
include Gemstash::Env::Helper
|
91
95
|
include Gemstash::Logging
|
92
96
|
attr_reader :name, :folder
|
97
|
+
|
93
98
|
VERSION = 1
|
94
99
|
|
95
100
|
# If the storage engine detects a resource was originally saved from a newer
|
@@ -191,7 +196,7 @@ module Gemstash
|
|
191
196
|
# @param props [Hash] the properties to add
|
192
197
|
# @return [Gemstash::Resource] self for chaining purposes
|
193
198
|
def update_properties(props)
|
194
|
-
load_properties(true)
|
199
|
+
load_properties(force: true)
|
195
200
|
|
196
201
|
deep_merge = proc do |_, old_value, new_value|
|
197
202
|
if old_value.is_a?(Hash) && new_value.is_a?(Hash)
|
@@ -247,17 +252,17 @@ module Gemstash
|
|
247
252
|
|
248
253
|
begin
|
249
254
|
File.delete(content_filename(key))
|
250
|
-
rescue => e
|
255
|
+
rescue StandardError => e
|
251
256
|
log_error "Failed to delete stored content at #{content_filename(key)}", e, level: :warn
|
252
257
|
end
|
253
258
|
|
254
259
|
begin
|
255
260
|
File.delete(properties_filename) unless content?
|
256
|
-
rescue => e
|
261
|
+
rescue StandardError => e
|
257
262
|
log_error "Failed to delete stored properties at #{properties_filename}", e, level: :warn
|
258
263
|
end
|
259
264
|
|
260
|
-
|
265
|
+
self
|
261
266
|
ensure
|
262
267
|
reset
|
263
268
|
end
|
@@ -266,21 +271,24 @@ module Gemstash
|
|
266
271
|
|
267
272
|
def load(key)
|
268
273
|
raise "Resource #{@name} has no #{key.inspect} content to load" unless exist?(key)
|
274
|
+
|
269
275
|
load_properties # Ensures storage version is checked
|
270
276
|
@content ||= {}
|
271
277
|
@content[key] = read_file(content_filename(key))
|
272
278
|
end
|
273
279
|
|
274
|
-
def load_properties(force
|
280
|
+
def load_properties(force: false)
|
275
281
|
return if @properties && !force
|
276
282
|
return unless File.exist?(properties_filename)
|
277
|
-
|
283
|
+
|
284
|
+
@properties = YAML.safe_load_file(properties_filename, permitted_classes: [Symbol]) || {}
|
278
285
|
check_resource_version
|
279
286
|
end
|
280
287
|
|
281
288
|
def check_resource_version
|
282
289
|
version = @properties[:gemstash_resource_version]
|
283
290
|
return if version <= Gemstash::Resource::VERSION
|
291
|
+
|
284
292
|
reset
|
285
293
|
raise Gemstash::Resource::VersionTooNew.new(name, folder, version)
|
286
294
|
end
|
@@ -292,6 +300,7 @@ module Gemstash
|
|
292
300
|
|
293
301
|
def content?
|
294
302
|
return false unless Dir.exist?(@folder)
|
303
|
+
|
295
304
|
entries = Dir.entries(@folder).reject {|file| file =~ /\A\.\.?\z/ || file == "properties.yaml" }
|
296
305
|
!entries.empty?
|
297
306
|
end
|
@@ -330,6 +339,7 @@ module Gemstash
|
|
330
339
|
def content_filename(key)
|
331
340
|
name = sanitize(key.to_s)
|
332
341
|
raise "Invalid content key #{key.inspect}" if name.empty?
|
342
|
+
|
333
343
|
File.join(@folder, name)
|
334
344
|
end
|
335
345
|
|