dolt 0.27.0 → 0.28.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.
- data/.travis.yml +2 -0
- data/Gemfile.lock +3 -3
- data/Readme.md +194 -0
- data/dolt.gemspec +2 -2
- data/lib/dolt/sinatra/actions.rb +14 -153
- data/test/dolt/sinatra/actions_test.rb +0 -345
- metadata +30 -9
- checksums.yaml +0 -7
- data/Readme.org +0 -166
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dolt (0.
|
4
|
+
dolt (0.28.0)
|
5
5
|
json (~> 1.5)
|
6
|
-
libdolt (~> 0.
|
6
|
+
libdolt (~> 0.27)
|
7
7
|
sinatra (~> 1.0)
|
8
8
|
thin (~> 1.4)
|
9
9
|
tiltout (~> 1.4)
|
@@ -27,7 +27,7 @@ GEM
|
|
27
27
|
github-markup (0.7.5)
|
28
28
|
htmlentities (4.3.1)
|
29
29
|
json (1.8.0)
|
30
|
-
libdolt (0.
|
30
|
+
libdolt (0.27.0)
|
31
31
|
htmlentities (~> 4.3)
|
32
32
|
json (~> 1.7)
|
33
33
|
makeup (~> 0.4)
|
data/Readme.md
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
# Dolt
|
2
|
+
|
3
|
+
<a href="http://travis-ci.org/cjohansen/dolt" class="travis">
|
4
|
+
<img src="https://secure.travis-ci.org/cjohansen/dolt.png">
|
5
|
+
</a>
|
6
|
+
|
7
|
+
Dolt is a stand-alone Git repository browser. It can be used to explore
|
8
|
+
repositories in your browser of choice, and features syntax highlighting with
|
9
|
+
[http://pygments.org/](Pygments) and various markdown formats (see below). In
|
10
|
+
addition to offering tree and blob browsing, Dolt also supports rendering the
|
11
|
+
commit log and blame.
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
To install `dolt` you need Ruby, [http://www.rubygems.org/](RubyGems) and
|
16
|
+
Python development files. The Python development files are required to support
|
17
|
+
Pygments syntax highlighting.
|
18
|
+
|
19
|
+
### Systems using apt (Debian/Ubuntu, others)
|
20
|
+
|
21
|
+
```sh
|
22
|
+
# 1) Install Ruby and RubyGems
|
23
|
+
sudo apt-get install -y ruby rubygems
|
24
|
+
|
25
|
+
# 2) Install Python development files and unicode tools
|
26
|
+
sudo apt-get install -y python-dev libicu-dev
|
27
|
+
|
28
|
+
# 3) Install dolt. This may or may not require the use of sudo, depending on
|
29
|
+
# how you installed Ruby.
|
30
|
+
gem install dolt
|
31
|
+
```
|
32
|
+
|
33
|
+
### Systems using yum (Fedora/CentOS/RedHat, others)
|
34
|
+
|
35
|
+
```sh
|
36
|
+
# 1) Install Ruby and RubyGems
|
37
|
+
sudo yum install -y ruby rubygems
|
38
|
+
|
39
|
+
# 2) Install Python development files and unicode tools
|
40
|
+
sudo yum install -y python-devel libicu-devel
|
41
|
+
|
42
|
+
# 3) Install dolt. This may or may not require the use of sudo, depending on
|
43
|
+
# how you installed Ruby.
|
44
|
+
gem install dolt
|
45
|
+
```
|
46
|
+
|
47
|
+
## The `dolt` Command Line Interface
|
48
|
+
|
49
|
+
Dolt installs a binary, aptly named `dolt` on your system. This binary has only
|
50
|
+
one required argument, the directory to serve repositories from. To try it out,
|
51
|
+
simply enter a git repository from your terminal and enter
|
52
|
+
|
53
|
+
```sh
|
54
|
+
dolt .
|
55
|
+
```
|
56
|
+
|
57
|
+
This will start a dolt instance serving your current repository on
|
58
|
+
[http://localhost:3000/](port 3000).
|
59
|
+
|
60
|
+
Dolt will serve either a single repository, like above, or a directory of git
|
61
|
+
repositories. Let's say you have a directory `/home/dolt/repositories`
|
62
|
+
containing a collection of bare Git repositories you push your work to over SSH.
|
63
|
+
To serve all of these over the web, simply:
|
64
|
+
|
65
|
+
```sh
|
66
|
+
cd /home/dolt/repositories
|
67
|
+
dolt .
|
68
|
+
```
|
69
|
+
|
70
|
+
And you'll be presented with a list of the repositories you can browse.
|
71
|
+
|
72
|
+
The `dolt` binary supports a number of options, which can be listed using the
|
73
|
+
`--help` switch. The following options are currently supported:
|
74
|
+
|
75
|
+
* `--socket` lets you specify a UNIX socket to listen to instead of a port.
|
76
|
+
Enter the path to a socket.
|
77
|
+
* `--port` lets you specify a different port than 3000. Also supported through
|
78
|
+
the environment variable `PORT`.
|
79
|
+
* `--bind` lets you bind to a different IP address than `0.0.0.0`. Also
|
80
|
+
supported through the environment variable `IP`.
|
81
|
+
* `--tabwidth` lets you specify how many spaces to use when rendering a tab in a
|
82
|
+
source file
|
83
|
+
* `--pidfile` lets you specify the path to a pid file. Entering this option will
|
84
|
+
daemonize the dolt process.
|
85
|
+
* `--logfile` lets you specify the path to a log file when running daemonized.
|
86
|
+
|
87
|
+
Please note that some of the options allowed can also be specified using
|
88
|
+
environment variables. If no option is given to the CLI, the environment
|
89
|
+
variable will be used if available, otherwise a default will be used.
|
90
|
+
|
91
|
+
To stop a running Dolt server, you'll need to do a little manual work:
|
92
|
+
|
93
|
+
```sh
|
94
|
+
kill `cat /path/to/dolt.pid`
|
95
|
+
```
|
96
|
+
|
97
|
+
A future version of Dolt/Gitorious will support stopping a running dolt server.
|
98
|
+
|
99
|
+
## Deploying under "a real" web server
|
100
|
+
|
101
|
+
To make your repositories publicly available you could specify `port` as 80.
|
102
|
+
However, to do this you need to be root on the machine, and it won't work if
|
103
|
+
you're already running a web server on your computer.
|
104
|
+
|
105
|
+
A more practical solution is to have dolt listening on a socket (or port for
|
106
|
+
that matter), daemonize it, and use your web server as a proxy in front of dolt.
|
107
|
+
|
108
|
+
A minimal nginx configuration which lets you do this could look like this
|
109
|
+
(replace `server_name` with the host name you'll be using):
|
110
|
+
|
111
|
+
```conf
|
112
|
+
upstream dolt {
|
113
|
+
server unix://tmp/dolt.sock fail_timeout=30s;
|
114
|
+
}
|
115
|
+
|
116
|
+
server {
|
117
|
+
server_name git.zmalltalker.com;
|
118
|
+
location / {
|
119
|
+
proxy_pass http://dolt;
|
120
|
+
proxy_redirect off;
|
121
|
+
}
|
122
|
+
}
|
123
|
+
```
|
124
|
+
|
125
|
+
On Debian/Ubuntu, add this to `/etc/nginx/sites-available/dolt`, symlink this to
|
126
|
+
`/etc/nginx/sites-enabled/dolt` and reload nginx:
|
127
|
+
|
128
|
+
```sh
|
129
|
+
service nginx reload
|
130
|
+
```
|
131
|
+
|
132
|
+
On CentOS, add the same contents to `/etc/nginx/conf.d/dolt.conf` and reload
|
133
|
+
nginx:
|
134
|
+
|
135
|
+
```sh
|
136
|
+
service nginx reload
|
137
|
+
```
|
138
|
+
|
139
|
+
## Rendering markup
|
140
|
+
|
141
|
+
Dolt uses [https://github.com/github/markup](GitHub Markup) to render
|
142
|
+
different markup formats. In order to have Dolt render these, you need to
|
143
|
+
install some different Ruby gems. These gems are not required to install Dolt,
|
144
|
+
so you'll have to install the ones you need separately.
|
145
|
+
|
146
|
+
### Markdown
|
147
|
+
|
148
|
+
To render files with suffixes `.markdown`, `.mdown` and `md`, install the
|
149
|
+
`redcarpet` gem.
|
150
|
+
|
151
|
+
```sh
|
152
|
+
gem install redcarpet
|
153
|
+
```
|
154
|
+
|
155
|
+
### Org-mode
|
156
|
+
|
157
|
+
To render [http://org-mode.org/](org-mode) files with a `.org` suffix, you'll
|
158
|
+
need the `org-ruby` gem installed on your system.
|
159
|
+
|
160
|
+
```sh
|
161
|
+
gem install org-ruby
|
162
|
+
```
|
163
|
+
|
164
|
+
### Textile
|
165
|
+
|
166
|
+
Rendering `.textile` files requires the `RedCloth` gem installed on your system.
|
167
|
+
|
168
|
+
```sh
|
169
|
+
gem install RedCloth
|
170
|
+
```
|
171
|
+
|
172
|
+
### Other formats
|
173
|
+
|
174
|
+
To render other markup formats, have a look at the
|
175
|
+
[https://github.com/github/markup](GitHub Markup) page.
|
176
|
+
|
177
|
+
## Why dolt?
|
178
|
+
|
179
|
+
Dolt is an extraction of the new code browser in
|
180
|
+
[https://gitorious.org/gitorious/mainline](Gitorious). Setting up a full-blown
|
181
|
+
Git repository hosting site just to make it possible to show your source code to
|
182
|
+
the world feels like way too much work with the current situation. You could use
|
183
|
+
`git instaweb`, but that's ridiculously ugly and only allows serving up a single
|
184
|
+
repository.
|
185
|
+
|
186
|
+
Dolt uses [http://libgit2.github.com](libgit2) for most git operations, and
|
187
|
+
should perform a lot better than implementations primarily using the git command
|
188
|
+
line tools to integrate with Git.
|
189
|
+
|
190
|
+
## License
|
191
|
+
|
192
|
+
Dolt is free software licensed under the
|
193
|
+
[http://www.gnu.org/licenses/agpl-3.0.html](GNU Affero General Public License
|
194
|
+
(AGPL)). Dolt is developed as part of the Gitorious project.
|
data/dolt.gemspec
CHANGED
@@ -11,7 +11,7 @@ end
|
|
11
11
|
|
12
12
|
Gem::Specification.new do |s|
|
13
13
|
s.name = "dolt"
|
14
|
-
s.version = "0.
|
14
|
+
s.version = "0.28.0"
|
15
15
|
s.authors = ["Christian Johansen"]
|
16
16
|
s.email = ["christian@gitorious.org"]
|
17
17
|
s.homepage = "http://gitorious.org/gitorious/dolt"
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
s.rubyforge_project = "dolt"
|
22
22
|
|
23
|
-
s.add_dependency "libdolt", "~>0.
|
23
|
+
s.add_dependency "libdolt", "~>0.27"
|
24
24
|
s.add_dependency "thin", "~>1.4"
|
25
25
|
s.add_dependency "sinatra", "~>1.0"
|
26
26
|
s.add_dependency "tiltout", "~>1.4"
|
data/lib/dolt/sinatra/actions.rb
CHANGED
@@ -18,175 +18,36 @@
|
|
18
18
|
require "json"
|
19
19
|
require "time"
|
20
20
|
require "cgi"
|
21
|
+
require "libdolt/controller_actions"
|
21
22
|
|
22
23
|
module Dolt
|
23
24
|
module Sinatra
|
24
25
|
class Actions
|
25
26
|
def initialize(app, lookup, renderer)
|
26
27
|
@app = app
|
27
|
-
@
|
28
|
-
@renderer = renderer
|
28
|
+
@dolt = Dolt::ControllerActions.new(app, lookup, renderer)
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
32
|
-
|
33
|
-
app.response["Location"] = url
|
34
|
-
app.body("")
|
31
|
+
def respond_to?(method)
|
32
|
+
dolt.respond_to?(method)
|
35
33
|
end
|
36
34
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
if error.class.to_s == "Rugged::ReferenceError" && ref == "HEAD"
|
42
|
-
return app.body(renderer.render("empty", {
|
43
|
-
:repository => repo,
|
44
|
-
:ref => ref
|
45
|
-
}.merge(data)))
|
46
|
-
end
|
47
|
-
template = error.class.to_s == "Rugged::IndexerError" ? :"404" : :"500"
|
48
|
-
add_headers(app.response)
|
49
|
-
app.body(renderer.render(template, {
|
50
|
-
:error => error,
|
51
|
-
:repository_slug => repo,
|
52
|
-
:ref => ref
|
53
|
-
}.merge(data)))
|
54
|
-
rescue Exception => err
|
55
|
-
err_backtrace = err.backtrace.map { |s| "<li>#{s}</li>" }
|
56
|
-
error_backtrace = error.backtrace.map { |s| "<li>#{s}</li>" }
|
57
|
-
|
58
|
-
app.body(<<-HTML)
|
59
|
-
<h1>Fatal Dolt Error</h1>
|
60
|
-
<p>
|
61
|
-
Dolt encountered an exception, and additionally
|
62
|
-
triggered another exception trying to render the error.
|
63
|
-
</p>
|
64
|
-
<p>Tried to render the #{template} template with the following data:</p>
|
65
|
-
<dl>
|
66
|
-
<dt>Repository</dt>
|
67
|
-
<dd>#{repo}</dd>
|
68
|
-
<dt>Ref</dt>
|
69
|
-
<dd>#{ref}</dd>
|
70
|
-
</dl>
|
71
|
-
<h2>Error: #{err.class} #{err.message}</h2>
|
72
|
-
<ul>#{err_backtrace.join()}</ul>
|
73
|
-
<h2>Original error: #{error.class} #{error.message}</h2>
|
74
|
-
<ul>#{error_backtrace.join()}</ul>
|
75
|
-
HTML
|
76
|
-
end
|
77
|
-
|
78
|
-
def raw(repo, ref, path, custom_data = {})
|
79
|
-
if oid = lookup_ref_oid(repo, ref)
|
80
|
-
redirect(app.raw_url(repo, oid, path), 307) and return
|
81
|
-
end
|
82
|
-
|
83
|
-
blob(repo, ref, path, custom_data, {
|
84
|
-
:template => :raw,
|
85
|
-
:content_type => "text/plain",
|
86
|
-
:template_options => { :layout => nil }
|
87
|
-
})
|
88
|
-
end
|
89
|
-
|
90
|
-
def blob(repo, ref, path, custom_data = {}, options = { :template => :blob })
|
91
|
-
if oid = lookup_ref_oid(repo, ref)
|
92
|
-
redirect(app.blob_url(repo, oid, path), 307) and return
|
93
|
-
end
|
94
|
-
|
95
|
-
data = (custom_data || {}).merge(lookup.blob(repo, u(ref), path))
|
96
|
-
blob = data[:blob]
|
97
|
-
return redirect(app.tree_url(repo, ref, path)) if blob.class.to_s !~ /\bBlob/
|
98
|
-
add_headers(app.response, options.merge(:ref => ref))
|
99
|
-
tpl_options = options[:template_options] || {}
|
100
|
-
app.body(renderer.render(options[:template], data, tpl_options))
|
101
|
-
end
|
102
|
-
|
103
|
-
def tree(repo, ref, path, custom_data = {})
|
104
|
-
if oid = lookup_ref_oid(repo, ref)
|
105
|
-
redirect(app.tree_url(repo, oid, path), 307) and return
|
106
|
-
end
|
107
|
-
|
108
|
-
data = (custom_data || {}).merge(lookup.tree(repo, u(ref), path))
|
109
|
-
tree = data[:tree]
|
110
|
-
return redirect(app.blob_url(repo, ref, path)) if tree.class.to_s !~ /\bTree/
|
111
|
-
add_headers(app.response, :ref => ref)
|
112
|
-
app.body(renderer.render(:tree, data))
|
113
|
-
end
|
114
|
-
|
115
|
-
def tree_entry(repo, ref, path, custom_data = {})
|
116
|
-
if oid = lookup_ref_oid(repo, ref)
|
117
|
-
redirect(app.tree_entry_url(repo, oid, path), 307) and return
|
35
|
+
def method_missing(method, *args, &block)
|
36
|
+
if dolt.respond_to?(method)
|
37
|
+
return respond(dolt.send(method, *args, &block))
|
118
38
|
end
|
119
|
-
|
120
|
-
data = (custom_data || {}).merge(lookup.tree_entry(repo, u(ref), path))
|
121
|
-
add_headers(app.response, :ref => ref)
|
122
|
-
app.body(renderer.render(data.key?(:tree) ? :tree : :blob, data))
|
123
|
-
end
|
124
|
-
|
125
|
-
def blame(repo, ref, path, custom_data = {})
|
126
|
-
if oid = lookup_ref_oid(repo, ref)
|
127
|
-
redirect(app.blame_url(repo, oid, path), 307) and return
|
128
|
-
end
|
129
|
-
|
130
|
-
data = (custom_data || {}).merge(lookup.blame(repo, u(ref), path))
|
131
|
-
add_headers(app.response, :ref => ref)
|
132
|
-
app.body(renderer.render(:blame, data))
|
133
|
-
end
|
134
|
-
|
135
|
-
def history(repo, ref, path, count, custom_data = {})
|
136
|
-
if oid = lookup_ref_oid(repo, ref)
|
137
|
-
redirect(app.history_url(repo, oid, path), 307) and return
|
138
|
-
end
|
139
|
-
|
140
|
-
data = (custom_data || {}).merge(lookup.history(repo, u(ref), path, count))
|
141
|
-
add_headers(app.response, :ref => ref)
|
142
|
-
app.body(renderer.render(:commits, data))
|
143
|
-
end
|
144
|
-
|
145
|
-
def refs(repo, custom_data = {})
|
146
|
-
data = (custom_data || {}).merge(lookup.refs(repo))
|
147
|
-
add_headers(app.response, :content_type => "application/json")
|
148
|
-
app.body(renderer.render(:refs, data, :layout => nil))
|
149
|
-
end
|
150
|
-
|
151
|
-
def tree_history(repo, ref, path, count = 1, custom_data = {})
|
152
|
-
if oid = lookup_ref_oid(repo, ref)
|
153
|
-
redirect(app.tree_history_url(repo, oid, path), 307) and return
|
154
|
-
end
|
155
|
-
|
156
|
-
data = (custom_data || {}).merge(lookup.tree_history(repo, u(ref), path, count))
|
157
|
-
add_headers(app.response, :content_type => "application/json", :ref => ref)
|
158
|
-
app.body(renderer.render(:tree_history, data, :layout => nil))
|
159
|
-
end
|
160
|
-
|
161
|
-
def resolve_repository(repo)
|
162
|
-
@cache ||= {}
|
163
|
-
@cache[repo] ||= lookup.resolve_repository(repo)
|
164
|
-
end
|
165
|
-
|
166
|
-
def lookup_ref_oid(repo, ref)
|
167
|
-
return if !app.respond_to?(:redirect_refs?) || !app.redirect_refs? || ref.length == 40
|
168
|
-
lookup.rev_parse_oid(repo, ref)
|
39
|
+
super
|
169
40
|
end
|
170
41
|
|
171
42
|
private
|
172
|
-
attr_reader :app, :
|
173
|
-
|
174
|
-
def u(str)
|
175
|
-
# Temporarily swap the + out with a magic byte, so
|
176
|
-
# filenames/branches with +'s won't get unescaped to a space
|
177
|
-
CGI.unescape(str.gsub("+", "\001")).gsub("\001", '+')
|
178
|
-
end
|
179
|
-
|
180
|
-
def add_headers(response, headers = {})
|
181
|
-
default_ct = "text/html; charset=utf-8"
|
182
|
-
app.response["Content-Type"] = headers[:content_type] || default_ct
|
183
|
-
app.response["X-UA-Compatible"] = "IE=edge"
|
43
|
+
attr_reader :app, :dolt
|
184
44
|
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
app.response[
|
45
|
+
def respond(response)
|
46
|
+
app.response.status = response[0]
|
47
|
+
response[1].keys.each do |header|
|
48
|
+
app.response[header] = response[1][header]
|
189
49
|
end
|
50
|
+
app.body(response[2].join("\n"))
|
190
51
|
end
|
191
52
|
end
|
192
53
|
end
|
@@ -20,17 +20,6 @@ require "dolt/sinatra/actions"
|
|
20
20
|
|
21
21
|
describe Dolt::Sinatra::Actions do
|
22
22
|
describe "#blob" do
|
23
|
-
it "delegates to lookup" do
|
24
|
-
lookup = Test::Lookup.new(Stub::Blob.new)
|
25
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, lookup, Test::Renderer.new)
|
26
|
-
|
27
|
-
dolt.blob("gitorious", "master", "app/models/repository.rb")
|
28
|
-
|
29
|
-
assert_equal "gitorious", lookup.repo
|
30
|
-
assert_equal "master", lookup.ref
|
31
|
-
assert_equal "app/models/repository.rb", lookup.path
|
32
|
-
end
|
33
|
-
|
34
23
|
it "renders the blob template as html" do
|
35
24
|
app = Test::App.new
|
36
25
|
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Blob.new), Test::Renderer.new("Blob"))
|
@@ -40,72 +29,9 @@ describe Dolt::Sinatra::Actions do
|
|
40
29
|
assert_equal "text/html; charset=utf-8", app.response["Content-Type"]
|
41
30
|
assert_equal "blob:Blob", app.body
|
42
31
|
end
|
43
|
-
|
44
|
-
it "renders the blob template with custom data" do
|
45
|
-
renderer = Test::Renderer.new("Blob")
|
46
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, Test::Lookup.new(Stub::Blob.new), renderer)
|
47
|
-
|
48
|
-
dolt.blob("gitorious", "master", "app/models/repository.rb", { :who => 42 })
|
49
|
-
|
50
|
-
assert_equal 42, renderer.data[:who]
|
51
|
-
end
|
52
|
-
|
53
|
-
it "redirects tree views to tree action" do
|
54
|
-
app = Test::App.new
|
55
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Tree.new), Test::Renderer.new("Tree"))
|
56
|
-
|
57
|
-
dolt.blob("gitorious", "master", "app/models")
|
58
|
-
|
59
|
-
assert_equal 302, app.response.status
|
60
|
-
assert_equal "/gitorious/tree/master:app/models", app.response["Location"]
|
61
|
-
assert_equal "", app.body
|
62
|
-
end
|
63
|
-
|
64
|
-
it "unescapes ref" do
|
65
|
-
lookup = Test::Lookup.new(Stub::Blob.new)
|
66
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, lookup, Test::Renderer.new("Blob"))
|
67
|
-
|
68
|
-
dolt.blob("gitorious", "issue-%23221", "app/my documents")
|
69
|
-
|
70
|
-
assert_equal "issue-#221", lookup.ref
|
71
|
-
end
|
72
|
-
|
73
|
-
it "does not redirect ref to oid by default" do
|
74
|
-
app = Test::App.new
|
75
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Blob.new), Test::Renderer.new("Blob"))
|
76
|
-
|
77
|
-
dolt.blob("gitorious", "master", "lib/gitorious.rb")
|
78
|
-
|
79
|
-
location = app.response["Location"]
|
80
|
-
refute_equal 302, app.response.status
|
81
|
-
refute_equal 307, app.response.status
|
82
|
-
end
|
83
|
-
|
84
|
-
it "redirects ref to oid if configured so" do
|
85
|
-
app = Test::RedirectingApp.new
|
86
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Blob.new), Test::Renderer.new("Blob"))
|
87
|
-
|
88
|
-
dolt.blob("gitorious", "master", "lib/gitorious.rb")
|
89
|
-
|
90
|
-
location = app.response["Location"]
|
91
|
-
assert_equal 307, app.response.status
|
92
|
-
assert_equal "/gitorious/blob/#{'a' * 40}:lib/gitorious.rb", location
|
93
|
-
assert_equal "", app.body
|
94
|
-
end
|
95
32
|
end
|
96
33
|
|
97
34
|
describe "#tree" do
|
98
|
-
it "delegates to actions" do
|
99
|
-
lookup = Test::Lookup.new(Stub::Tree.new)
|
100
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, lookup, Test::Renderer.new)
|
101
|
-
|
102
|
-
dolt.tree("gitorious", "master", "app/models")
|
103
|
-
|
104
|
-
assert_equal "gitorious", lookup.repo
|
105
|
-
assert_equal "master", lookup.ref
|
106
|
-
assert_equal "app/models", lookup.path
|
107
|
-
end
|
108
|
-
|
109
35
|
it "renders the tree template as html" do
|
110
36
|
app = Test::App.new
|
111
37
|
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Tree.new), Test::Renderer.new("Tree"))
|
@@ -115,74 +41,6 @@ describe Dolt::Sinatra::Actions do
|
|
115
41
|
assert_equal "text/html; charset=utf-8", app.response["Content-Type"]
|
116
42
|
assert_equal "tree:Tree", app.body
|
117
43
|
end
|
118
|
-
|
119
|
-
it "renders template with custom data" do
|
120
|
-
renderer = Test::Renderer.new("Tree")
|
121
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, Test::Lookup.new(Stub::Tree.new), renderer)
|
122
|
-
|
123
|
-
dolt.tree("gitorious", "master", "app/models", { :who => 42 })
|
124
|
-
|
125
|
-
assert_equal 42, renderer.data[:who]
|
126
|
-
end
|
127
|
-
|
128
|
-
it "redirects blob views to blob action" do
|
129
|
-
app = Test::App.new
|
130
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Blob.new), Test::Renderer.new("Tree"))
|
131
|
-
|
132
|
-
dolt.tree("gitorious", "master", "app/models/repository.rb")
|
133
|
-
|
134
|
-
location = app.response["Location"]
|
135
|
-
assert_equal 302, app.response.status
|
136
|
-
assert_equal "/gitorious/blob/master:app/models/repository.rb", location
|
137
|
-
assert_equal "", app.body
|
138
|
-
end
|
139
|
-
|
140
|
-
it "sets X-UA-Compatible header" do
|
141
|
-
app = Test::App.new
|
142
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Tree.new), Test::Renderer.new("Tree"))
|
143
|
-
|
144
|
-
dolt.tree("gitorious", "master", "app/models")
|
145
|
-
|
146
|
-
assert_equal "IE=edge", app.response["X-UA-Compatible"]
|
147
|
-
end
|
148
|
-
|
149
|
-
it "does not set cache-control header for head ref" do
|
150
|
-
app = Test::App.new
|
151
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Tree.new), Test::Renderer.new("Tree"))
|
152
|
-
|
153
|
-
dolt.tree("gitorious", "master", "app/models")
|
154
|
-
|
155
|
-
assert !app.response.key?("Cache-Control")
|
156
|
-
end
|
157
|
-
|
158
|
-
it "sets cache headers for full oid ref" do
|
159
|
-
app = Test::App.new
|
160
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Tree.new), Test::Renderer.new("Tree"))
|
161
|
-
|
162
|
-
dolt.tree("gitorious", "a" * 40, "app/models")
|
163
|
-
|
164
|
-
assert_equal "max-age=315360000, public", app.response["Cache-Control"]
|
165
|
-
refute_nil app.response["Expires"]
|
166
|
-
end
|
167
|
-
|
168
|
-
it "unescapes ref" do
|
169
|
-
lookup = Test::Lookup.new(Stub::Tree.new)
|
170
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, lookup, Test::Renderer.new("Tree"))
|
171
|
-
|
172
|
-
dolt.tree("gitorious", "issue-%23221", "app")
|
173
|
-
|
174
|
-
assert_equal "issue-#221", lookup.ref
|
175
|
-
end
|
176
|
-
|
177
|
-
it "redirects ref to oid if configured so" do
|
178
|
-
app = Test::RedirectingApp.new
|
179
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Tree.new), Test::Renderer.new("Tree"))
|
180
|
-
|
181
|
-
dolt.tree("gitorious", "master", "lib")
|
182
|
-
|
183
|
-
assert_equal 307, app.response.status
|
184
|
-
assert_equal "/gitorious/tree/#{'a' * 40}:lib", app.response["Location"]
|
185
|
-
end
|
186
44
|
end
|
187
45
|
|
188
46
|
describe "#tree_entry" do
|
@@ -195,58 +53,9 @@ describe Dolt::Sinatra::Actions do
|
|
195
53
|
assert_equal "text/html; charset=utf-8", app.response["Content-Type"]
|
196
54
|
assert_equal "tree:Tree", app.body
|
197
55
|
end
|
198
|
-
|
199
|
-
it "renders template with custom data" do
|
200
|
-
renderer = Test::Renderer.new("Tree")
|
201
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, Test::Lookup.new(Stub::Tree.new), renderer)
|
202
|
-
|
203
|
-
dolt.tree_entry("gitorious", "master", "app/models", { :who => 42 })
|
204
|
-
|
205
|
-
assert_equal 42, renderer.data[:who]
|
206
|
-
end
|
207
|
-
|
208
|
-
it "renders trees with the tree template as html" do
|
209
|
-
app = Test::App.new
|
210
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Blob.new), Test::Renderer.new("Blob"))
|
211
|
-
|
212
|
-
dolt.tree_entry("gitorious", "master", "app/models")
|
213
|
-
|
214
|
-
assert_equal "text/html; charset=utf-8", app.response["Content-Type"]
|
215
|
-
assert_equal "blob:Blob", app.body
|
216
|
-
end
|
217
|
-
|
218
|
-
it "unescapes ref" do
|
219
|
-
lookup = Test::Lookup.new(Stub::Tree.new)
|
220
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, lookup, Test::Renderer.new("Tree"))
|
221
|
-
|
222
|
-
dolt.tree_entry("gitorious", "issue-%23221", "app")
|
223
|
-
|
224
|
-
assert_equal "issue-#221", lookup.ref
|
225
|
-
end
|
226
|
-
|
227
|
-
it "redirects ref to oid if configured so" do
|
228
|
-
app = Test::RedirectingApp.new
|
229
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Tree.new), Test::Renderer.new("Tree"))
|
230
|
-
|
231
|
-
dolt.tree_entry("gitorious", "master", "lib")
|
232
|
-
|
233
|
-
assert_equal 307, app.response.status
|
234
|
-
assert_equal "/gitorious/source/#{'a' * 40}:lib", app.response["Location"]
|
235
|
-
end
|
236
56
|
end
|
237
57
|
|
238
58
|
describe "#raw" do
|
239
|
-
it "delegates to lookup" do
|
240
|
-
lookup = Test::Lookup.new(Stub::Blob.new)
|
241
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, lookup, Test::Renderer.new)
|
242
|
-
|
243
|
-
dolt.raw("gitorious", "master", "app/models/repository.rb")
|
244
|
-
|
245
|
-
assert_equal "gitorious", lookup.repo
|
246
|
-
assert_equal "master", lookup.ref
|
247
|
-
assert_equal "app/models/repository.rb", lookup.path
|
248
|
-
end
|
249
|
-
|
250
59
|
it "renders the raw template as text" do
|
251
60
|
app = Test::App.new
|
252
61
|
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Blob.new), Test::Renderer.new("Text"))
|
@@ -256,60 +65,9 @@ describe Dolt::Sinatra::Actions do
|
|
256
65
|
assert_equal "text/plain", app.response["Content-Type"]
|
257
66
|
assert_equal "raw:Text", app.body
|
258
67
|
end
|
259
|
-
|
260
|
-
it "renders template with custom data" do
|
261
|
-
renderer = Test::Renderer.new("Text")
|
262
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, Test::Lookup.new(Stub::Blob.new), renderer)
|
263
|
-
|
264
|
-
dolt.raw("gitorious", "master", "app/models/repository.rb", { :who => 42 })
|
265
|
-
|
266
|
-
assert_equal 42, renderer.data[:who]
|
267
|
-
end
|
268
|
-
|
269
|
-
it "redirects tree views to tree action" do
|
270
|
-
app = Test::App.new
|
271
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Tree.new), Test::Renderer.new("Tree"))
|
272
|
-
|
273
|
-
dolt.raw("gitorious", "master", "app/models")
|
274
|
-
|
275
|
-
location = app.response["Location"]
|
276
|
-
assert_equal 302, app.response.status
|
277
|
-
assert_equal "/gitorious/tree/master:app/models", location
|
278
|
-
assert_equal "", app.body
|
279
|
-
end
|
280
|
-
|
281
|
-
it "unescapes ref" do
|
282
|
-
lookup = Test::Lookup.new(Stub::Blob.new)
|
283
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, lookup, Test::Renderer.new("Blob"))
|
284
|
-
|
285
|
-
dolt.raw("gitorious", "issue-%23221", "app/models/repository.rb")
|
286
|
-
|
287
|
-
assert_equal "issue-#221", lookup.ref
|
288
|
-
end
|
289
|
-
|
290
|
-
it "redirects ref to oid if configured so" do
|
291
|
-
app = Test::RedirectingApp.new
|
292
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Blob.new), Test::Renderer.new("Blob"))
|
293
|
-
|
294
|
-
dolt.raw("gitorious", "master", "lib/gitorious.rb")
|
295
|
-
|
296
|
-
assert_equal 307, app.response.status
|
297
|
-
assert_equal "/gitorious/raw/#{'a' * 40}:lib/gitorious.rb", app.response["Location"]
|
298
|
-
end
|
299
68
|
end
|
300
69
|
|
301
70
|
describe "#blame" do
|
302
|
-
it "delegates to lookup" do
|
303
|
-
lookup = Test::Lookup.new(Stub::Blob.new)
|
304
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, lookup, Test::Renderer.new)
|
305
|
-
|
306
|
-
dolt.blame("gitorious", "master", "app/models/repository.rb")
|
307
|
-
|
308
|
-
assert_equal "gitorious", lookup.repo
|
309
|
-
assert_equal "master", lookup.ref
|
310
|
-
assert_equal "app/models/repository.rb", lookup.path
|
311
|
-
end
|
312
|
-
|
313
71
|
it "renders the blame template as html" do
|
314
72
|
app = Test::App.new
|
315
73
|
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Blob.new), Test::Renderer.new("Text"))
|
@@ -319,47 +77,9 @@ describe Dolt::Sinatra::Actions do
|
|
319
77
|
assert_equal "text/html; charset=utf-8", app.response["Content-Type"]
|
320
78
|
assert_equal "blame:Text", app.body
|
321
79
|
end
|
322
|
-
|
323
|
-
it "renders template with custom data" do
|
324
|
-
renderer = Test::Renderer.new("Text")
|
325
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, Test::Lookup.new(Stub::Blob.new), renderer)
|
326
|
-
|
327
|
-
dolt.blame("gitorious", "master", "app/models/repository.rb", { :who => 42 })
|
328
|
-
|
329
|
-
assert_equal 42, renderer.data[:who]
|
330
|
-
end
|
331
|
-
|
332
|
-
it "unescapes ref" do
|
333
|
-
lookup = Test::Lookup.new(Stub::Blob.new)
|
334
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, lookup, Test::Renderer.new("Blob"))
|
335
|
-
|
336
|
-
dolt.blame("gitorious", "issue-%23221", "app/models/repository.rb")
|
337
|
-
|
338
|
-
assert_equal "issue-#221", lookup.ref
|
339
|
-
end
|
340
|
-
|
341
|
-
it "redirects ref to oid if configured so" do
|
342
|
-
app = Test::RedirectingApp.new
|
343
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Blob.new), Test::Renderer.new("Blob"))
|
344
|
-
|
345
|
-
dolt.blame("gitorious", "master", "lib/gitorious.rb")
|
346
|
-
|
347
|
-
assert_equal 307, app.response.status
|
348
|
-
assert_equal "/gitorious/blame/#{'a' * 40}:lib/gitorious.rb", app.response["Location"]
|
349
|
-
end
|
350
80
|
end
|
351
81
|
|
352
82
|
describe "#history" do
|
353
|
-
it "delegates to lookup" do
|
354
|
-
lookup = Test::Lookup.new(Stub::Blob.new)
|
355
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, lookup, Test::Renderer.new)
|
356
|
-
dolt.history("gitorious", "master", "app/models/repository.rb", 10)
|
357
|
-
|
358
|
-
assert_equal "gitorious", lookup.repo
|
359
|
-
assert_equal "master", lookup.ref
|
360
|
-
assert_equal "app/models/repository.rb", lookup.path
|
361
|
-
end
|
362
|
-
|
363
83
|
it "renders the commits template as html" do
|
364
84
|
app = Test::App.new
|
365
85
|
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Blob.new), Test::Renderer.new("Text"))
|
@@ -369,34 +89,6 @@ describe Dolt::Sinatra::Actions do
|
|
369
89
|
assert_equal "text/html; charset=utf-8", app.response["Content-Type"]
|
370
90
|
assert_equal "commits:Text", app.body
|
371
91
|
end
|
372
|
-
|
373
|
-
it "renders template with custom data" do
|
374
|
-
renderer = Test::Renderer.new("Text")
|
375
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, Test::Lookup.new(Stub::Blob.new), renderer)
|
376
|
-
|
377
|
-
dolt.history("gitorious", "master", "app/models/repository.rb", 10, { :who => 42 })
|
378
|
-
|
379
|
-
assert_equal 42, renderer.data[:who]
|
380
|
-
end
|
381
|
-
|
382
|
-
it "unescapes ref" do
|
383
|
-
lookup = Test::Lookup.new(Stub::Blob.new)
|
384
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, lookup, Test::Renderer.new("Blob"))
|
385
|
-
|
386
|
-
dolt.history("gitorious", "issue-%23221", "lib/gitorious.rb", 10)
|
387
|
-
|
388
|
-
assert_equal "issue-#221", lookup.ref
|
389
|
-
end
|
390
|
-
|
391
|
-
it "redirects ref to oid if configured so" do
|
392
|
-
app = Test::RedirectingApp.new
|
393
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Blob.new), Test::Renderer.new("Blob"))
|
394
|
-
|
395
|
-
dolt.history("gitorious", "master", "lib/gitorious.rb", 10)
|
396
|
-
|
397
|
-
assert_equal 307, app.response.status
|
398
|
-
assert_equal "/gitorious/history/#{'a' * 40}:lib/gitorious.rb", app.response["Location"]
|
399
|
-
end
|
400
92
|
end
|
401
93
|
|
402
94
|
describe "#refs" do
|
@@ -409,15 +101,6 @@ describe Dolt::Sinatra::Actions do
|
|
409
101
|
assert_equal "application/json", app.response["Content-Type"]
|
410
102
|
assert_equal "refs:JSON", app.body
|
411
103
|
end
|
412
|
-
|
413
|
-
it "renders template with custom data" do
|
414
|
-
renderer = Test::Renderer.new("Text")
|
415
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, Test::Lookup.new(Stub::Blob.new), renderer)
|
416
|
-
|
417
|
-
dolt.refs("gitorious", { :who => 42 })
|
418
|
-
|
419
|
-
assert_equal 42, renderer.data[:who]
|
420
|
-
end
|
421
104
|
end
|
422
105
|
|
423
106
|
describe "#tree_history" do
|
@@ -430,33 +113,5 @@ describe Dolt::Sinatra::Actions do
|
|
430
113
|
assert_equal "application/json", app.response["Content-Type"]
|
431
114
|
assert_equal "tree_history:JSON", app.body
|
432
115
|
end
|
433
|
-
|
434
|
-
it "renders template with custom data" do
|
435
|
-
renderer = Test::Renderer.new("Text")
|
436
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, Test::Lookup.new(Stub::Tree.new), renderer)
|
437
|
-
|
438
|
-
dolt.tree_history("gitorious", "master", "app/models", 1, { :who => 42 })
|
439
|
-
|
440
|
-
assert_equal 42, renderer.data[:who]
|
441
|
-
end
|
442
|
-
|
443
|
-
it "unescapes ref" do
|
444
|
-
lookup = Test::Lookup.new(Stub::Tree.new)
|
445
|
-
dolt = Dolt::Sinatra::Actions.new(Test::App.new, lookup, Test::Renderer.new("Tree"))
|
446
|
-
|
447
|
-
dolt.tree_history("gitorious", "issue-%23221", "app/models")
|
448
|
-
|
449
|
-
assert_equal "issue-#221", lookup.ref
|
450
|
-
end
|
451
|
-
|
452
|
-
it "redirects ref to oid if configured so" do
|
453
|
-
app = Test::RedirectingApp.new
|
454
|
-
dolt = Dolt::Sinatra::Actions.new(app, Test::Lookup.new(Stub::Tree.new), Test::Renderer.new("Tree"))
|
455
|
-
|
456
|
-
dolt.tree_history("gitorious", "master", "lib", 10)
|
457
|
-
|
458
|
-
assert_equal 307, app.response.status
|
459
|
-
assert_equal "/gitorious/tree_history/#{'a' * 40}:lib", app.response["Location"]
|
460
|
-
end
|
461
116
|
end
|
462
117
|
end
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dolt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.28.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Christian Johansen
|
@@ -13,20 +14,23 @@ dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: libdolt
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
21
|
+
version: '0.27'
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
29
|
+
version: '0.27'
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: thin
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
35
|
- - ~>
|
32
36
|
- !ruby/object:Gem::Version
|
@@ -34,6 +38,7 @@ dependencies:
|
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - ~>
|
39
44
|
- !ruby/object:Gem::Version
|
@@ -41,6 +46,7 @@ dependencies:
|
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: sinatra
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
51
|
- - ~>
|
46
52
|
- !ruby/object:Gem::Version
|
@@ -48,6 +54,7 @@ dependencies:
|
|
48
54
|
type: :runtime
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
59
|
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
@@ -55,6 +62,7 @@ dependencies:
|
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: tiltout
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
67
|
- - ~>
|
60
68
|
- !ruby/object:Gem::Version
|
@@ -62,6 +70,7 @@ dependencies:
|
|
62
70
|
type: :runtime
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
75
|
- - ~>
|
67
76
|
- !ruby/object:Gem::Version
|
@@ -69,6 +78,7 @@ dependencies:
|
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: json
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
83
|
- - ~>
|
74
84
|
- !ruby/object:Gem::Version
|
@@ -76,6 +86,7 @@ dependencies:
|
|
76
86
|
type: :runtime
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
91
|
- - ~>
|
81
92
|
- !ruby/object:Gem::Version
|
@@ -83,6 +94,7 @@ dependencies:
|
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
95
|
name: trollop
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
99
|
- - ~>
|
88
100
|
- !ruby/object:Gem::Version
|
@@ -90,6 +102,7 @@ dependencies:
|
|
90
102
|
type: :runtime
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
107
|
- - ~>
|
95
108
|
- !ruby/object:Gem::Version
|
@@ -97,6 +110,7 @@ dependencies:
|
|
97
110
|
- !ruby/object:Gem::Dependency
|
98
111
|
name: minitest
|
99
112
|
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
100
114
|
requirements:
|
101
115
|
- - ~>
|
102
116
|
- !ruby/object:Gem::Version
|
@@ -104,6 +118,7 @@ dependencies:
|
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
107
122
|
requirements:
|
108
123
|
- - ~>
|
109
124
|
- !ruby/object:Gem::Version
|
@@ -111,6 +126,7 @@ dependencies:
|
|
111
126
|
- !ruby/object:Gem::Dependency
|
112
127
|
name: rake
|
113
128
|
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
114
130
|
requirements:
|
115
131
|
- - ~>
|
116
132
|
- !ruby/object:Gem::Version
|
@@ -118,6 +134,7 @@ dependencies:
|
|
118
134
|
type: :development
|
119
135
|
prerelease: false
|
120
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
121
138
|
requirements:
|
122
139
|
- - ~>
|
123
140
|
- !ruby/object:Gem::Version
|
@@ -125,6 +142,7 @@ dependencies:
|
|
125
142
|
- !ruby/object:Gem::Dependency
|
126
143
|
name: rack-test
|
127
144
|
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
128
146
|
requirements:
|
129
147
|
- - ~>
|
130
148
|
- !ruby/object:Gem::Version
|
@@ -132,6 +150,7 @@ dependencies:
|
|
132
150
|
type: :development
|
133
151
|
prerelease: false
|
134
152
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
135
154
|
requirements:
|
136
155
|
- - ~>
|
137
156
|
- !ruby/object:Gem::Version
|
@@ -150,7 +169,7 @@ files:
|
|
150
169
|
- ./Gemfile
|
151
170
|
- ./Gemfile.lock
|
152
171
|
- ./Rakefile
|
153
|
-
- ./Readme.
|
172
|
+
- ./Readme.md
|
154
173
|
- ./bin/dolt
|
155
174
|
- ./dolt.gemspec
|
156
175
|
- ./lib/dolt/sinatra/actions.rb
|
@@ -234,25 +253,27 @@ files:
|
|
234
253
|
- bin/dolt
|
235
254
|
homepage: http://gitorious.org/gitorious/dolt
|
236
255
|
licenses: []
|
237
|
-
metadata: {}
|
238
256
|
post_install_message:
|
239
257
|
rdoc_options: []
|
240
258
|
require_paths:
|
241
259
|
- lib
|
242
260
|
required_ruby_version: !ruby/object:Gem::Requirement
|
261
|
+
none: false
|
243
262
|
requirements:
|
244
|
-
- - '>='
|
263
|
+
- - ! '>='
|
245
264
|
- !ruby/object:Gem::Version
|
246
265
|
version: '0'
|
247
266
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
267
|
+
none: false
|
248
268
|
requirements:
|
249
|
-
- - '>='
|
269
|
+
- - ! '>='
|
250
270
|
- !ruby/object:Gem::Version
|
251
271
|
version: '0'
|
252
272
|
requirements: []
|
253
273
|
rubyforge_project: dolt
|
254
|
-
rubygems_version:
|
274
|
+
rubygems_version: 1.8.25
|
255
275
|
signing_key:
|
256
|
-
specification_version:
|
276
|
+
specification_version: 3
|
257
277
|
summary: Dolt serves git trees and syntax highlighted blobs
|
258
278
|
test_files: []
|
279
|
+
has_rdoc:
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 1414f588cba634d0a92547366a8e87ca66583cc3
|
4
|
-
data.tar.gz: 84a32ef1845e4d7795c5f706fef6deb5f6606d65
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: a929c197c1ec49786da76fd7854e1c752cb39b6e192835f5ab9edd9a7c786879d8fb3d0e947df2a46feae49aa6674cfb50fe5f38c5013615c23a7090e42020b8
|
7
|
-
data.tar.gz: c8312562974affc44b68a8f1495611b93847b9b7707ded37049695d2229be4ebe363ff785d8c5fdf91a04719527c24ee1c648f89e146911fca1dbfec7474bb6d
|
data/Readme.org
DELETED
@@ -1,166 +0,0 @@
|
|
1
|
-
* Dolt
|
2
|
-
Dolt is a stand-alone Git repository browser. It can be used to
|
3
|
-
explore repositories in your browser of choice, and features syntax
|
4
|
-
highlighting with [[http://pygments.org/][Pygments]] and various markdown formats (see
|
5
|
-
below). In addition to offering tree and blob browsing, Dolt also
|
6
|
-
supports rendering the commit log and blame.
|
7
|
-
|
8
|
-
** Installation
|
9
|
-
To install =dolt= you need Ruby, [[http://www.rubygems.org/][RubyGems]] Python development files. The
|
10
|
-
Python development files are required to support Pygments syntax
|
11
|
-
highlighting. Once that's installed, simply enter:
|
12
|
-
|
13
|
-
#+BEGIN_SRC shell-script
|
14
|
-
gem install dolt
|
15
|
-
#+END_SRC
|
16
|
-
|
17
|
-
and you'll be ready to serve your repositories on the web.
|
18
|
-
|
19
|
-
** The =dolt= Command Line Interface
|
20
|
-
Dolt installs a binary, aptly named =dolt= on your system. This
|
21
|
-
binary has only one required argument, the directory to serve
|
22
|
-
repositories from. To try it out, simply enter a git repository
|
23
|
-
from your terminal and enter
|
24
|
-
|
25
|
-
#+BEGIN_SRC shell-script
|
26
|
-
dolt .
|
27
|
-
#+END_SRC
|
28
|
-
|
29
|
-
This will start a dolt instance serving your current repository on
|
30
|
-
port [[http://localhost:3000/][3000]].
|
31
|
-
|
32
|
-
Dolt will serve either a single repository, like above, or a
|
33
|
-
directory of git repositories. Let's say you have a directory
|
34
|
-
=/home/dolt/repositories= containing a collection of bare Git
|
35
|
-
repositories you push your work to over SSH. To serve all of these
|
36
|
-
over the web, simply:
|
37
|
-
|
38
|
-
#+BEGIN_SRC shell-script
|
39
|
-
cd /home/dolt/repositories
|
40
|
-
dolt .
|
41
|
-
#+END_SRC
|
42
|
-
|
43
|
-
And you'll be presented with a list of the repositories you can
|
44
|
-
browse.
|
45
|
-
|
46
|
-
The =dolt= binary supports a number of options, which can be
|
47
|
-
listed using the =--help= switch. The following options are
|
48
|
-
currently supported:
|
49
|
-
|
50
|
-
- =--socket= lets you specify a UNIX socket to listen to instead
|
51
|
-
of a port. Enter the path to a socket.
|
52
|
-
- =--port= lets you specify a different port than 3000. Also
|
53
|
-
supported through the environment variable =PORT=.
|
54
|
-
- =--bind= lets you bind to a different IP address than
|
55
|
-
=0.0.0.0=. Also supported through the environment variable =IP=.
|
56
|
-
- =--tabwidth= lets you specify how many spaces to use when
|
57
|
-
rendering a tab in a source file
|
58
|
-
- =--pidfile= lets you specify the path to a pid file. Entering
|
59
|
-
this option will daemonize the dolt process.
|
60
|
-
- =--logfile= lets you specify the path to a log file when running daemonized.
|
61
|
-
|
62
|
-
Please note that some of the options allowed can also be specified
|
63
|
-
using environment variables. If no option is given to the CLI, the
|
64
|
-
environment variable will be used if available, otherwise a
|
65
|
-
default will be used.
|
66
|
-
|
67
|
-
To stop a running Dolt server, you'll need to do a little manual
|
68
|
-
work:
|
69
|
-
|
70
|
-
#+BEGIN_SRC shell-script
|
71
|
-
kill `cat /path/to/dolt.pid`
|
72
|
-
#+END_SRC
|
73
|
-
|
74
|
-
A future version of Gitorious will support stopping a running dolt server.
|
75
|
-
|
76
|
-
** Deploying under "a real" web server
|
77
|
-
To make your repositories publicly available you could specify
|
78
|
-
=port= as 80. However, to do this you need to be root on the
|
79
|
-
machine, and it won't work if you're already running a web server
|
80
|
-
on your computer.
|
81
|
-
|
82
|
-
A more practical solution is to have dolt listening on a socket
|
83
|
-
(or port for that matter), daemonize it, and use your web server
|
84
|
-
as a proxy in front of dolt.
|
85
|
-
|
86
|
-
A minimal nginx configuration which lets you do this could look
|
87
|
-
like this (replace =server_name= with the host name you'll be using):
|
88
|
-
|
89
|
-
#+BEGIN_SRC conf
|
90
|
-
upstream dolt {
|
91
|
-
server unix://tmp/dolt.sock fail_timeout=30s;
|
92
|
-
}
|
93
|
-
server {
|
94
|
-
server_name git.zmalltalker.com;
|
95
|
-
location / {
|
96
|
-
proxy_pass http://dolt;
|
97
|
-
proxy_redirect off;
|
98
|
-
}
|
99
|
-
}
|
100
|
-
#+END_SRC
|
101
|
-
|
102
|
-
On Debian/Ubuntu, add this to =/etc/nginx/sites-available/dolt=,
|
103
|
-
symlink this to =/etc/nginx/sites-enabled/dolt= and reload nginx:
|
104
|
-
|
105
|
-
#+BEGIN_SRC shell-script
|
106
|
-
service nginx reload
|
107
|
-
#+END_SRC
|
108
|
-
|
109
|
-
On CentOS, add the same contents to =/etc/nginx/conf.d/dolt.conf=
|
110
|
-
and reload nginx:
|
111
|
-
|
112
|
-
#+BEGIN_SRC shell-script
|
113
|
-
service nginx reload
|
114
|
-
#+END_SRC
|
115
|
-
|
116
|
-
|
117
|
-
** Rendering markup
|
118
|
-
Dolt uses [[https://github.com/github/markup][GitHub Markup]] to render different markup formats. In
|
119
|
-
order to have Dolt render these, you need to install some
|
120
|
-
different Ruby gems. These gems are not required to install Dolt,
|
121
|
-
so you'll have to install the ones you need separately.
|
122
|
-
|
123
|
-
** Markdown
|
124
|
-
To render files with suffixes =.markdown=, =.mdown= and =md=,
|
125
|
-
install the =redcarpet= gem.
|
126
|
-
|
127
|
-
#+BEGIN_SRC shell-script
|
128
|
-
gem install redcarpet
|
129
|
-
#+END_SRC
|
130
|
-
|
131
|
-
** Org-mode
|
132
|
-
To render [[http://org-mode.org/][org-mode]] files (like this one) with a =.org= suffix,
|
133
|
-
you'll need the =org-ruby= gem installed on your system.
|
134
|
-
|
135
|
-
#+BEGIN_SRC shell-script
|
136
|
-
gem install org-ruby
|
137
|
-
#+END_SRC
|
138
|
-
|
139
|
-
** Textile
|
140
|
-
Rendering =.textile= files requires the =RedCloth= gem installed
|
141
|
-
on your system.
|
142
|
-
|
143
|
-
#+BEGIN_SRC shell-script
|
144
|
-
gem install RedCloth
|
145
|
-
#+END_SRC
|
146
|
-
|
147
|
-
** Other formats
|
148
|
-
To render other markup formats, have a look at the [[https://github.com/github/markup][GitHub Markup]]
|
149
|
-
page.
|
150
|
-
|
151
|
-
** Why dolt?
|
152
|
-
Dolt is an extraction of the new code browser in
|
153
|
-
[[https://gitorious.org/gitorious/mainline][Gitorious]]. Setting up a full-blown Git repository hosting site
|
154
|
-
just to make it possible to show your source code to the world
|
155
|
-
feels like way too much work with the current situation. You could
|
156
|
-
use =git instaweb=, but that's ridiculously ugly and only allows
|
157
|
-
serving up a single repository.
|
158
|
-
|
159
|
-
Dolt uses [[http://libgit2.github.com][libgit2]] for all git operations, and should perform a lot
|
160
|
-
better than implementations using the git command line tools to
|
161
|
-
integrate with Git.
|
162
|
-
|
163
|
-
** License
|
164
|
-
Dolt is free software licensed under the [[http://www.gnu.org/licenses/agpl-3.0.html][GNU Affero General Public
|
165
|
-
License (AGPL)]]. Dolt is developed as part of the Gitorious
|
166
|
-
project.
|