stickler 2.0.0a → 2.0.1
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.
- data/.bnsignore +14 -0
- data/.gitignore +17 -0
- data/HISTORY.asciidoc +20 -0
- data/README.asciidoc +126 -0
- data/Rakefile +22 -3
- data/bin/stickler +50 -0
- data/bin/stickler-passenger-config +112 -0
- data/bin/stickler-server +109 -0
- data/examples/config.ru +6 -3
- data/examples/gemcutter_repo.ru +2 -0
- data/examples/index_repo.ru +2 -0
- data/examples/local_repo.ru +6 -3
- data/examples/mirror_repo.ru +2 -0
- data/examples/not_found.ru +2 -0
- data/lib/stickler.rb +12 -0
- data/lib/stickler/client.rb +47 -0
- data/lib/stickler/client/config.rb +35 -0
- data/lib/stickler/client/config_file.rb +58 -0
- data/lib/stickler/client/mirror.rb +61 -0
- data/lib/stickler/client/push.rb +50 -0
- data/lib/stickler/client/yank.rb +51 -0
- data/lib/stickler/logable.rb +35 -0
- data/lib/stickler/middleware/gemcutter.rb +5 -0
- data/lib/stickler/middleware/helpers.rb +32 -0
- data/lib/stickler/middleware/index.rb +30 -4
- data/lib/stickler/middleware/mirror.rb +8 -3
- data/lib/stickler/middleware/not_found.rb +4 -2
- data/lib/stickler/paths.rb +53 -0
- data/lib/stickler/repository/local.rb +12 -12
- data/lib/stickler/repository/mirror.rb +13 -6
- data/lib/stickler/repository/null.rb +1 -0
- data/lib/stickler/repository/remote.rb +10 -4
- data/lib/stickler/repository/rubygems_authenticator.rb +32 -0
- data/lib/stickler/server.rb +34 -0
- data/lib/stickler/server/public/css/blueprint/LICENSE +22 -0
- data/lib/stickler/server/public/css/blueprint/ie.css +35 -0
- data/lib/stickler/server/public/css/blueprint/screen.css +266 -0
- data/lib/stickler/server/public/css/style.css +19 -0
- data/lib/stickler/server/public/images/apple-touch-icon.png +0 -0
- data/lib/stickler/server/public/images/favicon.ico +0 -0
- data/lib/stickler/server/public/js/modernizr-1.5.min.js +28 -0
- data/lib/stickler/server/views/index.erb +35 -0
- data/lib/stickler/server/views/layout.erb +42 -0
- data/lib/stickler/spec_lite.rb +16 -6
- data/lib/stickler/version.rb +1 -1
- data/man/asciidoc.conf +25 -0
- data/man/stickler-passenger-config.asciidoc +74 -0
- data/man/stickler-server.asciidoc +87 -0
- data/man/stickler.asciidoc +148 -0
- data/spec/middleware/common_gem_server_helpers.rb +4 -2
- data/spec/middleware/index_spec.rb +3 -3
- data/spec/middleware/legacy_gem_server_behavior.rb +0 -2
- data/spec/middleware/local_spec.rb +3 -3
- data/spec/middleware/modern_gem_server_behavior.rb +2 -0
- data/spec/paths_spec.rb +13 -0
- data/spec/spec_lite_spec.rb +14 -0
- data/tasks/man.rake +19 -0
- metadata +183 -56
- data/HISTORY.rdoc +0 -12
- data/README.rdoc +0 -88
- data/lib/stickler/web.rb +0 -19
- data/stickler.gemspec +0 -60
- data/views/index.erb +0 -19
- data/views/layout.erb +0 -39
data/man/asciidoc.conf
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
## linkstick: macro
|
2
|
+
#
|
3
|
+
# Usage: linkstick:command[manpage-section]
|
4
|
+
#
|
5
|
+
# Modelled after the linkgit macro
|
6
|
+
#
|
7
|
+
# {0} is the manpage section, {target} is the command
|
8
|
+
#
|
9
|
+
##
|
10
|
+
|
11
|
+
[macros]
|
12
|
+
(?su)[\\]?(?P<name>linkstick):(?P<target>\S*?)\[(?P<attrlist>.*?)\]=
|
13
|
+
|
14
|
+
ifdef::backend-docbook[]
|
15
|
+
[linkstick-inlinemacro]
|
16
|
+
{0%{target}}
|
17
|
+
{0#<citerefentry>}
|
18
|
+
{0#<refentrytitle>{target}</refentrytitle><manvolnum>{0}</manvolnum>}
|
19
|
+
{0#</citerefentry>}
|
20
|
+
endif::backend-docbook[]
|
21
|
+
|
22
|
+
ifdef::backend-xhtml11[]
|
23
|
+
[linkstick-inlinemacro]
|
24
|
+
<strong><a href="{target}.html">{target}{0?({0})}</a></strong>
|
25
|
+
endif::backend-xhtml11[]
|
@@ -0,0 +1,74 @@
|
|
1
|
+
STICKLER-PASSENGER-CONFIG(1)
|
2
|
+
============================
|
3
|
+
|
4
|
+
NAME
|
5
|
+
----
|
6
|
+
stickler-passenger-config - output a Phusion Passenger config for stickler
|
7
|
+
|
8
|
+
|
9
|
+
SYNOPSIS
|
10
|
+
--------
|
11
|
+
*stickler-passenger-config* ['--help'] ['COMMAND'] ['COMMAND_OPTIONS'] /path/to/stickler/root
|
12
|
+
|
13
|
+
|
14
|
+
DESCRIPTION
|
15
|
+
-----------
|
16
|
+
*stickler-passenger-config* will create a stickler web application directory,
|
17
|
+
including the config.ru file for use with link:http://modrails.com/[Phusion
|
18
|
+
Passenger]. It will then output the stanza to be incorporated into an
|
19
|
+
link:http://httpd.apache.org/[Apache] or link:http://nginx.net[Nginx]
|
20
|
+
configuration.
|
21
|
+
|
22
|
+
|
23
|
+
COMMANDS
|
24
|
+
--------
|
25
|
+
[horizontal]
|
26
|
+
*apache2*:: Output an Apache config.
|
27
|
+
|
28
|
+
*nginx*:: Output an Nginx config.
|
29
|
+
|
30
|
+
|
31
|
+
OPTIONS
|
32
|
+
-------
|
33
|
+
*-h, --help*::
|
34
|
+
Show the help message
|
35
|
+
|
36
|
+
*-v, --version*::
|
37
|
+
Output the version.
|
38
|
+
|
39
|
+
|
40
|
+
EXAMPLES
|
41
|
+
--------
|
42
|
+
Output a passenger config for use with apache.
|
43
|
+
|
44
|
+
---------------------------------------------------
|
45
|
+
stickler-passenger-config apache2 /var/lib/stickler
|
46
|
+
---------------------------------------------------
|
47
|
+
|
48
|
+
|
49
|
+
Output a pasenger a config to be integrated with an nginx config.
|
50
|
+
-------------------------------------------------
|
51
|
+
stickler-passenger-config nginx /var/lib/stickler
|
52
|
+
-------------------------------------------------
|
53
|
+
|
54
|
+
|
55
|
+
SEE ALSO
|
56
|
+
--------
|
57
|
+
linkstick:stickler[1], linkstick:stickler-server[1]
|
58
|
+
|
59
|
+
|
60
|
+
AUTHOR
|
61
|
+
------
|
62
|
+
Written by Jeremy Hinegardner <jeremy@hinegardner.org>
|
63
|
+
|
64
|
+
|
65
|
+
RESOURCES
|
66
|
+
---------
|
67
|
+
GitHub project: http://www.github.com/copiousfreetime/stickler
|
68
|
+
|
69
|
+
|
70
|
+
BUGS
|
71
|
+
----
|
72
|
+
Please report bugs to the github issue tracker
|
73
|
+
http://github.com/copiousfreetime/stickler/issues
|
74
|
+
|
@@ -0,0 +1,87 @@
|
|
1
|
+
STICKLER-SERVER(1)
|
2
|
+
==================
|
3
|
+
|
4
|
+
NAME
|
5
|
+
----
|
6
|
+
stickler-server - start and stop the stickler server process
|
7
|
+
|
8
|
+
|
9
|
+
SYNOPSIS
|
10
|
+
--------
|
11
|
+
*stickler-server* ['--help'] ['COMMAND'] ['COMMAND_OPTIONS'] /path/to/stickler/root
|
12
|
+
|
13
|
+
|
14
|
+
DESCRIPTION
|
15
|
+
-----------
|
16
|
+
stickler-server is the daemon process that houses the repositories of
|
17
|
+
proprietary gems and/or mirrors of third party gems.
|
18
|
+
|
19
|
+
|
20
|
+
COMMANDS
|
21
|
+
--------
|
22
|
+
[horizontal]
|
23
|
+
*start*:: Start the stickler server process
|
24
|
+
|
25
|
+
*stop*:: Stop the stickler server process
|
26
|
+
|
27
|
+
|
28
|
+
OPTIONS
|
29
|
+
-------
|
30
|
+
*-d, --daemonize*::
|
31
|
+
Daemonize the server
|
32
|
+
|
33
|
+
*--help*::
|
34
|
+
Show the help message
|
35
|
+
|
36
|
+
*-h, --host*='HOST'::
|
37
|
+
The host address to bind to (default: 0.0.0.0)
|
38
|
+
|
39
|
+
*-o, --port*='PORT'::
|
40
|
+
The port to bind to (default: 6789)
|
41
|
+
|
42
|
+
*-p, --pid*='PID_FILE'::
|
43
|
+
Path to wriate a pid file to after daemonizing
|
44
|
+
|
45
|
+
*-s, --server*='SERVER'::
|
46
|
+
The rack handler to use: thin, mongrel, webrick, etc.
|
47
|
+
|
48
|
+
*-v, --version*::
|
49
|
+
Output the version.
|
50
|
+
|
51
|
+
|
52
|
+
EXAMPLES
|
53
|
+
--------
|
54
|
+
Start the server, daemonized, using /var/lib/stickler as the root directory of
|
55
|
+
all the repositories.
|
56
|
+
|
57
|
+
---------------------------------------------------
|
58
|
+
stickler-server start --daemonize /var/lib/stickler
|
59
|
+
---------------------------------------------------
|
60
|
+
|
61
|
+
Stop the server that is using /var/lib/stickler as its root directory.
|
62
|
+
|
63
|
+
--------------------------------------
|
64
|
+
stickler-server stop /var/lib/stickler
|
65
|
+
--------------------------------------
|
66
|
+
|
67
|
+
|
68
|
+
SEE ALSO
|
69
|
+
--------
|
70
|
+
linkstick:stickler[1], linkstick:stickler-passenger-config[1]
|
71
|
+
|
72
|
+
|
73
|
+
AUTHOR
|
74
|
+
------
|
75
|
+
Written by Jeremy Hinegardner <jeremy@hinegardner.org>
|
76
|
+
|
77
|
+
|
78
|
+
RESOURCES
|
79
|
+
---------
|
80
|
+
GitHub project: http://www.github.com/copiousfreetime/stickler
|
81
|
+
|
82
|
+
|
83
|
+
BUGS
|
84
|
+
----
|
85
|
+
Please report bugs to the github issue tracker
|
86
|
+
http://github.com/copiousfreetime/stickler/issues
|
87
|
+
|
@@ -0,0 +1,148 @@
|
|
1
|
+
STICKLER(1)
|
2
|
+
===========
|
3
|
+
|
4
|
+
NAME
|
5
|
+
----
|
6
|
+
stickler - command line program to interact with a stickler-server
|
7
|
+
|
8
|
+
|
9
|
+
SYNOPSIS
|
10
|
+
--------
|
11
|
+
*stickler* ['--help'] ['COMMAND'] ['COMMAND_OPTIONS'] ['gemfile(s)']
|
12
|
+
|
13
|
+
|
14
|
+
DESCRIPTION
|
15
|
+
-----------
|
16
|
+
Stickler is a tool to organize and maintain an internal gem repository of
|
17
|
+
proprietary gems and/or a mirror of third party gems.
|
18
|
+
|
19
|
+
The linkstick:stickler[1] command interacts with an instance of
|
20
|
+
linkstick:stickler-server[1] to control the publishing and mirroring of ruby
|
21
|
+
gems.
|
22
|
+
|
23
|
+
|
24
|
+
COMMANDS
|
25
|
+
--------
|
26
|
+
[horizontal]
|
27
|
+
*push*:: Push one or more gems to a gemserver. This works the same as `gem
|
28
|
+
push` although there is no authorization mechanism.
|
29
|
+
|
30
|
+
*yank*:: Remove a gem from the gemserver's index. It will still be available
|
31
|
+
from direct download. This works the same as `gem yank`.
|
32
|
+
|
33
|
+
*mirror*:: Pull a specific version of a gem from an upstream gem server and
|
34
|
+
store it in a linkstick:stickler-server[1]
|
35
|
+
|
36
|
+
*config*:: Access or update the stickler client configuration.
|
37
|
+
|
38
|
+
|
39
|
+
OPTIONS
|
40
|
+
-------
|
41
|
+
These are the options for all commands. Not all options apply to all commands.
|
42
|
+
|
43
|
+
*-a, --add*::
|
44
|
+
Add the `--server` or `--upstream` items to the config file when using the
|
45
|
+
`config` command.
|
46
|
+
|
47
|
+
*-d, --debug*::
|
48
|
+
Output debug information
|
49
|
+
|
50
|
+
*-g, --gem-version*='VERSION'::
|
51
|
+
The version of the gem to yank from `--server` or to mirror from
|
52
|
+
`--upstream`.
|
53
|
+
|
54
|
+
*-h, --help*::
|
55
|
+
Show the help message
|
56
|
+
|
57
|
+
*-l, --list*::
|
58
|
+
Display the current configuration when using the `config` command.
|
59
|
+
|
60
|
+
*-p, --platform*='PLATFORM'::
|
61
|
+
The platform of the gem to yank from `--server` or to mirror from
|
62
|
+
`--upstream` (e.g. ruby, java, mswin32)
|
63
|
+
|
64
|
+
*-s, --server*='SERVER'::
|
65
|
+
The gem server or linkstick:stickler-server[1] URL. This is used by all the commands.
|
66
|
+
|
67
|
+
*-u, --upstream*='SERVER'::
|
68
|
+
The upstream server from which to mirror a gem when using the `mirror` command.
|
69
|
+
|
70
|
+
*-v, --version*::
|
71
|
+
Output the version.
|
72
|
+
|
73
|
+
|
74
|
+
CONFIGURATION
|
75
|
+
-------------
|
76
|
+
Stickler uses the `.gem/stickler` file to hold its configuration. It is a yaml
|
77
|
+
file and Currently there are two options. These are altered using the `stickler
|
78
|
+
config` command.
|
79
|
+
|
80
|
+
[horizontal]
|
81
|
+
*upstream*:: The default upstream server from which to mirror gems.
|
82
|
+
*server*:: The default linkstick:stickler-server[1] to interact with.
|
83
|
+
|
84
|
+
An example config file
|
85
|
+
|
86
|
+
------------------------------------
|
87
|
+
---
|
88
|
+
:server: http://stickler.example.com
|
89
|
+
:upstream: https://rubygems.org
|
90
|
+
------------------------------------
|
91
|
+
|
92
|
+
|
93
|
+
EXAMPLES
|
94
|
+
--------
|
95
|
+
Push the local `my_gem-1.0.0.gem` file to the linkstick:stickler-server[1] at
|
96
|
+
*stickler.example.com*
|
97
|
+
|
98
|
+
----------------------------------------------------------------------
|
99
|
+
stickler push ./my_gem-1.0.0.gem --server http://stickler.example.com/
|
100
|
+
----------------------------------------------------------------------
|
101
|
+
|
102
|
+
Push all the gems in the `pkg` directory to the linkstick:stickler-server[1] at
|
103
|
+
*stickler.example.com*
|
104
|
+
|
105
|
+
----------------------------------------------------------------------
|
106
|
+
stickler push --server http://stickler.example.com/ ./pkg/*.gem
|
107
|
+
----------------------------------------------------------------------
|
108
|
+
|
109
|
+
Yank vesion 1.0.0 of my_gem from the gem index on sticker.example.com
|
110
|
+
|
111
|
+
--------------------------------------------------------------------------
|
112
|
+
stickler yank my_gem --version 1.0.0 --server http://stickler.example.com/
|
113
|
+
--------------------------------------------------------------------------
|
114
|
+
|
115
|
+
Take the +third_party+ gem, version +1.4.2+ that is on *rubygems.org* and mirror it
|
116
|
+
on *stickler.example.com*
|
117
|
+
|
118
|
+
-----------------------------------------------------------------------------------------------------------------
|
119
|
+
stickler mirror third_party --version 0.4.2 --upstream http://rubygems.org/ --server http://stickler.example.com/
|
120
|
+
stickler mirror --help
|
121
|
+
-----------------------------------------------------------------------------------------------------------------
|
122
|
+
|
123
|
+
Set the `server` and `upstream` configration values in the `.gem/stickler` file.
|
124
|
+
|
125
|
+
------------------------------------------------------------------------------------------
|
126
|
+
stickler config --add --server http://stickler.example.com --upstream http://rubygems.org/
|
127
|
+
------------------------------------------------------------------------------------------
|
128
|
+
|
129
|
+
|
130
|
+
SEE ALSO
|
131
|
+
--------
|
132
|
+
linkstick:stickler-server[1], linkstick:stickler-passenger-config[1]
|
133
|
+
|
134
|
+
|
135
|
+
AUTHOR
|
136
|
+
------
|
137
|
+
Written by Jeremy Hinegardner <jeremy@hinegardner.org>
|
138
|
+
|
139
|
+
|
140
|
+
RESOURCES
|
141
|
+
---------
|
142
|
+
GitHub project: http://www.github.com/copiousfreetime/stickler
|
143
|
+
|
144
|
+
|
145
|
+
BUGS
|
146
|
+
----
|
147
|
+
Please report bugs to the github issue tracker
|
148
|
+
http://github.com/copiousfreetime/stickler/issues
|
@@ -4,9 +4,9 @@ require 'rubygems/server'
|
|
4
4
|
shared_examples_for "common gem server before after" do
|
5
5
|
|
6
6
|
before do
|
7
|
-
@
|
7
|
+
@webrick_spec_dir = File.join( @webrick_gem_dir, "specifications" )
|
8
8
|
|
9
|
-
@webrick = ::Gem::Server.new(@
|
9
|
+
@webrick = ::Gem::Server.new(@webrick_gem_dir,4567,false)
|
10
10
|
@underlying_server = @webrick.instance_variable_get("@server")
|
11
11
|
@webrick_thread = Thread.new( @webrick ) do |webrick|
|
12
12
|
webrick.run
|
@@ -58,6 +58,8 @@ shared_examples_for "common gem server before after" do
|
|
58
58
|
:body => last_response.body
|
59
59
|
}.should == verify_webrick
|
60
60
|
else
|
61
|
+
puts "webrick: #{verify_webrick[:body]}"
|
62
|
+
#puts "sinatra: #{last_response.body}"
|
61
63
|
last_response.status.should == verify_webrick[:status]
|
62
64
|
end
|
63
65
|
|
@@ -14,12 +14,12 @@ describe Stickler::Middleware::Index do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
before do
|
17
|
-
@
|
18
|
-
FileUtils.mkdir_p( File.join( @
|
17
|
+
@webrick_gem_dir = File.expand_path( File.join( File.dirname( __FILE__ ), "tmp" ) )
|
18
|
+
FileUtils.mkdir_p( File.join( @webrick_gem_dir , "specifications" ))
|
19
19
|
end
|
20
20
|
|
21
21
|
after do
|
22
|
-
FileUtils.rm_rf( @
|
22
|
+
FileUtils.rm_rf( @webrick_gem_dir )
|
23
23
|
end
|
24
24
|
|
25
25
|
it_should_behave_like "modern gem server indexes"
|
@@ -16,9 +16,7 @@ shared_examples_for "legacy gem server indexes" do
|
|
16
16
|
"/quick/index.rz",
|
17
17
|
"/quick/latest_index",
|
18
18
|
"/quick/latest_index.rz",
|
19
|
-
"/quick/Marshal.#{Gem.marshal_version}/foo-1.0.0.gemspec.rz",
|
20
19
|
"/quick/foo-1.0.0.gemspec.rz",
|
21
|
-
"/quick/Marshal.#{Gem.marshal_version}/bar-1.0.0.gemspec.rz",
|
22
20
|
"/quick/bar-1.0.0.gemspec.rz",
|
23
21
|
"/quick/does-not-exist-1.2.0.gemspec.rz"
|
24
22
|
]
|
@@ -7,16 +7,16 @@ require 'stickler/middleware/compression'
|
|
7
7
|
|
8
8
|
describe ::Stickler::Middleware::Local do
|
9
9
|
def app
|
10
|
-
|
10
|
+
repo_root = @sinatra_gem_dir
|
11
11
|
::Rack::Builder.new do
|
12
12
|
use ::Stickler::Middleware::Compression
|
13
|
-
use ::Stickler::Middleware::Local, :repo_root =>
|
13
|
+
use ::Stickler::Middleware::Local, :repo_root => repo_root
|
14
14
|
run ::Sinatra::Base
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
before do
|
19
|
-
@
|
19
|
+
@sinatra_gem_dir = @webrick_gem_dir = @gem_root
|
20
20
|
end
|
21
21
|
|
22
22
|
it_should_behave_like "modern gem server indexes"
|
@@ -10,6 +10,8 @@ shared_examples_for "modern gem server indexes" do
|
|
10
10
|
"/specs.#{Gem.marshal_version}.gz",
|
11
11
|
"/latest_specs.#{Gem.marshal_version}",
|
12
12
|
"/latest_specs.#{Gem.marshal_version}.gz",
|
13
|
+
"/quick/Marshal.#{Gem.marshal_version}/foo-1.0.0.gemspec.rz",
|
14
|
+
"/quick/Marshal.#{Gem.marshal_version}/bar-1.0.0.gemspec.rz",
|
13
15
|
]
|
14
16
|
|
15
17
|
MODERN_URLS.each do |url|
|
data/spec/paths_spec.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.expand_path( File.join( File.dirname( __FILE__ ), "spec_helper.rb" ) )
|
2
|
+
|
3
|
+
require 'stickler/paths'
|
4
|
+
|
5
|
+
describe Stickler::Paths do
|
6
|
+
it "can access the root dir of the project" do
|
7
|
+
Stickler::Paths.root_dir.should == File.expand_path( File.join( File.dirname( __FILE__ ), ".." ) ) + ::File::SEPARATOR
|
8
|
+
end
|
9
|
+
|
10
|
+
it "can access the lib path of the project" do
|
11
|
+
Stickler::Paths.lib_path.should == File.expand_path( File.join( File.dirname( __FILE__ ), "..", "lib" ) ) + ::File::SEPARATOR
|
12
|
+
end
|
13
|
+
end
|
data/spec/spec_lite_spec.rb
CHANGED
@@ -53,6 +53,20 @@ describe Stickler::SpecLite do
|
|
53
53
|
(@specs[:ruby] =~ @specs[:win]).should == false
|
54
54
|
end
|
55
55
|
|
56
|
+
it "can be compared against something with the same name and version but different platform" do
|
57
|
+
list = []
|
58
|
+
list << r = Stickler::SpecLite.new( 'alib', '4.2' )
|
59
|
+
list << u = Stickler::SpecLite.new( 'alib', '4.2', 'x86-mswin32' )
|
60
|
+
list.sort.should == [ r, u ]
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'converts platform comparisons to something that can be compared' do
|
64
|
+
list = []
|
65
|
+
list << h2 = Stickler::SpecLite.new( 'htimes', '1.1.1', 'x86-mingw32' )
|
66
|
+
list << h1 = Stickler::SpecLite.new( 'htimes', '1.1.1', 'java' )
|
67
|
+
list.sort.should == [ h1, h2 ]
|
68
|
+
end
|
69
|
+
|
56
70
|
it "can be sorted" do
|
57
71
|
list = @specs.values
|
58
72
|
alib = Stickler::SpecLite.new( 'alib', '4.2' )
|