dolt 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +21 -18
- data/Readme.md +3 -5
- data/bin/dolt +3 -6
- data/dolt.gemspec +5 -16
- data/lib/dolt/sinatra/multi_repo_browser.rb +3 -3
- data/lib/dolt/sinatra/single_repo_browser.rb +3 -3
- data/test/test_helper.rb +5 -3
- data/vendor/ui/css/gitorious.css +5 -0
- metadata +23 -239
- data/lib/dolt/async/when.rb +0 -128
- data/lib/dolt/disk_repo_resolver.rb +0 -39
- data/lib/dolt/git/blame.rb +0 -112
- data/lib/dolt/git/commit.rb +0 -73
- data/lib/dolt/git/repository.rb +0 -139
- data/lib/dolt/git/submodule.rb +0 -35
- data/lib/dolt/git/tree.rb +0 -42
- data/lib/dolt/repo_actions.rb +0 -91
- data/lib/dolt/template_renderer.rb +0 -67
- data/lib/dolt/version.rb +0 -21
- data/lib/dolt/view.rb +0 -23
- data/lib/dolt/view/binary_blob_embedder.rb +0 -41
- data/lib/dolt/view/blame.rb +0 -57
- data/lib/dolt/view/blob.rb +0 -97
- data/lib/dolt/view/breadcrumb.rb +0 -47
- data/lib/dolt/view/commit.rb +0 -27
- data/lib/dolt/view/gravatar.rb +0 -29
- data/lib/dolt/view/markup.rb +0 -107
- data/lib/dolt/view/multi_repository.rb +0 -27
- data/lib/dolt/view/object.rb +0 -44
- data/lib/dolt/view/single_repository.rb +0 -27
- data/lib/dolt/view/smart_blob_renderer.rb +0 -33
- data/lib/dolt/view/syntax_highlight.rb +0 -90
- data/lib/dolt/view/tab_width.rb +0 -30
- data/lib/dolt/view/tree.rb +0 -100
- data/test/dolt/async/when_test.rb +0 -112
- data/test/dolt/git/blame_test.rb +0 -128
- data/test/dolt/git/commit_test.rb +0 -89
- data/test/dolt/git/repository_test.rb +0 -186
- data/test/dolt/repo_actions_test.rb +0 -236
- data/test/dolt/template_renderer_test.rb +0 -122
- data/test/dolt/templates/blame_test.rb +0 -56
- data/test/dolt/templates/blob_test.rb +0 -118
- data/test/dolt/templates/commits_test.rb +0 -61
- data/test/dolt/templates/raw_test.rb +0 -41
- data/test/dolt/templates/refs_test.rb +0 -38
- data/test/dolt/templates/tree_history_test.rb +0 -93
- data/test/dolt/templates/tree_test.rb +0 -65
- data/test/dolt/view/binary_blob_embedder_test.rb +0 -49
- data/test/dolt/view/blame_test.rb +0 -122
- data/test/dolt/view/blob_test.rb +0 -116
- data/test/dolt/view/breadcrumb_test.rb +0 -46
- data/test/dolt/view/commit_test.rb +0 -31
- data/test/dolt/view/gravatar_test.rb +0 -30
- data/test/dolt/view/markup_test.rb +0 -94
- data/test/dolt/view/multi_repository_test.rb +0 -35
- data/test/dolt/view/object_test.rb +0 -83
- data/test/dolt/view/single_repository_test.rb +0 -30
- data/test/dolt/view/smart_blob_renderer_test.rb +0 -38
- data/test/dolt/view/syntax_highlight_test.rb +0 -108
- data/test/dolt/view/tab_width_test.rb +0 -40
- data/test/dolt/view/tree_test.rb +0 -199
- data/views/500.erb +0 -22
- data/views/blame.erb +0 -42
- data/views/blob.erb +0 -31
- data/views/commits.erb +0 -26
- data/views/index.erb +0 -25
- data/views/layout.erb +0 -45
- data/views/raw.erb +0 -19
- data/views/refs.erb +0 -22
- data/views/tree.erb +0 -50
- data/views/tree_history.erb +0 -19
data/lib/dolt/git/submodule.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#--
|
3
|
-
# Copyright (C) 2012 Gitorious AS
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU Affero General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU Affero General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU Affero General Public License
|
16
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
-
#++
|
18
|
-
|
19
|
-
module Dolt
|
20
|
-
module Git
|
21
|
-
class Submodule
|
22
|
-
def self.parse_config(config)
|
23
|
-
config.split("\n").inject([]) do |modules, line|
|
24
|
-
if line =~ /\[submodule ".*"\]/
|
25
|
-
modules << {}
|
26
|
-
else
|
27
|
-
_, key, val = *line.match(/\s([^\s]+) = ([^\s]+)/)
|
28
|
-
modules.last[key.to_sym] = val
|
29
|
-
end
|
30
|
-
modules
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/lib/dolt/git/tree.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#--
|
3
|
-
# Copyright (C) 2012 Gitorious AS
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU Affero General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU Affero General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU Affero General Public License
|
16
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
-
#++
|
18
|
-
|
19
|
-
module Dolt
|
20
|
-
module Git
|
21
|
-
class Tree
|
22
|
-
attr_reader :oid, :entries
|
23
|
-
include Enumerable
|
24
|
-
|
25
|
-
def initialize(oid, entries)
|
26
|
-
@oid = oid
|
27
|
-
@entries = entries
|
28
|
-
end
|
29
|
-
|
30
|
-
def each(&block)
|
31
|
-
entries.each(&block)
|
32
|
-
end
|
33
|
-
|
34
|
-
# From Rugged::Tree
|
35
|
-
def inspect
|
36
|
-
data = "#<Dolt::Git::Tree:#{object_id} {oid: #{oid}}>\n"
|
37
|
-
self.each { |e| data << " <\"#{e[:name]}\" #{e[:oid]}>\n" }
|
38
|
-
data
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
data/lib/dolt/repo_actions.rb
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
|
2
|
-
# encoding: utf-8
|
3
|
-
#--
|
4
|
-
# Copyright (C) 2012 Gitorious AS
|
5
|
-
#
|
6
|
-
# This program is free software: you can redistribute it and/or modify
|
7
|
-
# it under the terms of the GNU Affero General Public License as published by
|
8
|
-
# the Free Software Foundation, either version 3 of the License, or
|
9
|
-
# (at your option) any later version.
|
10
|
-
#
|
11
|
-
# This program is distributed in the hope that it will be useful,
|
12
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
-
# GNU Affero General Public License for more details.
|
15
|
-
#
|
16
|
-
# You should have received a copy of the GNU Affero General Public License
|
17
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18
|
-
#++
|
19
|
-
require "eventmachine"
|
20
|
-
|
21
|
-
module Dolt
|
22
|
-
class RepoActions
|
23
|
-
def initialize(repo_resolver)
|
24
|
-
@repo_resolver = repo_resolver
|
25
|
-
end
|
26
|
-
|
27
|
-
def blob(repo, ref, path, &block)
|
28
|
-
repo_action(repo, ref, path, :blob, :rev_parse, "#{ref}:#{path}", &block)
|
29
|
-
end
|
30
|
-
|
31
|
-
def tree(repo, ref, path, &block)
|
32
|
-
repo_action(repo, ref, path, :tree, :tree, ref, path, &block)
|
33
|
-
end
|
34
|
-
|
35
|
-
def blame(repo, ref, path, &block)
|
36
|
-
repo_action(repo, ref, path, :blame, :blame, ref, path, &block)
|
37
|
-
end
|
38
|
-
|
39
|
-
def history(repo, ref, path, count, &block)
|
40
|
-
repo_action(repo, ref, path, :commits, :log, ref, path, count, &block)
|
41
|
-
end
|
42
|
-
|
43
|
-
def refs(repo, &block)
|
44
|
-
repository = repo_resolver.resolve(repo)
|
45
|
-
d = repository.refs
|
46
|
-
d.callback do |refs|
|
47
|
-
names = refs.map(&:name)
|
48
|
-
block.call(nil, {
|
49
|
-
:repository => repo,
|
50
|
-
:tags => stripped_ref_names(names, :tags),
|
51
|
-
:heads => stripped_ref_names(names, :heads)
|
52
|
-
})
|
53
|
-
end
|
54
|
-
d.errback { |err| block.call(err, nil) }
|
55
|
-
end
|
56
|
-
|
57
|
-
def tree_history(repo, ref, path, count, &block)
|
58
|
-
repo_action(repo, ref, path, :tree, :tree_history, ref, path, count, &block)
|
59
|
-
end
|
60
|
-
|
61
|
-
def repositories
|
62
|
-
repo_resolver.all
|
63
|
-
end
|
64
|
-
|
65
|
-
private
|
66
|
-
def repo_resolver; @repo_resolver; end
|
67
|
-
|
68
|
-
def repo_action(repo, ref, path, data, method, *args, &block)
|
69
|
-
repository = repo_resolver.resolve(repo)
|
70
|
-
d = repository.send(method, *args)
|
71
|
-
d.callback do |result|
|
72
|
-
block.call(nil, tpl_data(repo, ref, path, { data => result }))
|
73
|
-
end
|
74
|
-
d.errback { |err| block.call(err, nil) }
|
75
|
-
end
|
76
|
-
|
77
|
-
def tpl_data(repo, ref, path, locals = {})
|
78
|
-
{
|
79
|
-
:repository => repo,
|
80
|
-
:path => path,
|
81
|
-
:ref => ref
|
82
|
-
}.merge(locals)
|
83
|
-
end
|
84
|
-
|
85
|
-
def stripped_ref_names(names, type)
|
86
|
-
names.select { |n| n =~ /#{type}/ }.map do |n|
|
87
|
-
n.sub(/^refs\/#{type}\//, "")
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#--
|
3
|
-
# Copyright (C) 2012 Gitorious AS
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU Affero General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU Affero General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU Affero General Public License
|
16
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
-
#++
|
18
|
-
require "tilt"
|
19
|
-
require "json"
|
20
|
-
|
21
|
-
# Need consistent Time formatting in JSON
|
22
|
-
require "time"
|
23
|
-
class Time; def to_json(*args); "\"#{iso8601}\""; end; end
|
24
|
-
|
25
|
-
module Dolt
|
26
|
-
class TemplateRenderer
|
27
|
-
def initialize(template_root, opt = {})
|
28
|
-
@template_root = template_root
|
29
|
-
@cache = {} if !opt.key?(:cache) || opt[:cache]
|
30
|
-
@layout = opt[:layout]
|
31
|
-
@type = opt[:type] || "erb"
|
32
|
-
@context_class = Class.new
|
33
|
-
end
|
34
|
-
|
35
|
-
def helper(helper)
|
36
|
-
helper = [helper] unless Array === helper
|
37
|
-
helper.each { |h| @context_class.send(:include, h) }
|
38
|
-
end
|
39
|
-
|
40
|
-
def render(template, locals = {}, options = {})
|
41
|
-
context = context_class.new
|
42
|
-
content = load(template).render(context, locals)
|
43
|
-
layout_tpl = options.key?(:layout) ? options[:layout] : layout
|
44
|
-
|
45
|
-
if !layout_tpl.nil?
|
46
|
-
content = load(layout_tpl).render(context, locals) { content }
|
47
|
-
end
|
48
|
-
|
49
|
-
content
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
def load(name)
|
54
|
-
file_name = File.join(template_root, "#{name}.#{type}")
|
55
|
-
return cache[file_name] if cache && cache[file_name]
|
56
|
-
template = Tilt.new(file_name)
|
57
|
-
cache[file_name] = template if cache
|
58
|
-
template
|
59
|
-
end
|
60
|
-
|
61
|
-
def template_root; @template_root; end
|
62
|
-
def cache; @cache; end
|
63
|
-
def layout; @layout; end
|
64
|
-
def type; @type; end
|
65
|
-
def context_class; @context_class; end
|
66
|
-
end
|
67
|
-
end
|
data/lib/dolt/version.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#--
|
3
|
-
# Copyright (C) 2012 Gitorious AS
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU Affero General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU Affero General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU Affero General Public License
|
16
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
-
#++
|
18
|
-
|
19
|
-
module Dolt
|
20
|
-
VERSION = "0.5.1"
|
21
|
-
end
|
data/lib/dolt/view.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#--
|
3
|
-
# Copyright (C) 2012 Gitorious AS
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU Affero General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU Affero General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU Affero General Public License
|
16
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
-
#++
|
18
|
-
|
19
|
-
dir = File.join(File.dirname(__FILE__), "view")
|
20
|
-
|
21
|
-
Dir.entries(dir).select { |f| f =~ /\.rb$/ }.map do |file|
|
22
|
-
require(File.join(dir, file))
|
23
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#--
|
3
|
-
# Copyright (C) 2012 Gitorious AS
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU Affero General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU Affero General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU Affero General Public License
|
16
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
-
#++
|
18
|
-
require "mime/types"
|
19
|
-
|
20
|
-
module Dolt
|
21
|
-
module View
|
22
|
-
module BinaryBlobEmbedder
|
23
|
-
def image?(path, content)
|
24
|
-
MIME::Types.type_for(path).any? { |mt| mt.media_type == "image" }
|
25
|
-
end
|
26
|
-
|
27
|
-
def format_binary_blob(path, content, repository, ref)
|
28
|
-
if !image?(path, content)
|
29
|
-
return link_binary_blob(path, content, repository, ref)
|
30
|
-
end
|
31
|
-
|
32
|
-
url = raw_url(repository, ref, path)
|
33
|
-
<<-HTML
|
34
|
-
<p class="prettyprint">
|
35
|
-
<a href="#{url}"><img src="#{url}" alt="#{path}"></a>
|
36
|
-
</p>
|
37
|
-
HTML
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
data/lib/dolt/view/blame.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#--
|
3
|
-
# Copyright (C) 2012 Gitorious AS
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU Affero General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU Affero General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU Affero General Public License
|
16
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
-
#++
|
18
|
-
|
19
|
-
module Dolt
|
20
|
-
module View
|
21
|
-
module Blame
|
22
|
-
def blame_annotations(blame)
|
23
|
-
blame.chunks.inject([]) do |blames, chunk|
|
24
|
-
blames << chunk
|
25
|
-
(chunk[:lines].length - 1).times { blames << nil }
|
26
|
-
blames
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def blame_lines(path, blame)
|
31
|
-
lines = blame.chunks.inject([]) do |lines, chunk|
|
32
|
-
lines.concat(chunk[:lines])
|
33
|
-
end
|
34
|
-
|
35
|
-
return lines unless respond_to?(:highlight)
|
36
|
-
highlight(path, lines.join("\n")).split("\n")
|
37
|
-
end
|
38
|
-
|
39
|
-
def blame_annotation_cell(annotation)
|
40
|
-
class_name = "gts-blame-annotation" + (annotation.nil? ? "" : " gts-annotated")
|
41
|
-
return "<td class=\"#{class_name}\"></td>" if annotation.nil?
|
42
|
-
|
43
|
-
<<-HTML
|
44
|
-
<td class="#{class_name}">
|
45
|
-
<span class="gts-sha">#{annotation[:oid][0..7]}</span>
|
46
|
-
#{annotation[:committer][:time].strftime("%Y-%m-%d")}
|
47
|
-
#{annotation[:committer][:name]}
|
48
|
-
</td>
|
49
|
-
HTML
|
50
|
-
end
|
51
|
-
|
52
|
-
def blame_code_cell(line)
|
53
|
-
"<td class=\"gts-code\"><code>#{line}</code></td>"
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
data/lib/dolt/view/blob.rb
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#--
|
3
|
-
# Copyright (C) 2012 Gitorious AS
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU Affero General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU Affero General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU Affero General Public License
|
16
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
-
#++
|
18
|
-
require "htmlentities"
|
19
|
-
|
20
|
-
module Dolt
|
21
|
-
module View
|
22
|
-
module Blob
|
23
|
-
def binary?(content)
|
24
|
-
!content[0...(content.length-1)].index("\000").nil?
|
25
|
-
end
|
26
|
-
|
27
|
-
def entityfy(content)
|
28
|
-
@coder ||= HTMLEntities.new
|
29
|
-
@coder.encode(content)
|
30
|
-
end
|
31
|
-
|
32
|
-
def format_blob(path, content, repo = nil, ref = nil)
|
33
|
-
return format_binary_blob(path, content, repo, ref) if binary?(content)
|
34
|
-
format_text_blob(path, content, repo, ref)
|
35
|
-
end
|
36
|
-
|
37
|
-
def format_binary_blob(path, content, repository = nil, ref = nil)
|
38
|
-
link_binary_blob(path, content, repository, ref)
|
39
|
-
end
|
40
|
-
|
41
|
-
def link_binary_blob(path, content, repository = nil, ref = nil)
|
42
|
-
<<-HTML
|
43
|
-
<p class="prettyprint">
|
44
|
-
The content you're attempting to browse appears to be binary.
|
45
|
-
<a href="#{raw_url(repository, ref, path)}">Download #{File.basename(path)}</a>.
|
46
|
-
</p>
|
47
|
-
HTML
|
48
|
-
end
|
49
|
-
|
50
|
-
def format_text_blob(path, content, repository = nil, ref = nil)
|
51
|
-
multiline(entityfy(content))
|
52
|
-
end
|
53
|
-
|
54
|
-
def blob_url(repository, ref, path)
|
55
|
-
repo_url(repository, "/blob/#{ref}:#{path}")
|
56
|
-
end
|
57
|
-
|
58
|
-
def blame_url(repository, ref, path)
|
59
|
-
repo_url(repository, "/blame/#{ref}:#{path}")
|
60
|
-
end
|
61
|
-
|
62
|
-
def history_url(repository, ref, path)
|
63
|
-
repo_url(repository, "/history/#{ref}:#{path}")
|
64
|
-
end
|
65
|
-
|
66
|
-
def raw_url(repository, ref, path)
|
67
|
-
repo_url(repository, "/raw/#{ref}:#{path}")
|
68
|
-
end
|
69
|
-
|
70
|
-
def tree_history_url(repository, ref, path)
|
71
|
-
repo_url(repository, "/tree_history/#{ref}:#{path}")
|
72
|
-
end
|
73
|
-
|
74
|
-
def format_whitespace(text)
|
75
|
-
text
|
76
|
-
end
|
77
|
-
|
78
|
-
def multiline(blob, options = {})
|
79
|
-
class_names = options[:class_names] || []
|
80
|
-
class_names << "prettyprint" << "linenums"
|
81
|
-
|
82
|
-
num = 0
|
83
|
-
lines = blob.split("\n").inject("") do |html, line|
|
84
|
-
num += 1
|
85
|
-
# Empty elements causes annoying rendering artefacts
|
86
|
-
# Forcing one space on each line affects copy-paste negatively
|
87
|
-
# TODO: Don't force one space, find CSS fix
|
88
|
-
line = format_whitespace(line).sub(/^$/, " ")
|
89
|
-
"#{html}<li class=\"L#{num}\"><span class=\"line\">#{line}</span></li>"
|
90
|
-
end
|
91
|
-
|
92
|
-
"<pre class=\"#{class_names.join(' ')}\">" +
|
93
|
-
"<ol class=\"linenums\">#{lines}</ol></pre>"
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|