geminabox 2.2.0 → 3.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 +2 -11
- data/lib/geminabox/disk_cache.rb +11 -15
- data/lib/geminabox/hostess.rb +8 -13
- data/lib/geminabox/indexer.rb +1 -0
- data/lib/geminabox/proxy/hostess.rb +10 -15
- data/lib/geminabox/server.rb +4 -3
- data/lib/geminabox/version.rb +1 -1
- data/lib/geminabox.rb +1 -27
- data/lib/geminabox_client.rb +1 -1
- metadata +20 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4286ff9507b08e7212e2fc72813336bf169e4c86e082802bc600648ecc8a0e99
|
|
4
|
+
data.tar.gz: ffdd59e137b59252c6a9f526652ee5e99c092cd55e6e13ef191a9e004bbeb47d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 215aef46c5ecfe77d391368be8a119230f4b2afe11e65a31b468e67a24c3030aa427801fff384080e75bd8942ac2b9006adf917e8dda5c6857bb9888ad6838ba
|
|
7
|
+
data.tar.gz: e29de3a2b4eedc3f603c41af8b449bb90a7f6f6ef2a75184d2febe416a86bc1680d0e2d6525591f585571f5749359b2d7c6c130eed940327f6109d9f397f1493
|
data/README.md
CHANGED
|
@@ -15,16 +15,8 @@ For basic auth, try [Rack::Auth](http://www.rubydoc.info/github/rack/rack/Rack/A
|
|
|
15
15
|
|
|
16
16
|
## System Requirements
|
|
17
17
|
|
|
18
|
-
- Ruby
|
|
19
|
-
- RubyGems 2.
|
|
20
|
-
- **Ruby 3.3+ users:** You must also install the `rubygems-generate_index` gem.
|
|
21
|
-
`Gem::Indexer` was extracted from RubyGems in 3.3 and geminabox requires it
|
|
22
|
-
to function. Add it to your Gemfile or install it directly:
|
|
23
|
-
|
|
24
|
-
gem install rubygems-generate_index
|
|
25
|
-
|
|
26
|
-
**Note:** Ruby 2.x support is deprecated. geminabox 3.0 will require Ruby >= 3.0.
|
|
27
|
-
Pin to `gem 'geminabox', '~> 2.2'` if you cannot upgrade yet.
|
|
18
|
+
- Ruby 3.0 or later (Ruby 3.2+ recommended)
|
|
19
|
+
- RubyGems 3.2.3 or later (latest version recommended)
|
|
28
20
|
|
|
29
21
|
## Server Setup
|
|
30
22
|
|
|
@@ -188,7 +180,6 @@ Your Gemfile only needs:
|
|
|
188
180
|
source 'https://rubygems.org'
|
|
189
181
|
|
|
190
182
|
gem 'geminabox'
|
|
191
|
-
gem 'rubygems-generate_index' # Required for Ruby 3.3+
|
|
192
183
|
```
|
|
193
184
|
|
|
194
185
|
From there
|
data/lib/geminabox/disk_cache.rb
CHANGED
|
@@ -46,26 +46,22 @@ module Geminabox
|
|
|
46
46
|
|
|
47
47
|
def read(key_hash)
|
|
48
48
|
read_int(key_hash) do |path|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
nil
|
|
55
|
-
end
|
|
49
|
+
File.read(path)
|
|
50
|
+
rescue Errno::ENOENT
|
|
51
|
+
# There is a possibility that the file is removed by another process
|
|
52
|
+
# after checking File.exist?. Return nil if the file does not exist.
|
|
53
|
+
nil
|
|
56
54
|
end
|
|
57
55
|
end
|
|
58
56
|
|
|
59
57
|
def marshal_read(key_hash)
|
|
60
58
|
read_int(key_hash) do |path|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
nil
|
|
68
|
-
end
|
|
59
|
+
File.open(path) {|fp| Marshal.load(fp) }
|
|
60
|
+
rescue Errno::ENOENT, EOFError
|
|
61
|
+
# There is a possibility that the file is removed by another process.
|
|
62
|
+
# Marshal.load raises EOFError if the file is removed after File.open(path) succeeds.
|
|
63
|
+
# Return nil if the file does not exist.
|
|
64
|
+
nil
|
|
69
65
|
end
|
|
70
66
|
end
|
|
71
67
|
|
data/lib/geminabox/hostess.rb
CHANGED
|
@@ -5,6 +5,8 @@ require 'sinatra/base'
|
|
|
5
5
|
module Geminabox
|
|
6
6
|
|
|
7
7
|
class Hostess < Sinatra::Base
|
|
8
|
+
set :host_authorization, { permitted_hosts: [] }
|
|
9
|
+
|
|
8
10
|
def serve
|
|
9
11
|
headers["Cache-Control"] = 'no-transform'
|
|
10
12
|
send_file(File.expand_path(File.join(Geminabox.data, *request.path_info)), :type => response['Content-Type'])
|
|
@@ -20,23 +22,16 @@ module Geminabox
|
|
|
20
22
|
end
|
|
21
23
|
end
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
].each do |deflated_index|
|
|
27
|
-
get deflated_index do
|
|
28
|
-
content_type('application/x-deflate')
|
|
29
|
-
serve
|
|
30
|
-
end
|
|
25
|
+
get '/quick/Marshal.4.8/*.gemspec.rz' do
|
|
26
|
+
content_type('application/x-deflate')
|
|
27
|
+
serve
|
|
31
28
|
end
|
|
32
29
|
|
|
33
|
-
%w[/
|
|
34
|
-
/Marshal.4.8
|
|
35
|
-
/specs.4.8
|
|
30
|
+
%w[/specs.4.8
|
|
36
31
|
/latest_specs.4.8
|
|
37
32
|
/prerelease_specs.4.8
|
|
38
|
-
].each do |
|
|
39
|
-
get
|
|
33
|
+
].each do |index|
|
|
34
|
+
get index do
|
|
40
35
|
serve
|
|
41
36
|
end
|
|
42
37
|
end
|
data/lib/geminabox/indexer.rb
CHANGED
|
@@ -6,6 +6,8 @@ require 'net/http'
|
|
|
6
6
|
module Geminabox
|
|
7
7
|
module Proxy
|
|
8
8
|
class Hostess < Sinatra::Base
|
|
9
|
+
set :host_authorization, { permitted_hosts: [] }
|
|
10
|
+
|
|
9
11
|
attr_accessor :file_handler
|
|
10
12
|
def serve
|
|
11
13
|
headers["Cache-Control"] = 'no-transform'
|
|
@@ -27,25 +29,18 @@ module Geminabox
|
|
|
27
29
|
end
|
|
28
30
|
end
|
|
29
31
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
get "/#{deflated_index}" do
|
|
35
|
-
copy_file request.path_info[1..-1]
|
|
36
|
-
content_type('application/x-deflate')
|
|
37
|
-
serve
|
|
38
|
-
end
|
|
32
|
+
get '/quick/Marshal.4.8/*.gemspec.rz' do
|
|
33
|
+
copy_file request.path_info[1..]
|
|
34
|
+
content_type('application/x-deflate')
|
|
35
|
+
serve
|
|
39
36
|
end
|
|
40
37
|
|
|
41
|
-
%w[
|
|
42
|
-
Marshal.4.8
|
|
43
|
-
specs.4.8
|
|
38
|
+
%w[specs.4.8
|
|
44
39
|
latest_specs.4.8
|
|
45
40
|
prerelease_specs.4.8
|
|
46
|
-
].each do |
|
|
47
|
-
get "/#{
|
|
48
|
-
splice_file
|
|
41
|
+
].each do |index|
|
|
42
|
+
get "/#{index}" do
|
|
43
|
+
splice_file index
|
|
49
44
|
serve
|
|
50
45
|
end
|
|
51
46
|
end
|
data/lib/geminabox/server.rb
CHANGED
|
@@ -9,6 +9,7 @@ module Geminabox
|
|
|
9
9
|
enable :static, :methodoverride
|
|
10
10
|
set :public_folder, Geminabox.public_folder
|
|
11
11
|
set :views, Geminabox.views
|
|
12
|
+
set :host_authorization, { permitted_hosts: [] }
|
|
12
13
|
|
|
13
14
|
if Geminabox.rubygems_proxy
|
|
14
15
|
use Proxy::Hostess
|
|
@@ -60,7 +61,7 @@ module Geminabox
|
|
|
60
61
|
end
|
|
61
62
|
|
|
62
63
|
def indexer
|
|
63
|
-
Gem::Indexer.new(Geminabox.data
|
|
64
|
+
Gem::Indexer.new(Geminabox.data)
|
|
64
65
|
end
|
|
65
66
|
|
|
66
67
|
def dependency_cache
|
|
@@ -158,8 +159,8 @@ module Geminabox
|
|
|
158
159
|
halt 400 unless request.form_data?
|
|
159
160
|
|
|
160
161
|
serialize_update do
|
|
161
|
-
gems = load_gems.select { |gem|
|
|
162
|
-
|
|
162
|
+
gems = load_gems.select { |gem| params['gem_name'] == gem.name and
|
|
163
|
+
params['version'] == gem.number.version }
|
|
163
164
|
halt 404, 'Gem not found' if gems.size == 0
|
|
164
165
|
gems.each do |gem|
|
|
165
166
|
gem_path = File.expand_path(File.join(Geminabox.data, 'gems',
|
data/lib/geminabox/version.rb
CHANGED
data/lib/geminabox.rb
CHANGED
|
@@ -5,19 +5,7 @@ require 'digest/md5'
|
|
|
5
5
|
require 'builder'
|
|
6
6
|
require 'sinatra/base'
|
|
7
7
|
require 'rubygems/user_interaction'
|
|
8
|
-
|
|
9
|
-
# On Ruby 3.3+, require the rubygems-generate_index gem instead.
|
|
10
|
-
begin
|
|
11
|
-
require 'rubygems/indexer'
|
|
12
|
-
rescue LoadError
|
|
13
|
-
begin
|
|
14
|
-
require 'rubygems-generate_index'
|
|
15
|
-
rescue LoadError
|
|
16
|
-
raise LoadError,
|
|
17
|
-
"Ruby 3.3+ requires the 'rubygems-generate_index' gem. " \
|
|
18
|
-
"Add it to your Gemfile or run: gem install rubygems-generate_index"
|
|
19
|
-
end
|
|
20
|
-
end
|
|
8
|
+
require 'rubygems/indexer'
|
|
21
9
|
require 'rubygems/package'
|
|
22
10
|
require 'tempfile'
|
|
23
11
|
require 'json'
|
|
@@ -25,11 +13,6 @@ require 'tilt/erb'
|
|
|
25
13
|
require 'rack/protection'
|
|
26
14
|
|
|
27
15
|
module Geminabox
|
|
28
|
-
if RUBY_VERSION < '3.0'
|
|
29
|
-
warn "DEPRECATION: geminabox 3.0 will require Ruby >= 3.0. " \
|
|
30
|
-
"You are running Ruby #{RUBY_VERSION}. Please plan your upgrade. " \
|
|
31
|
-
"Pin to gem 'geminabox', '~> 2.2' if you cannot upgrade yet."
|
|
32
|
-
end
|
|
33
16
|
|
|
34
17
|
class Error < StandardError ; end
|
|
35
18
|
|
|
@@ -74,14 +57,6 @@ module Geminabox
|
|
|
74
57
|
:on_gem_received
|
|
75
58
|
)
|
|
76
59
|
|
|
77
|
-
attr_reader :build_legacy
|
|
78
|
-
|
|
79
|
-
def build_legacy=(value)
|
|
80
|
-
warn "Setting `Geminabox.build_legacy` is deprecated and will be removed in the future. Geminbox will always build modern indices"
|
|
81
|
-
|
|
82
|
-
@build_legacy = value
|
|
83
|
-
end
|
|
84
|
-
|
|
85
60
|
def set_defaults(defaults)
|
|
86
61
|
defaults.each do |method, default|
|
|
87
62
|
variable = "@#{method}"
|
|
@@ -101,7 +76,6 @@ module Geminabox
|
|
|
101
76
|
set_defaults(
|
|
102
77
|
data: File.join(File.dirname(__FILE__), *%w[.. data]),
|
|
103
78
|
public_folder: File.join(File.dirname(__FILE__), *%w[.. public]),
|
|
104
|
-
build_legacy: false,
|
|
105
79
|
incremental_updates: true,
|
|
106
80
|
views: File.join(File.dirname(__FILE__), *%w[.. views]),
|
|
107
81
|
allow_replace: false,
|
data/lib/geminabox_client.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: geminabox
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 3.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tom Lea
|
|
@@ -19,14 +19,14 @@ dependencies:
|
|
|
19
19
|
requirements:
|
|
20
20
|
- - "~>"
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: '
|
|
22
|
+
version: '4.0'
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
26
|
requirements:
|
|
27
27
|
- - "~>"
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: '
|
|
29
|
+
version: '4.0'
|
|
30
30
|
- !ruby/object:Gem::Dependency
|
|
31
31
|
name: builder
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -103,6 +103,20 @@ dependencies:
|
|
|
103
103
|
- - ">="
|
|
104
104
|
- !ruby/object:Gem::Version
|
|
105
105
|
version: '0'
|
|
106
|
+
- !ruby/object:Gem::Dependency
|
|
107
|
+
name: rubygems-generate_index
|
|
108
|
+
requirement: !ruby/object:Gem::Requirement
|
|
109
|
+
requirements:
|
|
110
|
+
- - "~>"
|
|
111
|
+
- !ruby/object:Gem::Version
|
|
112
|
+
version: '1.1'
|
|
113
|
+
type: :runtime
|
|
114
|
+
prerelease: false
|
|
115
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
116
|
+
requirements:
|
|
117
|
+
- - "~>"
|
|
118
|
+
- !ruby/object:Gem::Version
|
|
119
|
+
version: '1.1'
|
|
106
120
|
description: A private gem hosting and/or caching app, with client side gem push style
|
|
107
121
|
functionality. Web UI is provided.
|
|
108
122
|
email:
|
|
@@ -153,7 +167,7 @@ files:
|
|
|
153
167
|
- views/upload.erb
|
|
154
168
|
homepage: https://github.com/geminabox/geminabox
|
|
155
169
|
licenses:
|
|
156
|
-
- MIT
|
|
170
|
+
- MIT
|
|
157
171
|
metadata:
|
|
158
172
|
homepage_uri: https://github.com/geminabox/geminabox
|
|
159
173
|
source_code_uri: https://github.com/geminabox/geminabox
|
|
@@ -167,12 +181,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
167
181
|
requirements:
|
|
168
182
|
- - ">="
|
|
169
183
|
- !ruby/object:Gem::Version
|
|
170
|
-
version:
|
|
184
|
+
version: 3.0.0
|
|
171
185
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
172
186
|
requirements:
|
|
173
187
|
- - ">="
|
|
174
188
|
- !ruby/object:Gem::Version
|
|
175
|
-
version: 2.
|
|
189
|
+
version: 3.2.3
|
|
176
190
|
requirements: []
|
|
177
191
|
rubygems_version: 4.0.3
|
|
178
192
|
specification_version: 4
|