stickler 2.4.1 → 2.4.2
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/CONTRIBUTING.md +2 -0
- data/HISTORY.md +7 -0
- data/Rakefile +5 -3
- data/lib/stickler.rb +1 -1
- data/lib/stickler/client/mirror.rb +1 -1
- data/lib/stickler/gem_container.rb +1 -1
- data/lib/stickler/middleware/gemcutter.rb +4 -2
- data/lib/stickler/repository/remote.rb +2 -2
- data/tasks/default.rake +17 -51
- data/tasks/this.rb +12 -20
- data/test/repository/test_api_behavior.rb +18 -0
- metadata +38 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eca06c2dc9ce087e0c22c4d2a3651097d9672a24
|
4
|
+
data.tar.gz: e4e52e3a119a3bbe11c12edef99fbfcf4beff589
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd6d208cb1e233cf592d33f53a75a260823d8760208d8968475980994c00fca1705518026a46eac5f56ae33f3dab451c74af4feab3a2ad562f15fa585c0bd663
|
7
|
+
data.tar.gz: 3655d2b3817257f3c4e78517eef59ca55f239415395679fdbd02d4ac104f32fe0b0deff61b9078cf7f96e5baa89ea35de95f99183d204c5516cc36d4101be2ad
|
data/CONTRIBUTING.md
CHANGED
@@ -40,6 +40,8 @@ easiest way to contribute.
|
|
40
40
|
* [Philip Roberts](https://github.com/latentflip)
|
41
41
|
* [Alan Gardner](https://github.com/urfolomeus)
|
42
42
|
* [tiago.nobre](https://github.com/macwadu)
|
43
|
+
* [Michael Smith](https://github.com/MikaelSmith)
|
44
|
+
* [Shenil Dodhia](https://github.com/shenil)
|
43
45
|
|
44
46
|
[GitHub Account]: https://github.com/signup/free "GitHub Signup"
|
45
47
|
[GitHub Issues]: https://github.com/copiousfreetime/stickler/issues "Stickler Issues"
|
data/HISTORY.md
CHANGED
@@ -2,6 +2,13 @@ Stickler Changelog
|
|
2
2
|
==================
|
3
3
|
Jeremy Hinegardner <jeremy@copiousfreetime.org>
|
4
4
|
|
5
|
+
Version 2.4.2 - 2015-03-12
|
6
|
+
--------------------------
|
7
|
+
* Drop support for ruby 1.8
|
8
|
+
* Update dependencies
|
9
|
+
* Fix mirror errors when no gem-version supplied <https://github.com/copiousfreetime/stickler/issues/42>
|
10
|
+
* Fix yank/unank of non-ruby platform gems <https://github.com/copiousfreetime/stickler/issues/45>
|
11
|
+
|
5
12
|
Version 2.4.1 - 2014-06-11
|
6
13
|
--------------------------
|
7
14
|
* Fix daemonization bug <https://github.com/copiousfreetime/stickler/issues/38>
|
data/Rakefile
CHANGED
@@ -11,16 +11,18 @@ This.ruby_gemspec do |spec|
|
|
11
11
|
spec.add_runtime_dependency( 'sinatra' , '~> 1.4' )
|
12
12
|
spec.add_runtime_dependency( 'addressable', '~> 2.3' )
|
13
13
|
spec.add_runtime_dependency( 'excon' , '~> 0.37' )
|
14
|
-
spec.add_runtime_dependency( 'trollop' , '~> 2.
|
14
|
+
spec.add_runtime_dependency( 'trollop' , '~> 2.1' )
|
15
15
|
spec.add_runtime_dependency( 'logging' , '~> 1.8' )
|
16
16
|
|
17
17
|
# The Development Dependencies
|
18
|
-
spec.add_development_dependency( 'rake' , '~> 10.
|
18
|
+
spec.add_development_dependency( 'rake' , '~> 10.4' )
|
19
19
|
spec.add_development_dependency( 'rack-test' , '~> 0.6' )
|
20
20
|
spec.add_development_dependency( 'builder' , '~> 3.2' )
|
21
21
|
spec.add_development_dependency( 'minitest' , '~> 5.0' )
|
22
|
-
spec.add_development_dependency( 'rdoc' , '~> 4.
|
22
|
+
spec.add_development_dependency( 'rdoc' , '~> 4.2' )
|
23
23
|
spec.add_development_dependency( 'ronn' , '~> 0.7' )
|
24
|
+
spec.add_development_dependency( 'mustache' , '~> 0.99' )
|
25
|
+
spec.add_development_dependency( 'simplecov' , '~> 0.9' )
|
24
26
|
|
25
27
|
spec.required_rubygems_version = '~> 2.2'
|
26
28
|
|
data/lib/stickler.rb
CHANGED
@@ -34,7 +34,7 @@ _
|
|
34
34
|
gem_name = p.leftovers.shift
|
35
35
|
else
|
36
36
|
gemfile_lock = p.leftovers.shift
|
37
|
-
raise Trollop::CommandlineError, "#{
|
37
|
+
raise Trollop::CommandlineError, "#{gemfile_lock} must be readable" unless File.readable?( gemfile_lock )
|
38
38
|
end
|
39
39
|
end
|
40
40
|
opts[:gem_name] = gem_name
|
@@ -40,7 +40,8 @@ module Stickler::Middleware
|
|
40
40
|
# gemcutter unyank
|
41
41
|
post '/api/v1/gems/unyank' do
|
42
42
|
begin
|
43
|
-
|
43
|
+
platform = params.fetch("platform", "ruby")
|
44
|
+
spec = Stickler::SpecLite.new( params[:spec_name], params[:version], platform )
|
44
45
|
@repo.unyank( spec )
|
45
46
|
logger.info( "Unyanked #{spec.full_name}" )
|
46
47
|
return spec.to_s
|
@@ -52,7 +53,8 @@ module Stickler::Middleware
|
|
52
53
|
|
53
54
|
# gemcutter yank
|
54
55
|
delete '/api/v1/gems/yank' do
|
55
|
-
|
56
|
+
platform = params.fetch("platform", "ruby")
|
57
|
+
spec = Stickler::SpecLite.new( params[:gem_name], params[:version], platform )
|
56
58
|
if @repo.yank( spec ) then
|
57
59
|
logger.info( "Yanked #{spec.full_name}" )
|
58
60
|
return "Yanked #{spec.full_name}"
|
@@ -93,7 +93,7 @@ module ::Stickler::Repository
|
|
93
93
|
#
|
94
94
|
def yank( spec )
|
95
95
|
return nil unless remote_gem_file_exist?( spec )
|
96
|
-
query = { :gem_name => spec.name, :version => spec.version.to_s }
|
96
|
+
query = { :gem_name => spec.name, :version => spec.version.to_s, :platform => spec.platform.to_s }
|
97
97
|
resource_request( yank_resource, :query => query )
|
98
98
|
return full_uri_to_gem( spec )
|
99
99
|
rescue Excon::Errors::Error => e
|
@@ -105,7 +105,7 @@ module ::Stickler::Repository
|
|
105
105
|
#
|
106
106
|
def unyank( spec )
|
107
107
|
if remote_gem_file_exist?( spec ) && search_for( spec ).empty? then
|
108
|
-
query = { :spec_name => spec.name, :version => spec.version.to_s }
|
108
|
+
query = { :spec_name => spec.name, :version => spec.version.to_s, :platform => spec.platform.to_s }
|
109
109
|
resource_request( unyank_resource, :query => query )
|
110
110
|
return true
|
111
111
|
else
|
data/tasks/default.rake
CHANGED
@@ -10,21 +10,12 @@ namespace :develop do
|
|
10
10
|
|
11
11
|
# Install all the development and runtime dependencies of this gem using the
|
12
12
|
# gemspec.
|
13
|
-
task :default do
|
13
|
+
task :default => 'Gemfile' do
|
14
14
|
require 'rubygems/dependency_installer'
|
15
15
|
installer = ::Gem::DependencyInstaller.new
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
puts "Installing gem depedencies needed for development"
|
20
|
-
This.platform_gemspec.dependencies.each do |dep|
|
21
|
-
if dep.matching_specs.empty? then
|
22
|
-
puts "Installing : #{dep}"
|
23
|
-
installer.install dep
|
24
|
-
else
|
25
|
-
puts "Skipping : #{dep} -> already installed #{dep.matching_specs.first.full_name}"
|
26
|
-
end
|
27
|
-
end
|
16
|
+
puts "Installing bundler..."
|
17
|
+
installer.install 'bundler'
|
18
|
+
sh 'bundle install'
|
28
19
|
puts "\n\nNow run 'rake test'"
|
29
20
|
end
|
30
21
|
|
@@ -37,16 +28,8 @@ namespace :develop do
|
|
37
28
|
f.puts 'gemspec'
|
38
29
|
end
|
39
30
|
end
|
40
|
-
|
41
|
-
desc "Create a bundler Gemfile"
|
42
|
-
task :using_bundler => 'Gemfile' do
|
43
|
-
puts "Now you can 'bundle'"
|
44
|
-
end
|
45
|
-
|
46
|
-
# Gemfiles are build artifacts
|
47
|
-
CLOBBER << FileList['Gemfile*']
|
48
31
|
end
|
49
|
-
desc "
|
32
|
+
desc "Bootstrap development"
|
50
33
|
task :develop => "develop:default"
|
51
34
|
|
52
35
|
#------------------------------------------------------------------------------
|
@@ -90,31 +73,16 @@ end
|
|
90
73
|
# Coverage - optional code coverage, rcov for 1.8 and simplecov for 1.9, so
|
91
74
|
# for the moment only rcov is listed.
|
92
75
|
#------------------------------------------------------------------------------
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
t.verbose = true
|
100
|
-
t.rcov_opts << "-x ^/" # remove all the global files
|
101
|
-
t.rcov_opts << "--sort coverage" # so we see the worst files at the top
|
102
|
-
end
|
103
|
-
rescue LoadError
|
104
|
-
This.task_warning( 'rcov' )
|
105
|
-
end
|
106
|
-
else
|
107
|
-
begin
|
108
|
-
require 'simplecov'
|
109
|
-
desc 'Run tests with code coverage'
|
110
|
-
task :coverage do
|
111
|
-
ENV['COVERAGE'] = 'true'
|
112
|
-
Rake::Task[:test].execute
|
113
|
-
end
|
114
|
-
CLOBBER << FileList["coverage"]
|
115
|
-
rescue LoadError
|
116
|
-
This.task_warning( 'simplecov' )
|
76
|
+
begin
|
77
|
+
require 'simplecov'
|
78
|
+
desc 'Run tests with code coverage'
|
79
|
+
task :coverage do
|
80
|
+
ENV['COVERAGE'] = 'true'
|
81
|
+
Rake::Task[:test].execute
|
117
82
|
end
|
83
|
+
CLOBBER << 'coverage' if File.directory?( 'coverage' )
|
84
|
+
rescue LoadError
|
85
|
+
This.task_warning( 'simplecov' )
|
118
86
|
end
|
119
87
|
|
120
88
|
#------------------------------------------------------------------------------
|
@@ -179,9 +147,10 @@ namespace :fixme do
|
|
179
147
|
end
|
180
148
|
|
181
149
|
def outdated_fixme_files
|
182
|
-
local_fixme_files.
|
150
|
+
local_fixme_files.select do |local|
|
183
151
|
upstream = fixme_project_path( local )
|
184
|
-
|
152
|
+
upstream.exist? &&
|
153
|
+
( Digest::SHA256.file( local ) != Digest::SHA256.file( upstream ) )
|
185
154
|
end
|
186
155
|
end
|
187
156
|
|
@@ -231,9 +200,6 @@ task :gemspec do
|
|
231
200
|
end
|
232
201
|
end
|
233
202
|
|
234
|
-
# the gemspec is also a dev artifact and should not be kept around.
|
235
|
-
CLOBBER << This.gemspec_file.to_s
|
236
|
-
|
237
203
|
# .rbc files from ruby 2.0
|
238
204
|
CLOBBER << FileList["**/*.rbc"]
|
239
205
|
|
data/tasks/this.rb
CHANGED
@@ -13,7 +13,7 @@ class ThisProject
|
|
13
13
|
attr_accessor :email
|
14
14
|
|
15
15
|
# The homepage of this project
|
16
|
-
attr_accessor :homepage
|
16
|
+
attr_accessor :homepage
|
17
17
|
|
18
18
|
# The regex of files to exclude from the manifest
|
19
19
|
attr_accessor :exclude_from_manifest
|
@@ -25,7 +25,11 @@ class ThisProject
|
|
25
25
|
#
|
26
26
|
# Yields self
|
27
27
|
def initialize(&block)
|
28
|
-
@exclude_from_manifest =
|
28
|
+
@exclude_from_manifest = Regexp.union(/\.(git|DS_Store)/,
|
29
|
+
/^(doc|coverage|pkg|tmp|Gemfile(\.lock)?)/,
|
30
|
+
/^[^\/]+\.gemspec/,
|
31
|
+
/\.(swp|jar|bundle|so|rvmrc|travis.yml)$/,
|
32
|
+
/~$/)
|
29
33
|
@gemspecs = Hash.new
|
30
34
|
yield self if block_given?
|
31
35
|
end
|
@@ -119,7 +123,7 @@ class ThisProject
|
|
119
123
|
|
120
124
|
# Internal: Returns the gemspace associated with the current ruby platform
|
121
125
|
def platform_gemspec
|
122
|
-
gemspecs
|
126
|
+
gemspecs.fetch(platform) { This.ruby_gemspec }
|
123
127
|
end
|
124
128
|
|
125
129
|
def core_gemspec
|
@@ -141,6 +145,8 @@ class ThisProject
|
|
141
145
|
spec.extra_rdoc_files += spec.files.grep(/(txt|rdoc|md)$/)
|
142
146
|
spec.rdoc_options = [ "--main" , 'README.md',
|
143
147
|
"--markup", "tomdoc" ]
|
148
|
+
|
149
|
+
spec.required_ruby_version = '>= 1.9.3'
|
144
150
|
end
|
145
151
|
end
|
146
152
|
|
@@ -167,20 +173,6 @@ class ThisProject
|
|
167
173
|
return spec
|
168
174
|
end
|
169
175
|
|
170
|
-
# Internal: Set the recovery gem development dependency
|
171
|
-
#
|
172
|
-
# These are dynamically set since they cannot be hard coded as there is
|
173
|
-
# no way to ship them correctly in the gemspec
|
174
|
-
#
|
175
|
-
# Returns nothing.
|
176
|
-
def set_coverage_gem
|
177
|
-
if RUBY_VERSION < "1.9.0"
|
178
|
-
platform_gemspec.add_development_dependency( 'rcov', '~> 1.0.0' )
|
179
|
-
else
|
180
|
-
platform_gemspec.add_development_dependency( 'simplecov', '~> 0.8.2' )
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
176
|
# Internal: Return the platform of ThisProject at the current moment in time.
|
185
177
|
def platform
|
186
178
|
(RUBY_PLATFORM == "java") ? 'java' : Gem::Platform::RUBY
|
@@ -190,13 +182,13 @@ class ThisProject
|
|
190
182
|
def description_section
|
191
183
|
section_of( 'README.md', 'DESCRIPTION')
|
192
184
|
end
|
193
|
-
|
194
|
-
|
185
|
+
|
186
|
+
# Internal: Return the summary text from the README
|
195
187
|
def summary
|
196
188
|
description_section.first
|
197
189
|
end
|
198
190
|
|
199
|
-
# Internal: Return the full description text from the
|
191
|
+
# Internal: Return the full description text from the README
|
200
192
|
def description
|
201
193
|
description_section.join(" ").tr("\n", ' ').gsub(/[{}]/,'').gsub(/\[[^\]]+\]/,'') # strip rdoc
|
202
194
|
end
|
@@ -8,8 +8,11 @@ module Stickler
|
|
8
8
|
def setup
|
9
9
|
super
|
10
10
|
@foo_gem_local_path = File.join( gems_dir, "foo-1.0.0.gem" )
|
11
|
+
@baz_gem_local_path = File.join( gems_dir, "baz-3.1.4-java.gem" )
|
11
12
|
@foo_spec = Stickler::SpecLite.new( 'foo', '1.0.0' )
|
13
|
+
@baz_java_spec = Stickler::SpecLite.new( 'baz', '3.1.4', 'java')
|
12
14
|
assert File.readable?( @foo_gem_local_path ), "#{@foo_gem_local_path} is missing"
|
15
|
+
assert File.readable?( @baz_gem_local_path ), "#{@baz_gem_local_path} is missing"
|
13
16
|
@foo_digest = Digest::SHA1.hexdigest( IO.read( @foo_gem_local_path ) )
|
14
17
|
@missing_spec = Stickler::SpecLite.new( "does_not_exist", "0.1.0" )
|
15
18
|
end
|
@@ -83,6 +86,13 @@ module Stickler
|
|
83
86
|
assert_includes [ ::URI, ::Addressable::URI ], @response_uri.class
|
84
87
|
end
|
85
88
|
|
89
|
+
def test_yank_works_with_nondefault_platform
|
90
|
+
assert_empty repo.search_for( @baz_java_spec )
|
91
|
+
repo.push( @baz_gem_local_path )
|
92
|
+
@response_uri = repo.yank( @baz_java_spec )
|
93
|
+
assert_includes [ ::URI, ::Addressable::URI ], @response_uri.class
|
94
|
+
end
|
95
|
+
|
86
96
|
def test_yank_returns_nil_for_non_existent_gem
|
87
97
|
assert_nil repo.yank( @missing_spec )
|
88
98
|
end
|
@@ -120,6 +130,14 @@ module Stickler
|
|
120
130
|
assert_nil repo.unyank( non_existing_gem )
|
121
131
|
end
|
122
132
|
|
133
|
+
def test_unyank_works_with_nondefault_platform
|
134
|
+
assert_empty repo.search_for( @baz_java_spec )
|
135
|
+
repo.push( @baz_gem_local_path )
|
136
|
+
repo.yank( @baz_java_spec )
|
137
|
+
assert_empty repo.search_for( @baz_java_spec )
|
138
|
+
repo.unyank( @baz_java_spec )
|
139
|
+
assert_equal 1, repo.search_for( @baz_java_spec ).size
|
140
|
+
end
|
123
141
|
|
124
142
|
# Do we even care about this?
|
125
143
|
def test_unyank_returns_nil_for_not_yet_yanked_gem
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stickler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Hinegardner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '2.
|
61
|
+
version: '2.1'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '2.
|
68
|
+
version: '2.1'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: logging
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '10.
|
89
|
+
version: '10.4'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '10.
|
96
|
+
version: '10.4'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rack-test
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,14 +142,14 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: '4.
|
145
|
+
version: '4.2'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: '4.
|
152
|
+
version: '4.2'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: ronn
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,6 +164,34 @@ dependencies:
|
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0.7'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: mustache
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0.99'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0.99'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: simplecov
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0.9'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0.9'
|
167
195
|
description: 'Stickler is a tool to organize and maintain an internal gem repository.
|
168
196
|
Primarily, you would want to use Stickler if: 1. You have proprietary gems that
|
169
197
|
you want to have available via a gem server so you may `gem install` them. 2.
|
@@ -297,7 +325,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
297
325
|
requirements:
|
298
326
|
- - ">="
|
299
327
|
- !ruby/object:Gem::Version
|
300
|
-
version:
|
328
|
+
version: 1.9.3
|
301
329
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
302
330
|
requirements:
|
303
331
|
- - "~>"
|
@@ -305,7 +333,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
305
333
|
version: '2.2'
|
306
334
|
requirements: []
|
307
335
|
rubyforge_project:
|
308
|
-
rubygems_version: 2.
|
336
|
+
rubygems_version: 2.4.6
|
309
337
|
signing_key:
|
310
338
|
specification_version: 4
|
311
339
|
summary: 'Stickler is a tool to organize and maintain an internal gem repository.
|