dolt 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +25 -5
- data/Readme.md +90 -16
- data/bin/dolt +22 -4
- data/dolt.gemspec +10 -2
- data/lib/dolt/disk_repo_resolver.rb +3 -5
- data/lib/dolt/git/blame.rb +112 -0
- data/lib/dolt/git/commit.rb +73 -0
- data/lib/dolt/git/repository.rb +26 -24
- data/lib/dolt/repo_actions.rb +32 -19
- data/lib/dolt/sinatra/actions.rb +51 -18
- data/lib/dolt/sinatra/multi_repo_browser.rb +30 -3
- data/lib/dolt/sinatra/single_repo_browser.rb +36 -2
- data/lib/dolt/template_renderer.rb +7 -8
- data/lib/dolt/version.rb +1 -1
- data/lib/dolt/view.rb +3 -61
- data/lib/dolt/view/blame.rb +57 -0
- data/lib/dolt/view/blob.rb +60 -0
- data/lib/dolt/view/breadcrumb.rb +10 -17
- data/lib/dolt/{git/blob.rb → view/commit.rb} +5 -11
- data/lib/dolt/view/gravatar.rb +29 -0
- data/lib/dolt/{git/shell.rb → view/markup.rb} +10 -16
- data/lib/dolt/view/multi_repository.rb +27 -0
- data/lib/dolt/{async/deferrable_child_process.rb → view/object.rb} +11 -24
- data/lib/dolt/view/single_repository.rb +27 -0
- data/lib/dolt/view/smart_blob_renderer.rb +33 -0
- data/lib/dolt/view/syntax_highlight.rb +86 -0
- data/lib/dolt/view/tree.rb +69 -0
- data/test/dolt/git/blame_test.rb +128 -0
- data/test/dolt/git/commit_test.rb +89 -0
- data/test/dolt/git/repository_test.rb +24 -73
- data/test/dolt/repo_actions_test.rb +77 -15
- data/test/dolt/sinatra/actions_test.rb +168 -8
- data/test/dolt/template_renderer_test.rb +44 -10
- data/test/dolt/templates/blame_test.rb +56 -0
- data/test/dolt/{views → templates}/blob_test.rb +44 -34
- data/test/dolt/templates/commits_test.rb +61 -0
- data/test/dolt/templates/raw_test.rb +41 -0
- data/test/dolt/templates/tree_test.rb +51 -0
- data/test/dolt/view/blame_test.rb +122 -0
- data/test/dolt/view/blob_test.rb +90 -0
- data/test/dolt/view/breadcrumb_test.rb +46 -0
- data/test/dolt/view/commit_test.rb +31 -0
- data/test/dolt/view/gravatar_test.rb +30 -0
- data/test/dolt/view/markup_test.rb +30 -0
- data/test/dolt/{git/blob_test.rb → view/multi_repository_test.rb} +10 -24
- data/test/dolt/view/object_test.rb +71 -0
- data/test/dolt/view/single_repository_test.rb +30 -0
- data/test/dolt/{view_test.rb → view/syntax_highlight_test.rb} +40 -27
- data/test/dolt/view/tree_test.rb +115 -0
- data/test/test_helper.rb +18 -13
- data/vendor/ui/css/gitorious.css +20 -8
- data/views/blame.erb +41 -0
- data/views/blob.erb +6 -9
- data/views/commits.erb +23 -0
- data/views/index.erb +25 -0
- data/views/raw.erb +19 -0
- data/views/tree.erb +28 -26
- metadata +156 -26
- data/lib/dolt/git/tree.rb +0 -65
- data/lib/dolt/view/highlighter.rb +0 -52
- data/test/dolt/git/shell_test.rb +0 -112
- data/test/dolt/git/tree_test.rb +0 -120
data/lib/dolt/git/tree.rb
DELETED
@@ -1,65 +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
|
-
module Dolt
|
19
|
-
module Git
|
20
|
-
class Tree
|
21
|
-
attr_reader :path, :entries
|
22
|
-
|
23
|
-
def initialize(path, entries)
|
24
|
-
@path = path
|
25
|
-
@entries = entries
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.parse(path, ls_tree_payload)
|
29
|
-
path = path == "" ? "./" : path
|
30
|
-
|
31
|
-
entries = ls_tree_payload.split("\n").collect do |line|
|
32
|
-
pieces = line.split(/\s+/)
|
33
|
-
klass = pieces[1] == "blob" ? File : Dir
|
34
|
-
klass.new(pieces[3], pieces[2], pieces[0])
|
35
|
-
end
|
36
|
-
|
37
|
-
dirs = entries.reject { |e| e.file? }.sort_by(&:path)
|
38
|
-
files = entries.reject { |e| e.dir? }.sort_by(&:path)
|
39
|
-
new(path, dirs + files)
|
40
|
-
end
|
41
|
-
|
42
|
-
class Entry
|
43
|
-
attr_reader :full_path, :path, :sha, :mode
|
44
|
-
|
45
|
-
def initialize(path, sha, mode)
|
46
|
-
@full_path = path
|
47
|
-
@path = ::File.basename(path)
|
48
|
-
@sha = sha
|
49
|
-
@mode = mode
|
50
|
-
end
|
51
|
-
|
52
|
-
def file?; false; end
|
53
|
-
def dir?; false; end
|
54
|
-
end
|
55
|
-
|
56
|
-
class File < Entry
|
57
|
-
def file?; true; end
|
58
|
-
end
|
59
|
-
|
60
|
-
class Dir < Entry
|
61
|
-
def dir?; true; end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,52 +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 "pygments"
|
19
|
-
|
20
|
-
module Dolt
|
21
|
-
module View
|
22
|
-
class Highlighter
|
23
|
-
def initialize(options = {})
|
24
|
-
@options = options
|
25
|
-
options[:options] ||= {}
|
26
|
-
options[:options][:nowrap] = true
|
27
|
-
options[:options][:encoding] = options[:options][:encoding]|| "utf-8"
|
28
|
-
end
|
29
|
-
|
30
|
-
def highlight(code, lexer)
|
31
|
-
Pygments.highlight(code, options.merge(:lexer => lexer))
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.lexer(suffix)
|
35
|
-
@@lexer_aliases[suffix] || suffix
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.add_lexer_alias(extension, lexer)
|
39
|
-
@@lexer_aliases ||= {}
|
40
|
-
@@lexer_aliases[extension] = lexer
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
def options; @options; end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
Dolt::View::Highlighter.add_lexer_alias("yml", "yaml")
|
50
|
-
Dolt::View::Highlighter.add_lexer_alias("Rakefile", "rb")
|
51
|
-
Dolt::View::Highlighter.add_lexer_alias("Gemfile", "rb")
|
52
|
-
Dolt::View::Highlighter.add_lexer_alias("gemspec", "rb")
|
data/test/dolt/git/shell_test.rb
DELETED
@@ -1,112 +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 "test_helper"
|
19
|
-
require "mocha"
|
20
|
-
require "eventmachine"
|
21
|
-
require "dolt/git/shell"
|
22
|
-
|
23
|
-
describe Dolt::Git::Shell do
|
24
|
-
include EM::MiniTest::Spec
|
25
|
-
include Dolt::StdioStub
|
26
|
-
|
27
|
-
describe "#git" do
|
28
|
-
it "assumes git dir in work tree" do
|
29
|
-
expected_cmd = ["git --git-dir /somewhere/.git ",
|
30
|
-
"--work-tree /somewhere log"].join
|
31
|
-
Dolt::DeferrableChildProcess.expects(:open).with(expected_cmd)
|
32
|
-
git = Dolt::Git::Shell.new("/somewhere")
|
33
|
-
git.git("log")
|
34
|
-
end
|
35
|
-
|
36
|
-
it "uses provided git dir" do
|
37
|
-
expected_cmd = ["git --git-dir /somewhere/.git ",
|
38
|
-
"--work-tree /elsewhere log"].join
|
39
|
-
Dolt::DeferrableChildProcess.expects(:open).with(expected_cmd)
|
40
|
-
git = Dolt::Git::Shell.new("/elsewhere", "/somewhere/.git")
|
41
|
-
git.git("log")
|
42
|
-
end
|
43
|
-
|
44
|
-
it "returns deferrable" do
|
45
|
-
silence_stderr do
|
46
|
-
git = Dolt::Git::Shell.new("/somwhere")
|
47
|
-
result = git.git("log")
|
48
|
-
|
49
|
-
assert result.respond_to?(:callback)
|
50
|
-
assert result.respond_to?(:errback)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
it "joins arguments with spaces" do
|
55
|
-
expected_cmd = ["git --git-dir /somewhere/.git ",
|
56
|
-
"--work-tree /somewhere push origin master"].join
|
57
|
-
Dolt::DeferrableChildProcess.expects(:open).with(expected_cmd)
|
58
|
-
git = Dolt::Git::Shell.new("/somewhere")
|
59
|
-
git.git("push", "origin", "master")
|
60
|
-
end
|
61
|
-
|
62
|
-
it "calls errback when git operation fails" do
|
63
|
-
silence_stderr do
|
64
|
-
git = Dolt::Git::Shell.new("/somewhere")
|
65
|
-
result = git.git("push", "origin", "master")
|
66
|
-
result.errback do |status|
|
67
|
-
refute status.nil?
|
68
|
-
done!
|
69
|
-
end
|
70
|
-
wait!
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
describe "#show" do
|
76
|
-
it "shows a file" do
|
77
|
-
git = Dolt::Git::Shell.new("/somewhere")
|
78
|
-
git.expects(:git).with("show", "master:app/models/repository.rb")
|
79
|
-
result = git.show("app/models/repository.rb", "master")
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
describe "#ls_tree" do
|
84
|
-
it "lists tree root" do
|
85
|
-
git = Dolt::Git::Shell.new("/somewhere")
|
86
|
-
git.expects(:git).with("ls-tree", "master", "./")
|
87
|
-
|
88
|
-
result = git.ls_tree("", "master")
|
89
|
-
end
|
90
|
-
|
91
|
-
it "lists tree root when starting with slash" do
|
92
|
-
git = Dolt::Git::Shell.new("/somewhere")
|
93
|
-
git.expects(:git).with("ls-tree", "master", "./")
|
94
|
-
|
95
|
-
result = git.ls_tree("/", "master")
|
96
|
-
end
|
97
|
-
|
98
|
-
it "lists path with trailing slash" do
|
99
|
-
git = Dolt::Git::Shell.new("/somewhere")
|
100
|
-
git.expects(:git).with("ls-tree", "master", "./app/models/")
|
101
|
-
|
102
|
-
result = git.ls_tree("app/models", "master")
|
103
|
-
end
|
104
|
-
|
105
|
-
it "lists path at given ref" do
|
106
|
-
git = Dolt::Git::Shell.new("/somewhere")
|
107
|
-
git.expects(:git).with("ls-tree", "v2.0.0", "./app/models/")
|
108
|
-
|
109
|
-
result = git.ls_tree("app/models/", "v2.0.0")
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
data/test/dolt/git/tree_test.rb
DELETED
@@ -1,120 +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 "test_helper"
|
19
|
-
require "dolt/git/tree"
|
20
|
-
|
21
|
-
describe Dolt::Git::Tree do
|
22
|
-
describe "parsing root tree" do
|
23
|
-
before do
|
24
|
-
lines = <<-GIT
|
25
|
-
100644 blob e90021f89616ddf86855d05337c188408d3b417e .gitmodules
|
26
|
-
100644 blob c80ee3697054566d1a4247d80be78ec3ddfde295 Gemfile
|
27
|
-
100644 blob 0053b3c95b0d9faa4916f7cd5e559c2b0f138027 Gemfile.lock
|
28
|
-
100644 blob 2ad22ff4b188c256d8ac97ded87c1c6ef6e96e43 Rakefile
|
29
|
-
100644 blob c8d1d197abfcd0f96c47583ec5f4328565cba433 Readme.md
|
30
|
-
040000 tree 18052467e73a1b7fb2613dc7b36baa554fab024b bin
|
31
|
-
100644 blob e83bb675977e7277698320cdd9c595c5698e5aa5 dolt.gemspec
|
32
|
-
040000 tree 4b051dd46c3ba70fbfd6a2484ec00121a70bee3a lib
|
33
|
-
040000 tree 86b096dc99b2cba28daa7676ed0dd38f709527b2 test
|
34
|
-
040000 tree d74d6bcb50cc5de9eb8fe019d7798b04d3a427e9 vendor
|
35
|
-
040000 tree be8fb09b735ac23265db2bec7c23e022a99ee730 views
|
36
|
-
GIT
|
37
|
-
|
38
|
-
@tree = Dolt::Git::Tree.parse("", lines)
|
39
|
-
end
|
40
|
-
|
41
|
-
it "has path" do
|
42
|
-
assert_equal "./", @tree.path
|
43
|
-
end
|
44
|
-
|
45
|
-
it "extracts each line as an entry" do
|
46
|
-
assert_equal 11, @tree.entries.length
|
47
|
-
end
|
48
|
-
|
49
|
-
it "extracts file entry objects" do
|
50
|
-
gemfile = @tree.entries[6]
|
51
|
-
|
52
|
-
assert gemfile.file?
|
53
|
-
assert !gemfile.dir?
|
54
|
-
assert_equal "Gemfile", gemfile.path
|
55
|
-
assert_equal "Gemfile", gemfile.full_path
|
56
|
-
assert_equal "100644", gemfile.mode
|
57
|
-
assert_equal "c80ee3697054566d1a4247d80be78ec3ddfde295", gemfile.sha
|
58
|
-
end
|
59
|
-
|
60
|
-
it "extracts directory entry objects" do
|
61
|
-
bin = @tree.entries[0]
|
62
|
-
|
63
|
-
assert !bin.file?
|
64
|
-
assert bin.dir?
|
65
|
-
assert_equal "bin", bin.path
|
66
|
-
assert_equal "040000", bin.mode
|
67
|
-
assert_equal "18052467e73a1b7fb2613dc7b36baa554fab024b", bin.sha
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
describe "parsing nested tree" do
|
72
|
-
before do
|
73
|
-
lines = <<-GIT
|
74
|
-
040000 tree c1d92125977841b672a10c96c6800e1b360a4e62 lib/dolt/async
|
75
|
-
100644 blob 6da3991090ba2df53eabe05bf4330aadf370a43a lib/dolt/disk_repo_resolver.rb
|
76
|
-
040000 tree 0142bdb42936094cdd92aa188d3193be85f7a6c1 lib/dolt/git
|
77
|
-
100644 blob 2b8674702e62aaa5607317ed83085e74a62b9781 lib/dolt/repo_actions.rb
|
78
|
-
040000 tree d93b4afc62ad460387cf5d91d98d1ad306219419 lib/dolt/sinatra
|
79
|
-
100644 blob 2a7e89f4b940e23a3d921199d9000e93da299872 lib/dolt/template_renderer.rb
|
80
|
-
100644 blob dfe78a965009e27d9cce7c9733787acb564b6630 lib/dolt/version.rb
|
81
|
-
100644 blob 685369dd2a66f0313b232ee898f8bbdafec6862d lib/dolt/view.rb
|
82
|
-
040000 tree 78347f337aaa613eb0a1c27ae7f89e39a22dcd6f lib/dolt/view
|
83
|
-
GIT
|
84
|
-
|
85
|
-
@tree = Dolt::Git::Tree.parse("lib/dolt", lines)
|
86
|
-
end
|
87
|
-
|
88
|
-
it "does not include ./ in path" do
|
89
|
-
assert_equal "lib/dolt", @tree.path
|
90
|
-
end
|
91
|
-
|
92
|
-
it "strips root path from entries" do
|
93
|
-
assert_equal "disk_repo_resolver.rb", @tree.entries[4].path
|
94
|
-
end
|
95
|
-
|
96
|
-
it "groups tree by type, dirs first" do
|
97
|
-
assert @tree.entries[0].dir?
|
98
|
-
assert @tree.entries[1].dir?
|
99
|
-
assert @tree.entries[2].dir?
|
100
|
-
assert @tree.entries[3].dir?
|
101
|
-
assert @tree.entries[4].file?
|
102
|
-
assert @tree.entries[5].file?
|
103
|
-
assert @tree.entries[6].file?
|
104
|
-
assert @tree.entries[7].file?
|
105
|
-
assert @tree.entries[8].file?
|
106
|
-
end
|
107
|
-
|
108
|
-
it "sorts tree entries alphabetically" do
|
109
|
-
assert_equal "async", @tree.entries[0].path
|
110
|
-
assert_equal "git", @tree.entries[1].path
|
111
|
-
assert_equal "sinatra", @tree.entries[2].path
|
112
|
-
assert_equal "view", @tree.entries[3].path
|
113
|
-
assert_equal "disk_repo_resolver.rb", @tree.entries[4].path
|
114
|
-
assert_equal "repo_actions.rb", @tree.entries[5].path
|
115
|
-
assert_equal "template_renderer.rb", @tree.entries[6].path
|
116
|
-
assert_equal "version.rb", @tree.entries[7].path
|
117
|
-
assert_equal "view.rb", @tree.entries[8].path
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|