dolt 0.9.0 → 0.10.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/Gemfile.lock +3 -3
- data/dolt.gemspec +2 -3
- data/lib/dolt/sinatra/actions.rb +30 -12
- data/test/dolt/sinatra/actions_test.rb +36 -7
- metadata +4 -20
data/Gemfile.lock
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dolt (0.
|
4
|
+
dolt (0.9.0)
|
5
5
|
async_sinatra (~> 1.0)
|
6
6
|
json (~> 1.5)
|
7
|
-
libdolt (~> 0.
|
7
|
+
libdolt (~> 0.12)
|
8
8
|
sinatra (~> 1.0)
|
9
9
|
thin (~> 1.4)
|
10
10
|
tiltout (~> 1.4)
|
@@ -27,7 +27,7 @@ GEM
|
|
27
27
|
github-markup (0.7.4)
|
28
28
|
htmlentities (4.3.1)
|
29
29
|
json (1.7.5)
|
30
|
-
libdolt (0.
|
30
|
+
libdolt (0.12.0)
|
31
31
|
em_pessimistic (~> 0.1)
|
32
32
|
em_rugged (~> 0.3)
|
33
33
|
eventmachine (~> 1.0)
|
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.10.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.14"
|
24
24
|
s.add_dependency "thin", "~>1.4"
|
25
25
|
s.add_dependency "sinatra", "~>1.0"
|
26
26
|
s.add_dependency "async_sinatra", "~>1.0"
|
@@ -30,7 +30,6 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_development_dependency "minitest", "~> 2.0"
|
31
31
|
s.add_development_dependency "em-minitest-spec", "~> 1.1"
|
32
32
|
s.add_development_dependency "rake", "~> 0.9"
|
33
|
-
s.add_development_dependency "mocha"
|
34
33
|
|
35
34
|
s.files = GemSpecHelper.files(".") + GemSpecHelper.files("vendor/ui")
|
36
35
|
s.test_files = `git ls-files -- {test}/*`.split("\n")
|
data/lib/dolt/sinatra/actions.rb
CHANGED
@@ -16,6 +16,7 @@
|
|
16
16
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
#++
|
18
18
|
require "json"
|
19
|
+
require "time"
|
19
20
|
|
20
21
|
module Dolt
|
21
22
|
module Sinatra
|
@@ -29,7 +30,7 @@ module Dolt
|
|
29
30
|
end
|
30
31
|
|
31
32
|
def error(error, repo, ref)
|
32
|
-
response
|
33
|
+
add_headers(response)
|
33
34
|
body(renderer.render(:"500", {
|
34
35
|
:error => error,
|
35
36
|
:repository_slug => repo,
|
@@ -60,12 +61,12 @@ module Dolt
|
|
60
61
|
})
|
61
62
|
end
|
62
63
|
|
63
|
-
def blob(repo, ref, path, options = { :template => :blob
|
64
|
+
def blob(repo, ref, path, options = { :template => :blob })
|
64
65
|
actions.blob(repo, ref, path) do |err, data|
|
65
66
|
next error(err, repo, ref) if !err.nil?
|
66
67
|
blob = data[:blob]
|
67
68
|
next redirect(tree_url(repo, ref, path)) if blob.class.to_s !~ /\bBlob/
|
68
|
-
response
|
69
|
+
add_headers(response, options.merge(:ref => ref))
|
69
70
|
tpl_options = options[:template_options] || {}
|
70
71
|
body(renderer.render(options[:template], data, tpl_options))
|
71
72
|
end
|
@@ -77,7 +78,7 @@ module Dolt
|
|
77
78
|
next error(err, repo, ref) if !err.nil?
|
78
79
|
tree = data[:tree]
|
79
80
|
next redirect(blob_url(repo, ref, path)) if tree.class.to_s !~ /\bTree/
|
80
|
-
response
|
81
|
+
add_headers(response, :ref => ref)
|
81
82
|
body(renderer.render(:tree, data))
|
82
83
|
rescue Exception => err
|
83
84
|
error(err, repo, ref)
|
@@ -89,7 +90,7 @@ module Dolt
|
|
89
90
|
actions.tree_entry(repo, ref, path) do |err, data|
|
90
91
|
begin
|
91
92
|
next error(err, repo, ref) if !err.nil?
|
92
|
-
response
|
93
|
+
add_headers(response, :ref => ref)
|
93
94
|
body(renderer.render(data.key?(:tree) ? :tree : :blob, data))
|
94
95
|
rescue Exception => err
|
95
96
|
error(err, repo, ref)
|
@@ -100,7 +101,7 @@ module Dolt
|
|
100
101
|
def blame(repo, ref, path)
|
101
102
|
actions.blame(repo, ref, path) do |err, data|
|
102
103
|
next error(err, repo, ref) if !err.nil?
|
103
|
-
response
|
104
|
+
add_headers(response, :ref => ref)
|
104
105
|
body(renderer.render(:blame, data))
|
105
106
|
end
|
106
107
|
end
|
@@ -108,7 +109,7 @@ module Dolt
|
|
108
109
|
def history(repo, ref, path, count)
|
109
110
|
actions.history(repo, ref, path, count) do |err, data|
|
110
111
|
next error(err, repo, ref) if !err.nil?
|
111
|
-
response
|
112
|
+
add_headers(response, :ref => ref)
|
112
113
|
body(renderer.render(:commits, data))
|
113
114
|
end
|
114
115
|
end
|
@@ -116,21 +117,38 @@ module Dolt
|
|
116
117
|
def refs(repo)
|
117
118
|
actions.refs(repo) do |err, data|
|
118
119
|
next error(err, repo, ref) if !err.nil?
|
119
|
-
response
|
120
|
+
add_headers(response, :content_type => "application/json")
|
120
121
|
body(renderer.render(:refs, data, :layout => nil))
|
121
122
|
end
|
122
123
|
end
|
123
124
|
|
124
125
|
def tree_history(repo, ref, path, count = 1)
|
125
126
|
actions.tree_history(repo, ref, path, count) do |err, data|
|
126
|
-
|
127
|
+
begin
|
128
|
+
if !err.nil?
|
129
|
+
error(err, repo, ref)
|
130
|
+
else
|
131
|
+
add_headers(response, :content_type => "application/json", :ref => ref)
|
132
|
+
body(renderer.render(:tree_history, data, :layout => nil))
|
133
|
+
end
|
134
|
+
rescue Exception => err
|
127
135
|
error(err, repo, ref)
|
128
|
-
else
|
129
|
-
response["Content-Type"] = "application/json"
|
130
|
-
body(renderer.render(:tree_history, data, :layout => nil))
|
131
136
|
end
|
132
137
|
end
|
133
138
|
end
|
139
|
+
|
140
|
+
private
|
141
|
+
def add_headers(response, headers = {})
|
142
|
+
default_ct = "text/html; charset=utf-8"
|
143
|
+
response["Content-Type"] = headers[:content_type] || default_ct
|
144
|
+
response["X-UA-Compatible"] = "IE=edge"
|
145
|
+
|
146
|
+
if headers[:ref] && headers[:ref].length == 40
|
147
|
+
response["Cache-Control"] = "max-age=315360000, public"
|
148
|
+
year = 60*60*24*365
|
149
|
+
response["Expires"] = (Time.now + year).httpdate
|
150
|
+
end
|
151
|
+
end
|
134
152
|
end
|
135
153
|
end
|
136
154
|
end
|
@@ -137,18 +137,25 @@ describe Dolt::Sinatra::Actions do
|
|
137
137
|
app = DummySinatraApp.new(Actions.new(BlobStub.new), Renderer.new("Blob"))
|
138
138
|
app.blob("gitorious", "master", "app/models/repository.rb")
|
139
139
|
|
140
|
-
assert_equal "text/html", app.response["Content-Type"]
|
140
|
+
assert_equal "text/html; charset=utf-8", app.response["Content-Type"]
|
141
141
|
assert_equal "blob:Blob", app.body
|
142
142
|
end
|
143
143
|
|
144
144
|
it "redirects tree views to tree action" do
|
145
|
-
app = DummySinatraApp.new(Actions.new(TreeStub.new), Renderer.new("
|
145
|
+
app = DummySinatraApp.new(Actions.new(TreeStub.new), Renderer.new("Tree"))
|
146
146
|
app.blob("gitorious", "master", "app/models")
|
147
147
|
|
148
148
|
assert_equal 302, app.response.status
|
149
149
|
assert_equal "/gitorious/tree/master:app/models", app.response["Location"]
|
150
150
|
assert_equal "", app.body
|
151
151
|
end
|
152
|
+
|
153
|
+
it "unescapes ref" do
|
154
|
+
app = DummySinatraApp.new(Actions.new(BlobStub.new), Renderer.new("Blob"))
|
155
|
+
app.blob("gitorious", "issue-%23221", "app/my documents")
|
156
|
+
|
157
|
+
assert_equal "issue-#221", actions.ref
|
158
|
+
end
|
152
159
|
end
|
153
160
|
|
154
161
|
describe "#tree" do
|
@@ -166,7 +173,7 @@ describe Dolt::Sinatra::Actions do
|
|
166
173
|
app = DummySinatraApp.new(Actions.new(TreeStub.new), Renderer.new("Tree"))
|
167
174
|
app.tree("gitorious", "master", "app/models")
|
168
175
|
|
169
|
-
assert_equal "text/html", app.response["Content-Type"]
|
176
|
+
assert_equal "text/html; charset=utf-8", app.response["Content-Type"]
|
170
177
|
assert_equal "tree:Tree", app.body
|
171
178
|
end
|
172
179
|
|
@@ -179,6 +186,28 @@ describe Dolt::Sinatra::Actions do
|
|
179
186
|
assert_equal "/gitorious/blob/master:app/models/repository.rb", location
|
180
187
|
assert_equal "", app.body
|
181
188
|
end
|
189
|
+
|
190
|
+
it "sets X-UA-Compatible header" do
|
191
|
+
app = DummySinatraApp.new(Actions.new(TreeStub.new), Renderer.new("Tree"))
|
192
|
+
app.tree("gitorious", "master", "app/models")
|
193
|
+
|
194
|
+
assert_equal "IE=edge", app.response["X-UA-Compatible"]
|
195
|
+
end
|
196
|
+
|
197
|
+
it "does not set cache-control header for head ref" do
|
198
|
+
app = DummySinatraApp.new(Actions.new(TreeStub.new), Renderer.new("Tree"))
|
199
|
+
app.tree("gitorious", "master", "app/models")
|
200
|
+
|
201
|
+
assert !app.response.key?("Cache-Control")
|
202
|
+
end
|
203
|
+
|
204
|
+
it "sets cache headers for full oid ref" do
|
205
|
+
app = DummySinatraApp.new(Actions.new(TreeStub.new), Renderer.new("Tree"))
|
206
|
+
app.tree("gitorious", "a" * 40, "app/models")
|
207
|
+
|
208
|
+
assert_equal "max-age=315360000, public", app.response["Cache-Control"]
|
209
|
+
refute_nil app.response["Expires"]
|
210
|
+
end
|
182
211
|
end
|
183
212
|
|
184
213
|
describe "#tree_entry" do
|
@@ -186,7 +215,7 @@ describe Dolt::Sinatra::Actions do
|
|
186
215
|
app = DummySinatraApp.new(Actions.new(TreeStub.new), Renderer.new("Tree"))
|
187
216
|
app.tree_entry("gitorious", "master", "app/models")
|
188
217
|
|
189
|
-
assert_equal "text/html", app.response["Content-Type"]
|
218
|
+
assert_equal "text/html; charset=utf-8", app.response["Content-Type"]
|
190
219
|
assert_equal "tree:Tree", app.body
|
191
220
|
end
|
192
221
|
|
@@ -194,7 +223,7 @@ describe Dolt::Sinatra::Actions do
|
|
194
223
|
app = DummySinatraApp.new(Actions.new(BlobStub.new), Renderer.new("Blob"))
|
195
224
|
app.tree_entry("gitorious", "master", "app/models")
|
196
225
|
|
197
|
-
assert_equal "text/html", app.response["Content-Type"]
|
226
|
+
assert_equal "text/html; charset=utf-8", app.response["Content-Type"]
|
198
227
|
assert_equal "blob:Blob", app.body
|
199
228
|
end
|
200
229
|
end
|
@@ -244,7 +273,7 @@ describe Dolt::Sinatra::Actions do
|
|
244
273
|
app = DummySinatraApp.new(Actions.new(BlobStub.new), Renderer.new("Text"))
|
245
274
|
app.blame("gitorious", "master", "app/models/repository.rb")
|
246
275
|
|
247
|
-
assert_equal "text/html", app.response["Content-Type"]
|
276
|
+
assert_equal "text/html; charset=utf-8", app.response["Content-Type"]
|
248
277
|
assert_equal "blame:Text", app.body
|
249
278
|
end
|
250
279
|
end
|
@@ -264,7 +293,7 @@ describe Dolt::Sinatra::Actions do
|
|
264
293
|
app = DummySinatraApp.new(Actions.new(BlobStub.new), Renderer.new("Text"))
|
265
294
|
app.history("gitorious", "master", "app/models/repository.rb", 10)
|
266
295
|
|
267
|
-
assert_equal "text/html", app.response["Content-Type"]
|
296
|
+
assert_equal "text/html; charset=utf-8", app.response["Content-Type"]
|
268
297
|
assert_equal "commits:Text", app.body
|
269
298
|
end
|
270
299
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dolt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: libdolt
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '0.
|
21
|
+
version: '0.14'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '0.
|
29
|
+
version: '0.14'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: thin
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -155,22 +155,6 @@ dependencies:
|
|
155
155
|
- - ~>
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '0.9'
|
158
|
-
- !ruby/object:Gem::Dependency
|
159
|
-
name: mocha
|
160
|
-
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
|
-
requirements:
|
163
|
-
- - ! '>='
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
version: '0'
|
166
|
-
type: :development
|
167
|
-
prerelease: false
|
168
|
-
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
|
-
requirements:
|
171
|
-
- - ! '>='
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
174
158
|
description: Dolt serves git trees and syntax highlighted blobs
|
175
159
|
email:
|
176
160
|
- christian@gitorious.org
|