mojombo-grit 0.8.1 → 0.9.3
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/History.txt +7 -0
- data/Manifest.txt +18 -1
- data/grit.gemspec +56 -10
- data/lib/{mojombo-grit.rb → grit.rb} +20 -4
- data/lib/grit/commit.rb +32 -11
- data/lib/grit/commit_stats.rb +104 -0
- data/lib/grit/git-ruby.rb +182 -0
- data/lib/grit/git-ruby/commit_db.rb +52 -0
- data/lib/grit/git-ruby/file_index.rb +186 -0
- data/lib/grit/git-ruby/git_object.rb +344 -0
- data/lib/grit/git-ruby/internal/loose.rb +136 -0
- data/lib/grit/git-ruby/internal/mmap.rb +58 -0
- data/lib/grit/git-ruby/internal/pack.rb +382 -0
- data/lib/grit/git-ruby/internal/raw_object.rb +37 -0
- data/lib/grit/git-ruby/object.rb +319 -0
- data/lib/grit/git-ruby/repository.rb +729 -0
- data/lib/grit/git.rb +33 -15
- data/lib/grit/head.rb +6 -15
- data/lib/grit/index.rb +121 -0
- data/lib/grit/ref.rb +95 -0
- data/lib/grit/repo.rb +95 -6
- data/lib/grit/status.rb +151 -0
- data/lib/grit/tree.rb +3 -2
- data/test/test_blob.rb +5 -0
- data/test/test_commit.rb +7 -5
- data/test/test_diff.rb +1 -1
- data/test/test_git.rb +20 -2
- data/test/test_grit.rb +32 -0
- data/test/test_head.rb +30 -5
- data/test/test_real.rb +8 -6
- data/test/test_remote.rb +14 -0
- data/test/test_repo.rb +86 -79
- data/test/test_tag.rb +2 -6
- data/test/test_tree.rb +5 -0
- metadata +40 -40
- data/test/fixtures/blame +0 -131
- data/test/fixtures/cat_file_blob +0 -1
- data/test/fixtures/cat_file_blob_size +0 -1
- data/test/fixtures/diff_2 +0 -54
- data/test/fixtures/diff_2f +0 -19
- data/test/fixtures/diff_f +0 -15
- data/test/fixtures/diff_i +0 -201
- data/test/fixtures/diff_mode_only +0 -1152
- data/test/fixtures/diff_new_mode +0 -17
- data/test/fixtures/diff_p +0 -610
- data/test/fixtures/for_each_ref +0 -0
- data/test/fixtures/for_each_ref_tags +0 -0
- data/test/fixtures/ls_tree_a +0 -7
- data/test/fixtures/ls_tree_b +0 -2
- data/test/fixtures/ls_tree_commit +0 -3
- data/test/fixtures/rev_list +0 -26
- data/test/fixtures/rev_list_count +0 -655
- data/test/fixtures/rev_list_single +0 -7
- data/test/fixtures/rev_parse +0 -1
- data/test/fixtures/show_empty_commit +0 -6
- data/test/fixtures/simple_config +0 -2
- data/test/helper.rb +0 -17
- data/test/profile.rb +0 -21
- data/test/suite.rb +0 -6
data/lib/grit/status.rb
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
module Grit
|
2
|
+
|
3
|
+
class Status
|
4
|
+
include Enumerable
|
5
|
+
|
6
|
+
@base = nil
|
7
|
+
@files = nil
|
8
|
+
|
9
|
+
def initialize(base)
|
10
|
+
@base = base
|
11
|
+
construct_status
|
12
|
+
end
|
13
|
+
|
14
|
+
def changed
|
15
|
+
@files.select { |k, f| f.type == 'M' }
|
16
|
+
end
|
17
|
+
|
18
|
+
def added
|
19
|
+
@files.select { |k, f| f.type == 'A' }
|
20
|
+
end
|
21
|
+
|
22
|
+
def deleted
|
23
|
+
@files.select { |k, f| f.type == 'D' }
|
24
|
+
end
|
25
|
+
|
26
|
+
def untracked
|
27
|
+
@files.select { |k, f| f.untracked }
|
28
|
+
end
|
29
|
+
|
30
|
+
def pretty
|
31
|
+
out = ''
|
32
|
+
self.each do |file|
|
33
|
+
out << file.path
|
34
|
+
out << "\n\tsha(r) " + file.sha_repo.to_s + ' ' + file.mode_repo.to_s
|
35
|
+
out << "\n\tsha(i) " + file.sha_index.to_s + ' ' + file.mode_index.to_s
|
36
|
+
out << "\n\ttype " + file.type.to_s
|
37
|
+
out << "\n\tstage " + file.stage.to_s
|
38
|
+
out << "\n\tuntrac " + file.untracked.to_s
|
39
|
+
out << "\n"
|
40
|
+
end
|
41
|
+
out << "\n"
|
42
|
+
out
|
43
|
+
end
|
44
|
+
|
45
|
+
# enumerable method
|
46
|
+
|
47
|
+
def [](file)
|
48
|
+
@files[file]
|
49
|
+
end
|
50
|
+
|
51
|
+
def each
|
52
|
+
@files.each do |k, file|
|
53
|
+
yield file
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class StatusFile
|
58
|
+
attr_accessor :path, :type, :stage, :untracked
|
59
|
+
attr_accessor :mode_index, :mode_repo
|
60
|
+
attr_accessor :sha_index, :sha_repo
|
61
|
+
|
62
|
+
@base = nil
|
63
|
+
|
64
|
+
def initialize(base, hash)
|
65
|
+
@base = base
|
66
|
+
@path = hash[:path]
|
67
|
+
@type = hash[:type]
|
68
|
+
@stage = hash[:stage]
|
69
|
+
@mode_index = hash[:mode_index]
|
70
|
+
@mode_repo = hash[:mode_repo]
|
71
|
+
@sha_index = hash[:sha_index]
|
72
|
+
@sha_repo = hash[:sha_repo]
|
73
|
+
@untracked = hash[:untracked]
|
74
|
+
end
|
75
|
+
|
76
|
+
def blob(type = :index)
|
77
|
+
if type == :repo
|
78
|
+
@base.object(@sha_repo)
|
79
|
+
else
|
80
|
+
@base.object(@sha_index) rescue @base.object(@sha_repo)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def construct_status
|
89
|
+
@files = ls_files
|
90
|
+
|
91
|
+
Dir.chdir(@base.working_dir) do
|
92
|
+
# find untracked in working dir
|
93
|
+
Dir.glob('**/*') do |file|
|
94
|
+
if !@files[file]
|
95
|
+
@files[file] = {:path => file, :untracked => true} if !File.directory?(file)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
# find modified in tree
|
100
|
+
diff_files.each do |path, data|
|
101
|
+
@files[path] ? @files[path].merge!(data) : @files[path] = data
|
102
|
+
end
|
103
|
+
|
104
|
+
# find added but not committed - new files
|
105
|
+
diff_index('HEAD').each do |path, data|
|
106
|
+
@files[path] ? @files[path].merge!(data) : @files[path] = data
|
107
|
+
end
|
108
|
+
|
109
|
+
@files.each do |k, file_hash|
|
110
|
+
@files[k] = StatusFile.new(@base, file_hash)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# compares the index and the working directory
|
116
|
+
def diff_files
|
117
|
+
hsh = {}
|
118
|
+
@base.git.diff_files.split("\n").each do |line|
|
119
|
+
(info, file) = line.split("\t")
|
120
|
+
(mode_src, mode_dest, sha_src, sha_dest, type) = info.split
|
121
|
+
hsh[file] = {:path => file, :mode_file => mode_src.to_s[1, 7], :mode_index => mode_dest,
|
122
|
+
:sha_file => sha_src, :sha_index => sha_dest, :type => type}
|
123
|
+
end
|
124
|
+
hsh
|
125
|
+
end
|
126
|
+
|
127
|
+
# compares the index and the repository
|
128
|
+
def diff_index(treeish)
|
129
|
+
hsh = {}
|
130
|
+
@base.git.diff_index({}, treeish).split("\n").each do |line|
|
131
|
+
(info, file) = line.split("\t")
|
132
|
+
(mode_src, mode_dest, sha_src, sha_dest, type) = info.split
|
133
|
+
hsh[file] = {:path => file, :mode_repo => mode_src.to_s[1, 7], :mode_index => mode_dest,
|
134
|
+
:sha_repo => sha_src, :sha_index => sha_dest, :type => type}
|
135
|
+
end
|
136
|
+
hsh
|
137
|
+
end
|
138
|
+
|
139
|
+
def ls_files
|
140
|
+
hsh = {}
|
141
|
+
lines = @base.git.ls_files({:stage => true})
|
142
|
+
lines.split("\n").each do |line|
|
143
|
+
(info, file) = line.split("\t")
|
144
|
+
(mode, sha, stage) = info.split
|
145
|
+
hsh[file] = {:path => file, :mode_index => mode, :sha_index => sha, :stage => stage}
|
146
|
+
end
|
147
|
+
hsh
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
data/lib/grit/tree.rb
CHANGED
@@ -14,7 +14,6 @@ module Grit
|
|
14
14
|
# Returns Grit::Tree (baked)
|
15
15
|
def self.construct(repo, treeish, paths = [])
|
16
16
|
output = repo.git.ls_tree({}, treeish, *paths)
|
17
|
-
|
18
17
|
self.allocate.construct_initialize(repo, treeish, output)
|
19
18
|
end
|
20
19
|
|
@@ -70,6 +69,8 @@ module Grit
|
|
70
69
|
Tree.create(repo, :id => id, :mode => mode, :name => name)
|
71
70
|
when "blob"
|
72
71
|
Blob.create(repo, :id => id, :mode => mode, :name => name)
|
72
|
+
when "link"
|
73
|
+
Blob.create(repo, :id => id, :mode => mode, :name => name)
|
73
74
|
when "commit"
|
74
75
|
nil
|
75
76
|
else
|
@@ -87,7 +88,7 @@ module Grit
|
|
87
88
|
#
|
88
89
|
# Returns Grit::Blob or Grit::Tree or nil if not found
|
89
90
|
def /(file)
|
90
|
-
self.contents.
|
91
|
+
self.contents.find { |c| c.name == file }
|
91
92
|
end
|
92
93
|
|
93
94
|
# Pretty object inspection
|
data/test/test_blob.rb
CHANGED
@@ -7,6 +7,11 @@ class TestBlob < Test::Unit::TestCase
|
|
7
7
|
end
|
8
8
|
|
9
9
|
# blob
|
10
|
+
def test_nosuch_blob
|
11
|
+
t = @r.blob('blahblah')
|
12
|
+
puts t.data
|
13
|
+
assert t.is_a?(Blob)
|
14
|
+
end
|
10
15
|
|
11
16
|
def test_data_should_return_blob_contents
|
12
17
|
Git.any_instance.expects(:cat_file).returns(fixture('cat_file_blob'))
|
data/test/test_commit.rb
CHANGED
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/helper'
|
|
2
2
|
|
3
3
|
class TestCommit < Test::Unit::TestCase
|
4
4
|
def setup
|
5
|
-
@r = Repo.new(
|
5
|
+
@r = Repo.new(File.join(File.dirname(__FILE__), *%w[dot_git]), :is_bare => true)
|
6
6
|
end
|
7
7
|
|
8
8
|
# __bake__
|
@@ -19,7 +19,6 @@ class TestCommit < Test::Unit::TestCase
|
|
19
19
|
# short_name
|
20
20
|
|
21
21
|
def test_id_abbrev
|
22
|
-
Git.any_instance.expects(:rev_parse).returns(fixture('rev_parse'))
|
23
22
|
assert_equal '80f136f', @r.commit('80f136f500dfdb8c3e8abf4ae716f875f0a1b57f').id_abbrev
|
24
23
|
end
|
25
24
|
|
@@ -164,13 +163,14 @@ class TestCommit < Test::Unit::TestCase
|
|
164
163
|
# to_hash
|
165
164
|
|
166
165
|
def test_to_hash
|
166
|
+
old_tz, ENV["TZ"] = ENV["TZ"], "US/Pacific"
|
167
167
|
@c = Commit.create(@r, :id => '4c8124ffcf4039d292442eeccabdeca5af5c5017')
|
168
|
-
|
168
|
+
date = Time.parse('Wed Oct 10 03:06:12 -0400 2007')
|
169
169
|
expected = {
|
170
170
|
'parents' => ['id' => "634396b2f541a9f2d58b00be1a07f0c358b999b3"],
|
171
|
-
'committed_date' =>
|
171
|
+
'committed_date' => date.xmlschema,
|
172
172
|
'tree' => "672eca9b7f9e09c22dcb128c283e8c3c8d7697a4",
|
173
|
-
'authored_date' =>
|
173
|
+
'authored_date' => date.xmlschema,
|
174
174
|
'committer' => {'email' => "tom@mojombo.com", 'name' => "Tom Preston-Werner"},
|
175
175
|
'message' => "implement Grit#heads",
|
176
176
|
'author' => {'email' => "tom@mojombo.com", 'name' => "Tom Preston-Werner"},
|
@@ -178,5 +178,7 @@ class TestCommit < Test::Unit::TestCase
|
|
178
178
|
}
|
179
179
|
|
180
180
|
assert_equal expected, @c.to_hash
|
181
|
+
ensure
|
182
|
+
ENV["TZ"] = old_tz
|
181
183
|
end
|
182
184
|
end
|
data/test/test_diff.rb
CHANGED
@@ -10,7 +10,7 @@ class TestDiff < Test::Unit::TestCase
|
|
10
10
|
def test_list_from_string_new_mode
|
11
11
|
output = fixture('diff_new_mode')
|
12
12
|
|
13
|
-
diffs = Diff.list_from_string(@r, output)
|
13
|
+
diffs = Grit::Diff.list_from_string(@r, output)
|
14
14
|
assert_equal 2, diffs.size
|
15
15
|
assert_equal 10, diffs.first.diff.split("\n").size
|
16
16
|
assert_equal nil, diffs.last.diff
|
data/test/test_git.rb
CHANGED
@@ -5,10 +5,28 @@ class TestGit < Test::Unit::TestCase
|
|
5
5
|
@git = Git.new(File.join(File.dirname(__FILE__), *%w[..]))
|
6
6
|
end
|
7
7
|
|
8
|
+
def teardown
|
9
|
+
Grit.debug = false
|
10
|
+
end
|
11
|
+
|
8
12
|
def test_method_missing
|
9
13
|
assert_match(/^git version [\w\.]*$/, @git.version)
|
10
14
|
end
|
11
15
|
|
16
|
+
def test_logs_stderr
|
17
|
+
Grit.debug = true
|
18
|
+
Grit.stubs(:log)
|
19
|
+
Grit.expects(:log).with(includes("git: 'bad' is not a git-command"))
|
20
|
+
@git.bad
|
21
|
+
end
|
22
|
+
|
23
|
+
def testl_logs_stderr_when_skipping_timeout
|
24
|
+
Grit.debug = true
|
25
|
+
Grit.stubs(:log)
|
26
|
+
Grit.expects(:log).with(includes("git: 'bad' is not a git-command"))
|
27
|
+
@git.bad :timeout => false
|
28
|
+
end
|
29
|
+
|
12
30
|
def test_transform_options
|
13
31
|
assert_equal ["-s"], @git.transform_options({:s => true})
|
14
32
|
assert_equal ["-s '5'"], @git.transform_options({:s => 5})
|
@@ -38,7 +56,7 @@ class TestGit < Test::Unit::TestCase
|
|
38
56
|
|
39
57
|
def test_raises_on_slow_shell
|
40
58
|
Grit::Git.git_timeout = 0.5
|
41
|
-
Open4.expects(:popen4).
|
59
|
+
Open4.expects(:popen4).yields( nil, nil, mock(:read => proc { sleep 1 }), nil )
|
42
60
|
assert_raises Grit::Git::GitTimeout do
|
43
61
|
@git.something
|
44
62
|
end
|
@@ -46,7 +64,7 @@ class TestGit < Test::Unit::TestCase
|
|
46
64
|
|
47
65
|
def test_works_fine_if_quick
|
48
66
|
output = 'output'
|
49
|
-
Open4.expects(:popen4).
|
67
|
+
Open4.expects(:popen4).yields( nil, nil, mock(:read => output), stub(:read => nil) )
|
50
68
|
assert_equal output, @git.something
|
51
69
|
end
|
52
70
|
end
|
data/test/test_grit.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class TestGrit < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@old_debug = Grit.debug
|
6
|
+
@old_logger = Grit.logger
|
7
|
+
Grit.debug = true
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
Grit.debug = @old_debug
|
12
|
+
Grit.logger = @old_logger
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_uses_stdout_logger_by_default
|
16
|
+
assert_equal STDOUT, Grit.logger.instance_variable_get(:@logdev).dev
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_can_override_logger
|
20
|
+
my_logger = Logger.new(io = StringIO.new)
|
21
|
+
Grit.logger = my_logger
|
22
|
+
assert_equal my_logger, Grit.logger
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_logs_to_specified_logger
|
26
|
+
Grit.logger = Logger.new(io = StringIO.new)
|
27
|
+
Grit.log 'hi mom'
|
28
|
+
io.rewind
|
29
|
+
assert io.read.include?('hi mom')
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/test/test_head.rb
CHANGED
@@ -2,21 +2,46 @@ require File.dirname(__FILE__) + '/helper'
|
|
2
2
|
|
3
3
|
class TestHead < Test::Unit::TestCase
|
4
4
|
def setup
|
5
|
-
@r = Repo.new(
|
6
|
-
Git.any_instance.expects(:for_each_ref).returns(fixture('for_each_ref'))
|
5
|
+
@r = Repo.new(File.join(File.dirname(__FILE__), *%w[dot_git]), :is_bare => true)
|
7
6
|
end
|
8
7
|
|
9
8
|
# inspect
|
10
9
|
|
11
10
|
def test_inspect
|
12
11
|
head = @r.heads.first
|
13
|
-
assert_equal %Q{#<Grit::Head "
|
12
|
+
assert_equal %Q{#<Grit::Head "test/master">}, head.inspect
|
14
13
|
end
|
15
14
|
|
15
|
+
def test_master
|
16
|
+
head = @r.commit('master')
|
17
|
+
assert_equal 'ca8a30f5a7f0f163bbe3b6f0abf18a6c83b0687a', head.id
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_submaster
|
21
|
+
head = @r.commit('test/master')
|
22
|
+
assert_equal '2d3acf90f35989df8f262dc50beadc4ee3ae1560', head.id
|
23
|
+
end
|
24
|
+
|
16
25
|
# heads with slashes
|
17
26
|
|
18
27
|
def test_heads_with_slashes
|
19
|
-
head = @r.heads
|
20
|
-
assert_equal %Q{#<Grit::Head "
|
28
|
+
head = @r.heads[2]
|
29
|
+
assert_equal %Q{#<Grit::Head "test/chacon">}, head.inspect
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_is_head
|
33
|
+
assert @r.is_head?('master')
|
34
|
+
assert @r.is_head?('test/chacon')
|
35
|
+
assert !@r.is_head?('masterblah')
|
21
36
|
end
|
37
|
+
|
38
|
+
def test_head_count
|
39
|
+
assert_equal 5, @r.heads.size
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
def test_nonpack
|
44
|
+
assert @r.heads.map { |h| h.name }.include?('nonpack')
|
45
|
+
end
|
46
|
+
|
22
47
|
end
|
data/test/test_real.rb
CHANGED
@@ -2,16 +2,18 @@
|
|
2
2
|
#
|
3
3
|
# class TestReal < Test::Unit::TestCase
|
4
4
|
# def setup
|
5
|
-
#
|
5
|
+
# `rm -fr /Users/tom/dev/sandbox/grittest.git`
|
6
|
+
# `git --git-dir=/Users/tom/dev/sandbox/grittest.git init`
|
7
|
+
# @repo = Repo.new('/Users/tom/dev/sandbox/grittest.git')
|
6
8
|
# end
|
7
9
|
#
|
8
10
|
# def test_real
|
9
|
-
#
|
11
|
+
# Grit.debug = true
|
10
12
|
#
|
11
|
-
#
|
13
|
+
# index = @repo.index
|
14
|
+
# index.add('foo/bar/baz.txt', 'hello!')
|
15
|
+
# index.add('foo/qux/bam.txt', 'world!')
|
12
16
|
#
|
13
|
-
#
|
14
|
-
# # p @repo.tree('master', ['Snippets/rea.plist']).contents.first
|
15
|
-
# p @repo.tree('master', ['Syntaxes/Ruby on Rails.plist']).contents.first
|
17
|
+
# puts index.commit('first commit')
|
16
18
|
# end
|
17
19
|
# end
|
data/test/test_remote.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class TestRemote < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@r = Repo.new(GRIT_REPO)
|
6
|
+
end
|
7
|
+
|
8
|
+
# inspect
|
9
|
+
|
10
|
+
def test_inspect
|
11
|
+
remote = @r.remotes.first
|
12
|
+
assert_equal %Q{#<Grit::Remote "#{remote.name}">}, remote.inspect
|
13
|
+
end
|
14
|
+
end
|
data/test/test_repo.rb
CHANGED
@@ -4,57 +4,64 @@ class TestRepo < Test::Unit::TestCase
|
|
4
4
|
def setup
|
5
5
|
@r = Repo.new(GRIT_REPO)
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
# new
|
9
|
-
|
9
|
+
|
10
10
|
def test_new_should_raise_on_invalid_repo_location
|
11
11
|
assert_raise(InvalidGitRepositoryError) do
|
12
12
|
Repo.new("/tmp")
|
13
13
|
end
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
def test_new_should_raise_on_non_existant_path
|
17
17
|
assert_raise(NoSuchPathError) do
|
18
18
|
Repo.new("/foobar")
|
19
19
|
end
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
# descriptions
|
23
|
-
|
23
|
+
|
24
24
|
def test_description
|
25
25
|
assert_equal "Unnamed repository; edit this file to name it for gitweb.", @r.description
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
|
+
# refs
|
29
|
+
|
30
|
+
def test_refs_should_return_array_of_ref_objects
|
31
|
+
@r.refs.each do |ref|
|
32
|
+
assert ref.is_a? Grit::Ref
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
28
36
|
# heads
|
29
|
-
|
37
|
+
|
30
38
|
def test_heads_should_return_array_of_head_objects
|
31
39
|
@r.heads.each do |head|
|
32
40
|
assert_equal Grit::Head, head.class
|
33
41
|
end
|
34
42
|
end
|
35
|
-
|
43
|
+
|
36
44
|
def test_heads_should_populate_head_data
|
37
|
-
|
38
|
-
|
45
|
+
@r = Repo.new(File.join(File.dirname(__FILE__), *%w[dot_git]), :is_bare => true)
|
39
46
|
head = @r.heads.first
|
40
47
|
|
41
|
-
assert_equal 'master', head.name
|
42
|
-
assert_equal '
|
48
|
+
assert_equal 'test/master', head.name
|
49
|
+
assert_equal '2d3acf90f35989df8f262dc50beadc4ee3ae1560', head.commit.id
|
43
50
|
end
|
44
|
-
|
51
|
+
|
45
52
|
# branches
|
46
|
-
|
53
|
+
|
47
54
|
def test_branches
|
48
55
|
# same as heads
|
49
56
|
end
|
50
|
-
|
57
|
+
|
51
58
|
# commits
|
52
|
-
|
59
|
+
|
53
60
|
def test_commits
|
54
61
|
Git.any_instance.expects(:rev_list).returns(fixture('rev_list'))
|
55
|
-
|
62
|
+
|
56
63
|
commits = @r.commits('master', 10)
|
57
|
-
|
64
|
+
|
58
65
|
c = commits[0]
|
59
66
|
assert_equal '4c8124ffcf4039d292442eeccabdeca5af5c5017', c.id
|
60
67
|
assert_equal ["634396b2f541a9f2d58b00be1a07f0c358b999b3"], c.parents.map { |p| p.id }
|
@@ -66,190 +73,190 @@ class TestRepo < Test::Unit::TestCase
|
|
66
73
|
assert_equal "tom@mojombo.com", c.committer.email
|
67
74
|
assert_equal Time.at(1191999972), c.committed_date
|
68
75
|
assert_equal "implement Grit#heads", c.message
|
69
|
-
|
76
|
+
|
70
77
|
c = commits[1]
|
71
78
|
assert_equal [], c.parents
|
72
|
-
|
79
|
+
|
73
80
|
c = commits[2]
|
74
81
|
assert_equal ["6e64c55896aabb9a7d8e9f8f296f426d21a78c2c", "7f874954efb9ba35210445be456c74e037ba6af2"], c.parents.map { |p| p.id }
|
75
82
|
assert_equal "Merge branch 'site'\n\n * Some other stuff\n * just one more", c.message
|
76
83
|
assert_equal "Merge branch 'site'", c.short_message
|
77
84
|
end
|
78
|
-
|
85
|
+
|
79
86
|
# commit_count
|
80
|
-
|
87
|
+
|
81
88
|
def test_commit_count
|
82
89
|
Git.any_instance.expects(:rev_list).with({}, 'master').returns(fixture('rev_list_count'))
|
83
|
-
|
90
|
+
|
84
91
|
assert_equal 655, @r.commit_count('master')
|
85
92
|
end
|
86
|
-
|
93
|
+
|
87
94
|
# commit
|
88
|
-
|
95
|
+
|
89
96
|
def test_commit
|
90
97
|
commit = @r.commit('634396b2f541a9f2d58b00be1a07f0c358b999b3')
|
91
|
-
|
98
|
+
|
92
99
|
assert_equal "634396b2f541a9f2d58b00be1a07f0c358b999b3", commit.id
|
93
100
|
end
|
94
|
-
|
101
|
+
|
95
102
|
# tree
|
96
|
-
|
103
|
+
|
97
104
|
def test_tree
|
98
105
|
Git.any_instance.expects(:ls_tree).returns(fixture('ls_tree_a'))
|
99
106
|
tree = @r.tree('master')
|
100
|
-
|
107
|
+
|
101
108
|
assert_equal 4, tree.contents.select { |c| c.instance_of?(Blob) }.size
|
102
109
|
assert_equal 3, tree.contents.select { |c| c.instance_of?(Tree) }.size
|
103
110
|
end
|
104
|
-
|
111
|
+
|
105
112
|
# blob
|
106
|
-
|
113
|
+
|
107
114
|
def test_blob
|
108
115
|
Git.any_instance.expects(:cat_file).returns(fixture('cat_file_blob'))
|
109
116
|
blob = @r.blob("abc")
|
110
117
|
assert_equal "Hello world", blob.data
|
111
118
|
end
|
112
|
-
|
119
|
+
|
113
120
|
# init_bare
|
114
|
-
|
121
|
+
|
115
122
|
def test_init_bare
|
116
123
|
Git.any_instance.expects(:init).returns(true)
|
117
|
-
Repo.expects(:new).with("/foo/bar.git")
|
124
|
+
Repo.expects(:new).with("/foo/bar.git", {})
|
118
125
|
Repo.init_bare("/foo/bar.git")
|
119
126
|
end
|
120
|
-
|
127
|
+
|
121
128
|
def test_init_bare_with_options
|
122
129
|
Git.any_instance.expects(:init).with(
|
123
130
|
:template => "/baz/sweet").returns(true)
|
124
|
-
Repo.expects(:new).with("/foo/bar.git")
|
131
|
+
Repo.expects(:new).with("/foo/bar.git", {})
|
125
132
|
Repo.init_bare("/foo/bar.git", :template => "/baz/sweet")
|
126
133
|
end
|
127
|
-
|
134
|
+
|
128
135
|
# fork_bare
|
129
|
-
|
136
|
+
|
130
137
|
def test_fork_bare
|
131
138
|
Git.any_instance.expects(:clone).with(
|
132
|
-
{:bare => true, :shared => true},
|
139
|
+
{:bare => true, :shared => true},
|
133
140
|
"#{absolute_project_path}/.git",
|
134
141
|
"/foo/bar.git").returns(nil)
|
135
142
|
Repo.expects(:new)
|
136
|
-
|
143
|
+
|
137
144
|
@r.fork_bare("/foo/bar.git")
|
138
145
|
end
|
139
|
-
|
146
|
+
|
140
147
|
def test_fork_bare_with_options
|
141
148
|
Git.any_instance.expects(:clone).with(
|
142
|
-
{:bare => true, :shared => true, :template => '/awesome'},
|
149
|
+
{:bare => true, :shared => true, :template => '/awesome'},
|
143
150
|
"#{absolute_project_path}/.git",
|
144
151
|
"/foo/bar.git").returns(nil)
|
145
152
|
Repo.expects(:new)
|
146
|
-
|
153
|
+
|
147
154
|
@r.fork_bare("/foo/bar.git", :template => '/awesome')
|
148
155
|
end
|
149
|
-
|
156
|
+
|
150
157
|
# diff
|
151
|
-
|
158
|
+
|
152
159
|
def test_diff
|
153
160
|
Git.any_instance.expects(:diff).with({}, 'master^', 'master', '--')
|
154
161
|
@r.diff('master^', 'master')
|
155
|
-
|
162
|
+
|
156
163
|
Git.any_instance.expects(:diff).with({}, 'master^', 'master', '--', 'foo/bar')
|
157
164
|
@r.diff('master^', 'master', 'foo/bar')
|
158
|
-
|
165
|
+
|
159
166
|
Git.any_instance.expects(:diff).with({}, 'master^', 'master', '--', 'foo/bar', 'foo/baz')
|
160
167
|
@r.diff('master^', 'master', 'foo/bar', 'foo/baz')
|
161
168
|
end
|
162
|
-
|
169
|
+
|
163
170
|
# commit_diff
|
164
|
-
|
171
|
+
|
165
172
|
def test_diff
|
166
173
|
Git.any_instance.expects(:diff).returns(fixture('diff_p'))
|
167
174
|
diffs = @r.commit_diff('master')
|
168
|
-
|
175
|
+
|
169
176
|
assert_equal 15, diffs.size
|
170
177
|
end
|
171
|
-
|
178
|
+
|
172
179
|
# init bare
|
173
|
-
|
180
|
+
|
174
181
|
# archive
|
175
|
-
|
182
|
+
|
176
183
|
def test_archive_tar
|
177
|
-
|
184
|
+
#@r.archive_tar -- no assertion being done here
|
178
185
|
end
|
179
|
-
|
186
|
+
|
180
187
|
# archive_tar_gz
|
181
|
-
|
188
|
+
|
182
189
|
def test_archive_tar_gz
|
183
|
-
|
190
|
+
#@r.archive_tar_gz -- again, no assertion
|
184
191
|
end
|
185
|
-
|
192
|
+
|
186
193
|
# enable_daemon_serve
|
187
|
-
|
194
|
+
|
188
195
|
def test_enable_daemon_serve
|
189
196
|
FileUtils.expects(:touch).with(File.join(@r.path, 'git-daemon-export-ok'))
|
190
197
|
@r.enable_daemon_serve
|
191
198
|
end
|
192
|
-
|
199
|
+
|
193
200
|
# disable_daemon_serve
|
194
|
-
|
201
|
+
|
195
202
|
def test_disable_daemon_serve
|
196
203
|
FileUtils.expects(:rm_f).with(File.join(@r.path, 'git-daemon-export-ok'))
|
197
204
|
@r.disable_daemon_serve
|
198
205
|
end
|
199
|
-
|
206
|
+
|
200
207
|
# alternates
|
201
|
-
|
208
|
+
|
202
209
|
def test_alternates_with_two_alternates
|
203
210
|
File.expects(:exist?).with("#{absolute_project_path}/.git/objects/info/alternates").returns(true)
|
204
211
|
File.expects(:read).returns("/path/to/repo1/.git/objects\n/path/to/repo2.git/objects\n")
|
205
|
-
|
212
|
+
|
206
213
|
assert_equal ["/path/to/repo1/.git/objects", "/path/to/repo2.git/objects"], @r.alternates
|
207
214
|
end
|
208
|
-
|
215
|
+
|
209
216
|
def test_alternates_no_file
|
210
217
|
File.expects(:exist?).returns(false)
|
211
|
-
|
218
|
+
|
212
219
|
assert_equal [], @r.alternates
|
213
220
|
end
|
214
|
-
|
221
|
+
|
215
222
|
# alternates=
|
216
|
-
|
223
|
+
|
217
224
|
def test_alternates_setter_ok
|
218
225
|
alts = %w{/path/to/repo.git/objects /path/to/repo2.git/objects}
|
219
|
-
|
226
|
+
|
220
227
|
alts.each do |alt|
|
221
228
|
File.expects(:exist?).with(alt).returns(true)
|
222
229
|
end
|
223
|
-
|
230
|
+
|
224
231
|
File.any_instance.expects(:write).with(alts.join("\n"))
|
225
|
-
|
232
|
+
|
226
233
|
assert_nothing_raised do
|
227
234
|
@r.alternates = alts
|
228
235
|
end
|
229
236
|
end
|
230
|
-
|
237
|
+
|
231
238
|
def test_alternates_setter_bad
|
232
239
|
alts = %w{/path/to/repo.git/objects}
|
233
|
-
|
240
|
+
|
234
241
|
alts.each do |alt|
|
235
242
|
File.expects(:exist?).with(alt).returns(false)
|
236
243
|
end
|
237
|
-
|
244
|
+
|
238
245
|
File.any_instance.expects(:write).never
|
239
|
-
|
246
|
+
|
240
247
|
assert_raise RuntimeError do
|
241
248
|
@r.alternates = alts
|
242
249
|
end
|
243
250
|
end
|
244
|
-
|
251
|
+
|
245
252
|
def test_alternates_setter_empty
|
246
253
|
File.expects(:delete)
|
247
|
-
|
254
|
+
|
248
255
|
@r.alternates = []
|
249
256
|
end
|
250
|
-
|
257
|
+
|
251
258
|
# inspect
|
252
|
-
|
259
|
+
|
253
260
|
def test_inspect
|
254
261
|
assert_equal %Q{#<Grit::Repo "#{File.expand_path(GRIT_REPO)}/.git">}, @r.inspect
|
255
262
|
end
|