davetron5000-grit 1.1.2
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/API.txt +101 -0
- data/History.txt +49 -0
- data/LICENSE +22 -0
- data/README.md +216 -0
- data/VERSION.yml +4 -0
- data/examples/ex_add_commit.rb +13 -0
- data/examples/ex_index.rb +14 -0
- data/lib/grit/actor.rb +41 -0
- data/lib/grit/blame.rb +61 -0
- data/lib/grit/blob.rb +126 -0
- data/lib/grit/commit.rb +242 -0
- data/lib/grit/commit_stats.rb +128 -0
- data/lib/grit/config.rb +44 -0
- data/lib/grit/diff.rb +70 -0
- data/lib/grit/errors.rb +7 -0
- data/lib/grit/git-ruby/commit_db.rb +52 -0
- data/lib/grit/git-ruby/file_index.rb +193 -0
- data/lib/grit/git-ruby/git_object.rb +350 -0
- data/lib/grit/git-ruby/internal/file_window.rb +58 -0
- data/lib/grit/git-ruby/internal/loose.rb +137 -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 +325 -0
- data/lib/grit/git-ruby/repository.rb +736 -0
- data/lib/grit/git-ruby.rb +186 -0
- data/lib/grit/git.rb +140 -0
- data/lib/grit/index.rb +122 -0
- data/lib/grit/lazy.rb +33 -0
- data/lib/grit/merge.rb +45 -0
- data/lib/grit/ref.rb +99 -0
- data/lib/grit/repo.rb +447 -0
- data/lib/grit/ruby1.9.rb +7 -0
- data/lib/grit/status.rb +151 -0
- data/lib/grit/submodule.rb +88 -0
- data/lib/grit/tag.rb +66 -0
- data/lib/grit/tree.rb +123 -0
- data/lib/grit.rb +68 -0
- data/lib/open3_detach.rb +46 -0
- data/test/bench/benchmarks.rb +126 -0
- data/test/helper.rb +18 -0
- data/test/profile.rb +21 -0
- data/test/suite.rb +6 -0
- data/test/test_actor.rb +51 -0
- data/test/test_blame.rb +32 -0
- data/test/test_blame_tree.rb +33 -0
- data/test/test_blob.rb +83 -0
- data/test/test_commit.rb +206 -0
- data/test/test_commit_stats.rb +33 -0
- data/test/test_commit_write.rb +54 -0
- data/test/test_config.rb +58 -0
- data/test/test_diff.rb +18 -0
- data/test/test_file_index.rb +56 -0
- data/test/test_git.rb +84 -0
- data/test/test_grit.rb +32 -0
- data/test/test_head.rb +47 -0
- data/test/test_index_status.rb +40 -0
- data/test/test_merge.rb +17 -0
- data/test/test_raw.rb +16 -0
- data/test/test_real.rb +19 -0
- data/test/test_reality.rb +17 -0
- data/test/test_remote.rb +14 -0
- data/test/test_repo.rb +347 -0
- data/test/test_rubygit.rb +188 -0
- data/test/test_rubygit_alt.rb +40 -0
- data/test/test_rubygit_index.rb +76 -0
- data/test/test_rubygit_iv2.rb +28 -0
- data/test/test_submodule.rb +69 -0
- data/test/test_tag.rb +67 -0
- data/test/test_tree.rb +101 -0
- metadata +141 -0
data/test/test_commit.rb
ADDED
@@ -0,0 +1,206 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class TestCommit < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@r = Repo.new(File.join(File.dirname(__FILE__), *%w[dot_git]), :is_bare => true)
|
6
|
+
end
|
7
|
+
|
8
|
+
# __bake__
|
9
|
+
|
10
|
+
def test_bake
|
11
|
+
Git.any_instance.expects(:rev_list).returns(fixture('rev_list_single'))
|
12
|
+
@c = Commit.create(@r, :id => '4c8124ffcf4039d292442eeccabdeca5af5c5017')
|
13
|
+
@c.author # bake
|
14
|
+
|
15
|
+
assert_equal "Tom Preston-Werner", @c.author.name
|
16
|
+
assert_equal "tom@mojombo.com", @c.author.email
|
17
|
+
end
|
18
|
+
|
19
|
+
# short_name
|
20
|
+
|
21
|
+
def test_id_abbrev
|
22
|
+
assert_equal '80f136f', @r.commit('80f136f500dfdb8c3e8abf4ae716f875f0a1b57f').id_abbrev
|
23
|
+
end
|
24
|
+
|
25
|
+
# count
|
26
|
+
|
27
|
+
def test_count
|
28
|
+
assert_equal 107, Commit.count(@r, 'master')
|
29
|
+
end
|
30
|
+
|
31
|
+
# diff
|
32
|
+
|
33
|
+
def test_diff
|
34
|
+
# git diff --full-index 91169e1f5fa4de2eaea3f176461f5dc784796769 > test/fixtures/diff_p
|
35
|
+
|
36
|
+
Git.any_instance.expects(:diff).with({:full_index => true}, 'master').returns(fixture('diff_p'))
|
37
|
+
diffs = Commit.diff(@r, 'master')
|
38
|
+
|
39
|
+
assert_equal 15, diffs.size
|
40
|
+
|
41
|
+
assert_equal '.gitignore', diffs.first.a_path
|
42
|
+
assert_equal '.gitignore', diffs.first.b_path
|
43
|
+
assert_equal '4ebc8aea50e0a67e000ba29a30809d0a7b9b2666', diffs.first.a_blob.id
|
44
|
+
assert_equal '2dd02534615434d88c51307beb0f0092f21fd103', diffs.first.b_blob.id
|
45
|
+
assert_equal '100644', diffs.first.b_mode
|
46
|
+
assert_equal false, diffs.first.new_file
|
47
|
+
assert_equal false, diffs.first.deleted_file
|
48
|
+
assert_equal "--- a/.gitignore\n+++ b/.gitignore\n@@ -1 +1,2 @@\n coverage\n+pkg", diffs.first.diff
|
49
|
+
|
50
|
+
assert_equal 'lib/grit/actor.rb', diffs[5].a_path
|
51
|
+
assert_equal nil, diffs[5].a_blob
|
52
|
+
assert_equal 'f733bce6b57c0e5e353206e692b0e3105c2527f4', diffs[5].b_blob.id
|
53
|
+
assert_equal true, diffs[5].new_file
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_diff_with_two_commits
|
57
|
+
# git diff --full-index 59ddc32 13d27d5 > test/fixtures/diff_2
|
58
|
+
Git.any_instance.expects(:diff).with({:full_index => true}, '59ddc32', '13d27d5').returns(fixture('diff_2'))
|
59
|
+
diffs = Commit.diff(@r, '59ddc32', '13d27d5')
|
60
|
+
|
61
|
+
assert_equal 3, diffs.size
|
62
|
+
assert_equal %w(lib/grit/commit.rb test/fixtures/show_empty_commit test/test_commit.rb), diffs.collect { |d| d.a_path }
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_diff_with_files
|
66
|
+
# git diff --full-index 59ddc32 -- lib > test/fixtures/diff_f
|
67
|
+
Git.any_instance.expects(:diff).with({:full_index => true}, '59ddc32', '--', 'lib').returns(fixture('diff_f'))
|
68
|
+
diffs = Commit.diff(@r, '59ddc32', %w(lib))
|
69
|
+
|
70
|
+
assert_equal 1, diffs.size
|
71
|
+
assert_equal 'lib/grit/diff.rb', diffs.first.a_path
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_diff_with_two_commits_and_files
|
75
|
+
# git diff --full-index 59ddc32 13d27d5 -- lib > test/fixtures/diff_2f
|
76
|
+
Git.any_instance.expects(:diff).with({:full_index => true}, '59ddc32', '13d27d5', '--', 'lib').returns(fixture('diff_2f'))
|
77
|
+
diffs = Commit.diff(@r, '59ddc32', '13d27d5', %w(lib))
|
78
|
+
|
79
|
+
assert_equal 1, diffs.size
|
80
|
+
assert_equal 'lib/grit/commit.rb', diffs.first.a_path
|
81
|
+
end
|
82
|
+
|
83
|
+
# diffs
|
84
|
+
def test_diffs
|
85
|
+
# git diff --full-index 91169e1f5fa4de2eaea3f176461f5dc784796769 > test/fixtures/diff_p
|
86
|
+
|
87
|
+
Git.any_instance.expects(:diff).returns(fixture('diff_p'))
|
88
|
+
@c = Commit.create(@r, :id => '91169e1f5fa4de2eaea3f176461f5dc784796769')
|
89
|
+
diffs = @c.diffs
|
90
|
+
|
91
|
+
assert_equal 15, diffs.size
|
92
|
+
|
93
|
+
assert_equal '.gitignore', diffs.first.a_path
|
94
|
+
assert_equal '.gitignore', diffs.first.b_path
|
95
|
+
assert_equal '4ebc8aea50e0a67e000ba29a30809d0a7b9b2666', diffs.first.a_blob.id
|
96
|
+
assert_equal '2dd02534615434d88c51307beb0f0092f21fd103', diffs.first.b_blob.id
|
97
|
+
assert_equal '100644', diffs.first.b_mode
|
98
|
+
assert_equal false, diffs.first.new_file
|
99
|
+
assert_equal false, diffs.first.deleted_file
|
100
|
+
assert_equal "--- a/.gitignore\n+++ b/.gitignore\n@@ -1 +1,2 @@\n coverage\n+pkg", diffs.first.diff
|
101
|
+
|
102
|
+
assert_equal 'lib/grit/actor.rb', diffs[5].a_path
|
103
|
+
assert_equal nil, diffs[5].a_blob
|
104
|
+
assert_equal 'f733bce6b57c0e5e353206e692b0e3105c2527f4', diffs[5].b_blob.id
|
105
|
+
assert_equal true, diffs[5].new_file
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_diffs_on_initial_import
|
109
|
+
# git show --full-index 634396b2f541a9f2d58b00be1a07f0c358b999b3 > test/fixtures/diff_i
|
110
|
+
|
111
|
+
Git.any_instance.expects(:show).with({:full_index => true, :pretty => 'raw'}, '634396b2f541a9f2d58b00be1a07f0c358b999b3').returns(fixture('diff_i'))
|
112
|
+
@c = Commit.create(@r, :id => '634396b2f541a9f2d58b00be1a07f0c358b999b3')
|
113
|
+
diffs = @c.diffs
|
114
|
+
|
115
|
+
assert_equal 10, diffs.size
|
116
|
+
|
117
|
+
assert_equal 'History.txt', diffs.first.a_path
|
118
|
+
assert_equal 'History.txt', diffs.first.b_path
|
119
|
+
assert_equal nil, diffs.first.a_blob
|
120
|
+
assert_equal nil, diffs.first.b_mode
|
121
|
+
assert_equal '81d2c27608b352814cbe979a6acd678d30219678', diffs.first.b_blob.id
|
122
|
+
assert_equal true, diffs.first.new_file
|
123
|
+
assert_equal false, diffs.first.deleted_file
|
124
|
+
assert_equal "--- /dev/null\n+++ b/History.txt\n@@ -0,0 +1,5 @@\n+== 1.0.0 / 2007-10-09\n+\n+* 1 major enhancement\n+ * Birthday!\n+", diffs.first.diff
|
125
|
+
|
126
|
+
|
127
|
+
assert_equal 'lib/grit.rb', diffs[5].a_path
|
128
|
+
assert_equal nil, diffs[5].a_blob
|
129
|
+
assert_equal '32cec87d1e78946a827ddf6a8776be4d81dcf1d1', diffs[5].b_blob.id
|
130
|
+
assert_equal true, diffs[5].new_file
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_diffs_on_initial_import_with_empty_commit
|
134
|
+
Git.any_instance.expects(:show).with(
|
135
|
+
{:full_index => true, :pretty => 'raw'},
|
136
|
+
'634396b2f541a9f2d58b00be1a07f0c358b999b3'
|
137
|
+
).returns(fixture('show_empty_commit'))
|
138
|
+
|
139
|
+
@c = Commit.create(@r, :id => '634396b2f541a9f2d58b00be1a07f0c358b999b3')
|
140
|
+
diffs = @c.diffs
|
141
|
+
|
142
|
+
assert_equal [], diffs
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_diffs_with_mode_only_change
|
146
|
+
Git.any_instance.expects(:diff).returns(fixture('diff_mode_only'))
|
147
|
+
@c = Commit.create(@r, :id => '91169e1f5fa4de2eaea3f176461f5dc784796769')
|
148
|
+
diffs = @c.diffs
|
149
|
+
|
150
|
+
assert_equal 23, diffs.size
|
151
|
+
assert_equal '100644', diffs[0].a_mode
|
152
|
+
assert_equal '100755', diffs[0].b_mode
|
153
|
+
end
|
154
|
+
|
155
|
+
# to_s
|
156
|
+
|
157
|
+
def test_to_s
|
158
|
+
@c = Commit.create(@r, :id => 'abc')
|
159
|
+
assert_equal "abc", @c.to_s
|
160
|
+
end
|
161
|
+
|
162
|
+
# to_patch
|
163
|
+
|
164
|
+
def test_to_patch
|
165
|
+
@c = Commit.create(@r, :id => '80f136f500dfdb8c3e8abf4ae716f875f0a1b57f')
|
166
|
+
|
167
|
+
patch = @c.to_patch
|
168
|
+
|
169
|
+
assert patch.include?('From 80f136f500dfdb8c3e8abf4ae716f875f0a1b57f Mon Sep 17 00:00:00 2001')
|
170
|
+
assert patch.include?('From: tom <tom@taco.(none)>')
|
171
|
+
assert patch.include?('Date: Tue, 20 Nov 2007 17:27:42 -0800')
|
172
|
+
assert patch.include?('Subject: [PATCH] fix tests on other machines')
|
173
|
+
assert patch.include?('test/test_reality.rb | 30 +++++++++++++++---------------')
|
174
|
+
assert patch.include?('@@ -1,17 +1,17 @@')
|
175
|
+
assert patch.include?('+# recurse(t)')
|
176
|
+
end
|
177
|
+
|
178
|
+
# inspect
|
179
|
+
|
180
|
+
def test_inspect
|
181
|
+
@c = Commit.create(@r, :id => 'abc')
|
182
|
+
assert_equal %Q{#<Grit::Commit "abc">}, @c.inspect
|
183
|
+
end
|
184
|
+
|
185
|
+
# to_hash
|
186
|
+
|
187
|
+
def test_to_hash
|
188
|
+
old_tz, ENV["TZ"] = ENV["TZ"], "US/Pacific"
|
189
|
+
@c = Commit.create(@r, :id => '4c8124ffcf4039d292442eeccabdeca5af5c5017')
|
190
|
+
date = Time.parse('Wed Oct 10 03:06:12 -0400 2007')
|
191
|
+
expected = {
|
192
|
+
'parents' => ['id' => "634396b2f541a9f2d58b00be1a07f0c358b999b3"],
|
193
|
+
'committed_date' => date.xmlschema,
|
194
|
+
'tree' => "672eca9b7f9e09c22dcb128c283e8c3c8d7697a4",
|
195
|
+
'authored_date' => date.xmlschema,
|
196
|
+
'committer' => {'email' => "tom@mojombo.com", 'name' => "Tom Preston-Werner"},
|
197
|
+
'message' => "implement Grit#heads",
|
198
|
+
'author' => {'email' => "tom@mojombo.com", 'name' => "Tom Preston-Werner"},
|
199
|
+
'id' => "4c8124ffcf4039d292442eeccabdeca5af5c5017"
|
200
|
+
}
|
201
|
+
|
202
|
+
assert_equal expected, @c.to_hash
|
203
|
+
ensure
|
204
|
+
ENV["TZ"] = old_tz
|
205
|
+
end
|
206
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class TestCommitStats < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
File.expects(:exist?).returns(true)
|
7
|
+
@r = Repo.new(GRIT_REPO)
|
8
|
+
|
9
|
+
Git.any_instance.expects(:log).returns(fixture('log'))
|
10
|
+
@stats = @r.commit_stats
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_commit_stats
|
14
|
+
assert_equal 3, @stats.size
|
15
|
+
end
|
16
|
+
|
17
|
+
# to_hash
|
18
|
+
|
19
|
+
def test_to_hash
|
20
|
+
expected = {
|
21
|
+
"files"=>
|
22
|
+
[["examples/ex_add_commit.rb", 13, 0, 13],
|
23
|
+
["examples/ex_index.rb", 1, 1, 2]],
|
24
|
+
"total"=>15,
|
25
|
+
"additions"=>14,
|
26
|
+
"id"=>"a49b96b339c525d7fd455e0ad4f6fe7b550c9543",
|
27
|
+
"deletions"=>1
|
28
|
+
}
|
29
|
+
|
30
|
+
assert_equal expected, @stats.assoc('a49b96b339c525d7fd455e0ad4f6fe7b550c9543')[1].to_hash
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class TestCommitWrite < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@r = Repo.new(GRIT_REPO)
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_commit
|
9
|
+
expect_commit
|
10
|
+
results = @r.commit_index('my message')
|
11
|
+
assert_commit(results)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_commit_with_author
|
15
|
+
expect_commit
|
16
|
+
results = @r.commit_index('my message','Phillip J Fry <fry@planex.info>')
|
17
|
+
assert_commit(results)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_commit_with_actor
|
21
|
+
expect_commit
|
22
|
+
results = @r.commit_index('my message',Actor.new('Phillip J Fry','fry@planex.info'))
|
23
|
+
assert_commit(results)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_commit_all
|
27
|
+
expect_commit
|
28
|
+
results = @r.commit_all('my message')
|
29
|
+
assert_commit(results)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_commit_all_with_author
|
33
|
+
expect_commit
|
34
|
+
results = @r.commit_all('my message','Phillip J Fry <fry@planex.info>')
|
35
|
+
assert_commit(results)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_commit_all_with_author
|
39
|
+
expect_commit
|
40
|
+
results = @r.commit_all('my message',Actor.new('Phillip J Fry','fry@planex.info'))
|
41
|
+
assert_commit(results)
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def expect_commit
|
48
|
+
Git.any_instance.expects(:commit).returns(fixture('commit'))
|
49
|
+
end
|
50
|
+
def assert_commit(results)
|
51
|
+
assert_match /Created commit/, results
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
data/test/test_config.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class TestConfig < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@r = Repo.new(GRIT_REPO)
|
6
|
+
end
|
7
|
+
|
8
|
+
# data
|
9
|
+
|
10
|
+
def test_bracketed_fetch
|
11
|
+
Git.any_instance.expects(:config).returns(fixture('simple_config'))
|
12
|
+
|
13
|
+
config = @r.config
|
14
|
+
|
15
|
+
assert_equal "git://github.com/mojombo/grit.git", config["remote.origin.url"]
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_bracketed_fetch_returns_nil
|
19
|
+
Git.any_instance.expects(:config).returns(fixture('simple_config'))
|
20
|
+
|
21
|
+
config = @r.config
|
22
|
+
|
23
|
+
assert_equal nil, config["unknown"]
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_fetch
|
27
|
+
Git.any_instance.expects(:config).returns(fixture('simple_config'))
|
28
|
+
|
29
|
+
config = @r.config
|
30
|
+
|
31
|
+
assert_equal "false", config.fetch("core.bare")
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_fetch_with_default
|
35
|
+
Git.any_instance.expects(:config).returns(fixture('simple_config'))
|
36
|
+
|
37
|
+
config = @r.config
|
38
|
+
|
39
|
+
assert_equal "default", config.fetch("unknown", "default")
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_fetch_without_default_raises
|
43
|
+
Git.any_instance.expects(:config).returns(fixture('simple_config'))
|
44
|
+
|
45
|
+
config = @r.config
|
46
|
+
|
47
|
+
assert_raise(IndexError) do
|
48
|
+
config.fetch("unknown")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_set_value
|
53
|
+
Git.any_instance.expects(:config).with({}, 'unknown', 'default')
|
54
|
+
|
55
|
+
config = @r.config
|
56
|
+
config["unknown"] = "default"
|
57
|
+
end
|
58
|
+
end
|
data/test/test_diff.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class TestDiff < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@r = Repo.new(GRIT_REPO)
|
6
|
+
end
|
7
|
+
|
8
|
+
# list_from_string
|
9
|
+
|
10
|
+
def test_list_from_string_new_mode
|
11
|
+
output = fixture('diff_new_mode')
|
12
|
+
|
13
|
+
diffs = Grit::Diff.list_from_string(@r, output)
|
14
|
+
assert_equal 2, diffs.size
|
15
|
+
assert_equal 10, diffs.first.diff.split("\n").size
|
16
|
+
assert_equal nil, diffs.last.diff
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class TestFileIndex < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup_a
|
6
|
+
@findex = Grit::GitRuby::FileIndex.new(File.join(File.dirname(__FILE__), *%w[dot_git]))
|
7
|
+
@commit = 'c12f398c2f3c4068ca5e01d736b1c9ae994b2138'
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_count_all
|
11
|
+
setup_a
|
12
|
+
assert_equal 107, @findex.count_all
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_count
|
16
|
+
setup_a
|
17
|
+
assert_equal 20, @findex.count(@commit)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_files
|
21
|
+
setup_a
|
22
|
+
files = @findex.files(@commit)
|
23
|
+
assert_equal 4, files.size
|
24
|
+
assert_equal "lib/grit/blob.rb", files.first
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_commits_for
|
28
|
+
setup_a
|
29
|
+
commits = @findex.commits_for('lib/grit/blob.rb')
|
30
|
+
assert commits.include?('3e0955045cb189a7112015c26132152a94f637bf')
|
31
|
+
assert_equal 8, commits.size
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_last_commits_array
|
35
|
+
setup_a
|
36
|
+
arr = @findex.last_commits(@commit, ['lib/grit/git.rb', 'lib/grit/actor.rb', 'lib/grit/commit.rb'])
|
37
|
+
assert_equal '74fd66519e983a0f29e16a342a6059dbffe36020', arr['lib/grit/git.rb']
|
38
|
+
assert_equal @commit, arr['lib/grit/commit.rb']
|
39
|
+
assert_equal nil, arr['lib/grit/actor.rb']
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_last_commits_pattern
|
43
|
+
setup_a
|
44
|
+
arr = @findex.last_commits(@commit, /lib\/grit\/[^\/]*$/)
|
45
|
+
assert_equal 10, arr.size
|
46
|
+
assert_equal @commit, arr['lib/grit/commit.rb']
|
47
|
+
assert_equal nil, arr['lib/grit/actor.rb']
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_last_commits_array
|
51
|
+
setup_a
|
52
|
+
arr = @findex.last_commits(@commit, ['lib/grit.rb', 'lib/grit/'])
|
53
|
+
assert_equal @commit, arr['lib/grit/']
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
data/test/test_git.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class TestGit < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@git = Git.new(File.join(File.dirname(__FILE__), *%w[..]))
|
6
|
+
end
|
7
|
+
|
8
|
+
def teardown
|
9
|
+
Grit.debug = false
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_method_missing
|
13
|
+
assert_match(/^git version [\w\.]*$/, @git.version)
|
14
|
+
end
|
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
|
+
|
30
|
+
def test_transform_options
|
31
|
+
assert_equal ["-s"], @git.transform_options({:s => true})
|
32
|
+
assert_equal ["-s '5'"], @git.transform_options({:s => 5})
|
33
|
+
|
34
|
+
assert_equal ["--max-count"], @git.transform_options({:max_count => true})
|
35
|
+
assert_equal ["--max-count='5'"], @git.transform_options({:max_count => 5})
|
36
|
+
|
37
|
+
assert_equal ["-s", "-t"], @git.transform_options({:s => true, :t => true}).sort
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_uses_custom_sh_method
|
41
|
+
@git.expects(:sh)
|
42
|
+
@git.something
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_can_skip_timeout
|
46
|
+
@git.expects(:wild_sh)
|
47
|
+
@git.something(:timeout => false)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_raises_if_too_many_bytes
|
51
|
+
@git.instance_variable_set(:@bytes_read, 6000000)
|
52
|
+
assert_raises Grit::Git::GitTimeout do
|
53
|
+
@git.version
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_raises_on_slow_shell
|
58
|
+
Grit::Git.git_timeout = 0.0000001
|
59
|
+
assert_raises Grit::Git::GitTimeout do
|
60
|
+
@git.version
|
61
|
+
end
|
62
|
+
Grit::Git.git_timeout = 5.0
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_it_really_shell_escapes_arguments_to_the_git_shell
|
66
|
+
@git.expects(:sh).with("#{Git.git_binary} --git-dir='#{@git.git_dir}' foo --bar='bazz\\'er'")
|
67
|
+
@git.foo(:bar => "bazz'er")
|
68
|
+
@git.expects(:sh).with("#{Git.git_binary} --git-dir='#{@git.git_dir}' bar -x 'quu\\'x'")
|
69
|
+
@git.bar(:x => "quu'x")
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_it_shell_escapes_the_standalone_argument
|
73
|
+
@git.expects(:sh).with("#{Git.git_binary} --git-dir='#{@git.git_dir}' foo 'bar\\'s'")
|
74
|
+
@git.foo({}, "bar's")
|
75
|
+
|
76
|
+
@git.expects(:sh).with("#{Git.git_binary} --git-dir='#{@git.git_dir}' foo 'bar' '\\; echo \\'noooo\\''")
|
77
|
+
@git.foo({}, "bar", "; echo 'noooo'")
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_piping_should_work_on_1_9
|
81
|
+
@git.expects(:sh).with("#{Git.git_binary} --git-dir='#{@git.git_dir}' archive 'master' | gzip")
|
82
|
+
@git.archive({}, "master", "| gzip")
|
83
|
+
end
|
84
|
+
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
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class TestHead < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@r = Repo.new(File.join(File.dirname(__FILE__), *%w[dot_git]), :is_bare => true)
|
6
|
+
end
|
7
|
+
|
8
|
+
# inspect
|
9
|
+
|
10
|
+
def test_inspect
|
11
|
+
head = @r.heads[1]
|
12
|
+
assert_equal %Q{#<Grit::Head "test/master">}, head.inspect
|
13
|
+
end
|
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
|
+
|
25
|
+
# heads with slashes
|
26
|
+
|
27
|
+
def test_heads_with_slashes
|
28
|
+
head = @r.heads[3]
|
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')
|
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
|
+
|
47
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class TestIndexStatus < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@r = Repo.new(GRIT_REPO)
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_add
|
9
|
+
Git.any_instance.expects(:add).with({}, 'file1', 'file2')
|
10
|
+
@r.add('file1', 'file2')
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_add_array
|
14
|
+
Git.any_instance.expects(:add).with({}, 'file1', 'file2')
|
15
|
+
@r.add(['file1', 'file2'])
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_remove
|
19
|
+
Git.any_instance.expects(:rm).with({}, 'file1', 'file2')
|
20
|
+
@r.remove('file1', 'file2')
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_remove_array
|
24
|
+
Git.any_instance.expects(:rm).with({}, 'file1', 'file2')
|
25
|
+
@r.remove(['file1', 'file2'])
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_status
|
29
|
+
Git.any_instance.expects(:diff_index).with({}, 'HEAD').returns(fixture('diff_index'))
|
30
|
+
Git.any_instance.expects(:diff_files).returns(fixture('diff_files'))
|
31
|
+
Git.any_instance.expects(:ls_files).with({:stage => true}).returns(fixture('ls_files'))
|
32
|
+
status = @r.status
|
33
|
+
stat = status['lib/grit/repo.rb']
|
34
|
+
assert_equal stat.sha_repo, "71e930d551c413a123f43e35c632ea6ba3e3705e"
|
35
|
+
assert_equal stat.mode_repo, "100644"
|
36
|
+
assert_equal stat.type, "M"
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
end
|
data/test/test_merge.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
require 'pp'
|
3
|
+
|
4
|
+
class TestMerge < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@r = Repo.new(File.join(File.dirname(__FILE__), *%w[dot_git]), :is_bare => true)
|
8
|
+
@merge = fixture('merge_result')
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_from_string
|
12
|
+
m = Grit::Merge.new(@merge)
|
13
|
+
assert_equal m.sections, 3
|
14
|
+
assert_equal m.conflicts, 1
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
data/test/test_raw.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
require 'pp'
|
3
|
+
|
4
|
+
class TestFileIndex < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@r = Grit::Repo.new(File.join(File.dirname(__FILE__), *%w[dot_git]), :is_bare => true)
|
8
|
+
@tag = 'f0055fda16c18fd8b27986dbf038c735b82198d7'
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_raw_tag
|
12
|
+
tag = @r.git.ruby_git.get_object_by_sha1(@tag)
|
13
|
+
assert_match Regexp.new('v0.7.0'), tag.raw_content
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
data/test/test_real.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# require File.dirname(__FILE__) + '/helper'
|
2
|
+
#
|
3
|
+
# class TestReal < Test::Unit::TestCase
|
4
|
+
# def setup
|
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')
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# def test_real
|
11
|
+
# Grit.debug = true
|
12
|
+
#
|
13
|
+
# index = @repo.index
|
14
|
+
# index.add('foo/bar/baz.txt', 'hello!')
|
15
|
+
# index.add('foo/qux/bam.txt', 'world!')
|
16
|
+
#
|
17
|
+
# puts index.commit('first commit')
|
18
|
+
# end
|
19
|
+
# end
|