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.
Files changed (70) hide show
  1. data/API.txt +101 -0
  2. data/History.txt +49 -0
  3. data/LICENSE +22 -0
  4. data/README.md +216 -0
  5. data/VERSION.yml +4 -0
  6. data/examples/ex_add_commit.rb +13 -0
  7. data/examples/ex_index.rb +14 -0
  8. data/lib/grit/actor.rb +41 -0
  9. data/lib/grit/blame.rb +61 -0
  10. data/lib/grit/blob.rb +126 -0
  11. data/lib/grit/commit.rb +242 -0
  12. data/lib/grit/commit_stats.rb +128 -0
  13. data/lib/grit/config.rb +44 -0
  14. data/lib/grit/diff.rb +70 -0
  15. data/lib/grit/errors.rb +7 -0
  16. data/lib/grit/git-ruby/commit_db.rb +52 -0
  17. data/lib/grit/git-ruby/file_index.rb +193 -0
  18. data/lib/grit/git-ruby/git_object.rb +350 -0
  19. data/lib/grit/git-ruby/internal/file_window.rb +58 -0
  20. data/lib/grit/git-ruby/internal/loose.rb +137 -0
  21. data/lib/grit/git-ruby/internal/pack.rb +382 -0
  22. data/lib/grit/git-ruby/internal/raw_object.rb +37 -0
  23. data/lib/grit/git-ruby/object.rb +325 -0
  24. data/lib/grit/git-ruby/repository.rb +736 -0
  25. data/lib/grit/git-ruby.rb +186 -0
  26. data/lib/grit/git.rb +140 -0
  27. data/lib/grit/index.rb +122 -0
  28. data/lib/grit/lazy.rb +33 -0
  29. data/lib/grit/merge.rb +45 -0
  30. data/lib/grit/ref.rb +99 -0
  31. data/lib/grit/repo.rb +447 -0
  32. data/lib/grit/ruby1.9.rb +7 -0
  33. data/lib/grit/status.rb +151 -0
  34. data/lib/grit/submodule.rb +88 -0
  35. data/lib/grit/tag.rb +66 -0
  36. data/lib/grit/tree.rb +123 -0
  37. data/lib/grit.rb +68 -0
  38. data/lib/open3_detach.rb +46 -0
  39. data/test/bench/benchmarks.rb +126 -0
  40. data/test/helper.rb +18 -0
  41. data/test/profile.rb +21 -0
  42. data/test/suite.rb +6 -0
  43. data/test/test_actor.rb +51 -0
  44. data/test/test_blame.rb +32 -0
  45. data/test/test_blame_tree.rb +33 -0
  46. data/test/test_blob.rb +83 -0
  47. data/test/test_commit.rb +206 -0
  48. data/test/test_commit_stats.rb +33 -0
  49. data/test/test_commit_write.rb +54 -0
  50. data/test/test_config.rb +58 -0
  51. data/test/test_diff.rb +18 -0
  52. data/test/test_file_index.rb +56 -0
  53. data/test/test_git.rb +84 -0
  54. data/test/test_grit.rb +32 -0
  55. data/test/test_head.rb +47 -0
  56. data/test/test_index_status.rb +40 -0
  57. data/test/test_merge.rb +17 -0
  58. data/test/test_raw.rb +16 -0
  59. data/test/test_real.rb +19 -0
  60. data/test/test_reality.rb +17 -0
  61. data/test/test_remote.rb +14 -0
  62. data/test/test_repo.rb +347 -0
  63. data/test/test_rubygit.rb +188 -0
  64. data/test/test_rubygit_alt.rb +40 -0
  65. data/test/test_rubygit_index.rb +76 -0
  66. data/test/test_rubygit_iv2.rb +28 -0
  67. data/test/test_submodule.rb +69 -0
  68. data/test/test_tag.rb +67 -0
  69. data/test/test_tree.rb +101 -0
  70. metadata +141 -0
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ # class TestTreeRecursion < Test::Unit::TestCase
4
+ # def test_
5
+ # r = Repo.new("/Users/tom/dev/god")
6
+ # t = r.tree("HEAD")
7
+ #
8
+ # recurse(t)
9
+ # end
10
+ #
11
+ # def recurse(tree, indent = "")
12
+ # tree.contents.each do |c|
13
+ # # puts "#{indent}#{c.name} (#{c.id})"
14
+ # recurse(c, indent + " ") if c.kind_of?(Tree)
15
+ # end
16
+ # end
17
+ # end
@@ -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 ADDED
@@ -0,0 +1,347 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class TestRepo < Test::Unit::TestCase
4
+ def setup
5
+ @r = Repo.new(GRIT_REPO)
6
+ end
7
+
8
+ def create_temp_repo(clone_path)
9
+ filename = 'git_test' + Time.now.to_i.to_s + rand(300).to_s.rjust(3, '0')
10
+ tmp_path = File.join("/tmp/", filename)
11
+ FileUtils.mkdir_p(tmp_path)
12
+ FileUtils.cp_r(clone_path, tmp_path)
13
+ File.join(tmp_path, 'dot_git')
14
+ end
15
+
16
+ def test_update_refs_packed
17
+ gpath = create_temp_repo(File.join(File.dirname(__FILE__), *%w[dot_git]))
18
+ @git = Grit::Repo.new(gpath, :is_bare => true)
19
+
20
+ # new and existing
21
+ test = 'ac9a30f5a7f0f163bbe3b6f0abf18a6c83b06872'
22
+ master = 'ca8a30f5a7f0f163bbe3b6f0abf18a6c83b0687a'
23
+
24
+ @git.update_ref('testref', test)
25
+ new_t = @git.get_head('testref').commit.sha
26
+ assert new_t != master
27
+
28
+ @git.update_ref('master', test)
29
+ new_m = @git.get_head('master').commit.sha
30
+ assert new_m != master
31
+
32
+ old = @git.get_head('nonpack').commit.sha
33
+ @git.update_ref('nonpack', test)
34
+ newp = @git.get_head('nonpack').commit.sha
35
+ assert newp != old
36
+
37
+ FileUtils.rm_r(gpath)
38
+ end
39
+
40
+ # new
41
+
42
+ def test_new_should_raise_on_invalid_repo_location
43
+ assert_raise(InvalidGitRepositoryError) do
44
+ Repo.new("/tmp")
45
+ end
46
+ end
47
+
48
+ def test_new_should_raise_on_non_existant_path
49
+ assert_raise(NoSuchPathError) do
50
+ Repo.new("/foobar")
51
+ end
52
+ end
53
+
54
+ # descriptions
55
+
56
+ def test_description
57
+ assert_equal "Unnamed repository; edit this file to name it for gitweb.", @r.description
58
+ end
59
+
60
+ # refs
61
+
62
+ def test_refs_should_return_array_of_ref_objects
63
+ @r.refs.each do |ref|
64
+ assert ref.is_a?(Grit::Ref)
65
+ end
66
+ end
67
+
68
+ # heads
69
+
70
+ def test_current_head
71
+ @r = Repo.new(File.join(File.dirname(__FILE__), *%w[dot_git]), :is_bare => true)
72
+ head = @r.head
73
+ assert_equal Grit::Head, head.class
74
+ assert_equal 'master', head.name
75
+ assert_equal 'ca8a30f5a7f0f163bbe3b6f0abf18a6c83b0687a', @r.commits(head.name).first.id
76
+ end
77
+
78
+ def test_heads_should_return_array_of_head_objects
79
+ @r.heads.each do |head|
80
+ assert_equal Grit::Head, head.class
81
+ end
82
+ end
83
+
84
+ def test_heads_should_populate_head_data
85
+ @r = Repo.new(File.join(File.dirname(__FILE__), *%w[dot_git]), :is_bare => true)
86
+ head = @r.heads[1]
87
+
88
+ assert_equal 'test/master', head.name
89
+ assert_equal '2d3acf90f35989df8f262dc50beadc4ee3ae1560', head.commit.id
90
+ end
91
+
92
+ # branches
93
+
94
+ def test_branches
95
+ # same as heads
96
+ end
97
+
98
+ # commits
99
+
100
+ def test_commits
101
+ Git.any_instance.expects(:rev_list).returns(fixture('rev_list'))
102
+
103
+ commits = @r.commits('master', 10)
104
+
105
+ c = commits[0]
106
+ assert_equal '4c8124ffcf4039d292442eeccabdeca5af5c5017', c.id
107
+ assert_equal ["634396b2f541a9f2d58b00be1a07f0c358b999b3"], c.parents.map { |p| p.id }
108
+ assert_equal "672eca9b7f9e09c22dcb128c283e8c3c8d7697a4", c.tree.id
109
+ assert_equal "Tom Preston-Werner", c.author.name
110
+ assert_equal "tom@mojombo.com", c.author.email
111
+ assert_equal Time.at(1191999972), c.authored_date
112
+ assert_equal "Tom Preston-Werner", c.committer.name
113
+ assert_equal "tom@mojombo.com", c.committer.email
114
+ assert_equal Time.at(1191999972), c.committed_date
115
+ assert_equal "implement Grit#heads", c.message
116
+
117
+ c = commits[1]
118
+ assert_equal [], c.parents
119
+
120
+ c = commits[2]
121
+ assert_equal ["6e64c55896aabb9a7d8e9f8f296f426d21a78c2c", "7f874954efb9ba35210445be456c74e037ba6af2"], c.parents.map { |p| p.id }
122
+ assert_equal "Merge branch 'site'\n\n * Some other stuff\n * just one more", c.message
123
+ assert_equal "Merge branch 'site'", c.short_message
124
+ end
125
+
126
+ # commit_count
127
+
128
+ def test_commit_count
129
+ Git.any_instance.expects(:rev_list).with({}, 'master').returns(fixture('rev_list_count'))
130
+
131
+ assert_equal 655, @r.commit_count('master')
132
+ end
133
+
134
+ # commit
135
+
136
+ def test_commit
137
+ commit = @r.commit('634396b2f541a9f2d58b00be1a07f0c358b999b3')
138
+
139
+ assert_equal "634396b2f541a9f2d58b00be1a07f0c358b999b3", commit.id
140
+ end
141
+
142
+ # tree
143
+
144
+ def test_tree
145
+ Git.any_instance.expects(:ls_tree).returns(fixture('ls_tree_a'))
146
+ tree = @r.tree('master')
147
+
148
+ assert_equal 4, tree.contents.select { |c| c.instance_of?(Blob) }.size
149
+ assert_equal 3, tree.contents.select { |c| c.instance_of?(Tree) }.size
150
+ end
151
+
152
+ # blob
153
+
154
+ def test_blob
155
+ Git.any_instance.expects(:cat_file).returns(fixture('cat_file_blob'))
156
+ blob = @r.blob("abc")
157
+ assert_equal "Hello world", blob.data
158
+ end
159
+
160
+ # init_bare
161
+
162
+ def test_init_bare
163
+ Git.any_instance.expects(:init).returns(true)
164
+ Repo.expects(:new).with("/foo/bar.git", {})
165
+ Repo.init_bare("/foo/bar.git")
166
+ end
167
+
168
+ def test_init_bare_with_options
169
+ Git.any_instance.expects(:init).with(
170
+ :template => "/baz/sweet").returns(true)
171
+ Repo.expects(:new).with("/foo/bar.git", {})
172
+ Repo.init_bare("/foo/bar.git", :template => "/baz/sweet")
173
+ end
174
+
175
+ # fork_bare
176
+
177
+ def test_fork_bare
178
+ Git.any_instance.expects(:clone).with(
179
+ {:bare => true, :shared => true},
180
+ "#{absolute_project_path}/.git",
181
+ "/foo/bar.git").returns(nil)
182
+ Repo.expects(:new)
183
+
184
+ @r.fork_bare("/foo/bar.git")
185
+ end
186
+
187
+ def test_fork_bare_with_options
188
+ Git.any_instance.expects(:clone).with(
189
+ {:bare => true, :shared => true, :template => '/awesome'},
190
+ "#{absolute_project_path}/.git",
191
+ "/foo/bar.git").returns(nil)
192
+ Repo.expects(:new)
193
+
194
+ @r.fork_bare("/foo/bar.git", :template => '/awesome')
195
+ end
196
+
197
+ # diff
198
+
199
+ def test_diff
200
+ Git.any_instance.expects(:diff).with({}, 'master^', 'master', '--')
201
+ @r.diff('master^', 'master')
202
+
203
+ Git.any_instance.expects(:diff).with({}, 'master^', 'master', '--', 'foo/bar')
204
+ @r.diff('master^', 'master', 'foo/bar')
205
+
206
+ Git.any_instance.expects(:diff).with({}, 'master^', 'master', '--', 'foo/bar', 'foo/baz')
207
+ @r.diff('master^', 'master', 'foo/bar', 'foo/baz')
208
+ end
209
+
210
+ # commit_diff
211
+
212
+ def test_diff
213
+ Git.any_instance.expects(:diff).returns(fixture('diff_p'))
214
+ diffs = @r.commit_diff('master')
215
+
216
+ assert_equal 15, diffs.size
217
+ end
218
+
219
+ # init bare
220
+
221
+ # archive
222
+
223
+ def test_archive_tar
224
+ #@r.archive_tar -- no assertion being done here
225
+ end
226
+
227
+ # archive_tar_gz
228
+
229
+ def test_archive_tar_gz
230
+ #@r.archive_tar_gz -- again, no assertion
231
+ end
232
+
233
+ # enable_daemon_serve
234
+
235
+ def test_enable_daemon_serve
236
+ FileUtils.expects(:touch).with(File.join(@r.path, 'git-daemon-export-ok'))
237
+ @r.enable_daemon_serve
238
+ end
239
+
240
+ # disable_daemon_serve
241
+
242
+ def test_disable_daemon_serve
243
+ FileUtils.expects(:rm_f).with(File.join(@r.path, 'git-daemon-export-ok'))
244
+ @r.disable_daemon_serve
245
+ end
246
+
247
+ def test_gc_auto
248
+ Git.any_instance.expects(:gc).with({:auto => true})
249
+ @r.gc_auto
250
+ end
251
+
252
+ # alternates
253
+
254
+ def test_alternates_with_two_alternates
255
+ File.expects(:exist?).with("#{absolute_project_path}/.git/objects/info/alternates").returns(true)
256
+ File.expects(:read).returns("/path/to/repo1/.git/objects\n/path/to/repo2.git/objects\n")
257
+
258
+ assert_equal ["/path/to/repo1/.git/objects", "/path/to/repo2.git/objects"], @r.alternates
259
+ end
260
+
261
+ def test_alternates_no_file
262
+ File.expects(:exist?).returns(false)
263
+
264
+ assert_equal [], @r.alternates
265
+ end
266
+
267
+ # alternates=
268
+
269
+ def test_alternates_setter_ok
270
+ alts = %w{/path/to/repo.git/objects /path/to/repo2.git/objects}
271
+
272
+ alts.each do |alt|
273
+ File.expects(:exist?).with(alt).returns(true)
274
+ end
275
+
276
+ File.any_instance.expects(:write).with(alts.join("\n"))
277
+
278
+ assert_nothing_raised do
279
+ @r.alternates = alts
280
+ end
281
+ end
282
+
283
+ def test_alternates_setter_bad
284
+ alts = %w{/path/to/repo.git/objects}
285
+
286
+ alts.each do |alt|
287
+ File.expects(:exist?).with(alt).returns(false)
288
+ end
289
+
290
+ File.any_instance.expects(:write).never
291
+
292
+ assert_raise RuntimeError do
293
+ @r.alternates = alts
294
+ end
295
+ end
296
+
297
+ def test_alternates_setter_empty
298
+ File.any_instance.expects(:write)
299
+ @r.alternates = []
300
+ end
301
+
302
+ # inspect
303
+
304
+ def test_inspect
305
+ assert_equal %Q{#<Grit::Repo "#{File.expand_path(GRIT_REPO)}/.git">}, @r.inspect
306
+ end
307
+
308
+ # log
309
+
310
+ def test_log
311
+ Git.any_instance.expects(:log).times(2).with({:pretty => 'raw'}, 'master').returns(fixture('rev_list'))
312
+
313
+ assert_equal '4c8124ffcf4039d292442eeccabdeca5af5c5017', @r.log.first.id
314
+ assert_equal 'ab25fd8483882c3bda8a458ad2965d2248654335', @r.log.last.id
315
+ end
316
+
317
+ def test_log_with_path_and_options
318
+ Git.any_instance.expects(:log).with({:pretty => 'raw', :max_count => 1}, 'master', '--', 'file.rb').returns(fixture('rev_list'))
319
+ @r.log('master', 'file.rb', :max_count => 1)
320
+ end
321
+
322
+ # commit_deltas_from
323
+
324
+ def test_commit_deltas_from_nothing_new
325
+ other_repo = Repo.new(GRIT_REPO)
326
+ @r.git.expects(:rev_list).with({}, "master").returns(fixture("rev_list_delta_b"))
327
+ other_repo.git.expects(:rev_list).with({}, "master").returns(fixture("rev_list_delta_a"))
328
+
329
+ delta_blobs = @r.commit_deltas_from(other_repo)
330
+ assert_equal 0, delta_blobs.size
331
+ end
332
+
333
+ def test_commit_deltas_from_when_other_has_new
334
+ other_repo = Repo.new(GRIT_REPO)
335
+ @r.git.expects(:rev_list).with({}, "master").returns(fixture("rev_list_delta_a"))
336
+ other_repo.git.expects(:rev_list).with({}, "master").returns(fixture("rev_list_delta_b"))
337
+ %w[
338
+ 4c8124ffcf4039d292442eeccabdeca5af5c5017
339
+ 634396b2f541a9f2d58b00be1a07f0c358b999b3
340
+ ab25fd8483882c3bda8a458ad2965d2248654335
341
+ ].each do |ref|
342
+ Commit.expects(:find_all).with(other_repo, ref, :max_count => 1).returns([stub()])
343
+ end
344
+ delta_blobs = @r.commit_deltas_from(other_repo)
345
+ assert_equal 3, delta_blobs.size
346
+ end
347
+ end
@@ -0,0 +1,188 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+ require 'tempfile'
3
+
4
+ class TestRubyGit < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @git = Git.new(File.join(File.dirname(__FILE__), *%w[dot_git]))
8
+ @commit_sha = '5e3ee1198672257164ce3fe31dea3e40848e68d5'
9
+ @tree_sha = 'cd7422af5a2e0fff3e94d6fb1a8fff03b2841881'
10
+ @blob_sha = '4232d073306f01cf0b895864e5a5cfad7dd76fce'
11
+ end
12
+
13
+ def test_init_gitdir
14
+ tf = Tempfile.new('gitdir')
15
+ temppath = tf.path
16
+ tf.unlink
17
+
18
+ git = Git.new(temppath)
19
+ git.init({})
20
+ assert File.exists?(File.join(temppath, 'config'))
21
+ end
22
+
23
+ def test_log_merge
24
+ c1 = '420eac97a826bfac8724b6b0eef35c20922124b7'
25
+ c2 = '30e367cef2203eba2b341dc9050993b06fd1e108'
26
+ out = @git.rev_list({:pretty => 'raw', :max_count => 10}, 'master')
27
+ assert_match "commit #{c1}", out
28
+ assert_match "commit #{c2}", out
29
+ end
30
+
31
+ def test_log_max_count
32
+ out = @git.rev_list({:max_count => 10}, 'master')
33
+ assert_equal 10, out.split("\n").size
34
+ end
35
+
36
+ def test_diff
37
+ commit1 = '2d3acf90f35989df8f262dc50beadc4ee3ae1560'
38
+ commit2 = '420eac97a826bfac8724b6b0eef35c20922124b7'
39
+ out = @git.diff({}, commit1, commit2)
40
+ assert_match 'index 6afcf64..9e78ddf 100644', out
41
+ end
42
+
43
+ def test_diff_single
44
+ commit1 = '2d3acf90f35989df8f262dc50beadc4ee3ae1560'
45
+ out = @git.diff({}, commit1, nil)
46
+ assert_match 'index ad42ff5..aa50f09 100644', out
47
+ end
48
+
49
+ def test_diff_full
50
+ commit1 = '2d3acf90f35989df8f262dc50beadc4ee3ae1560'
51
+ commit2 = '420eac97a826bfac8724b6b0eef35c20922124b7'
52
+ out = @git.diff({:full_index => true}, commit1, commit2)
53
+ assert_match 'index 6afcf64c80da8253fa47228eb09bc0eea217e5d1..9e78ddfaabf79f8314cc9a53a2f59775aee06bd7', out
54
+ end
55
+
56
+ def test_diff_add
57
+ commit1 = 'c9cf68fc61bd2634e90a4f6a12d88744e6297c4e'
58
+ commit2 = '7a8d32cb18a0ba2ff8bf86cadacc3fd2816da219'
59
+ out = @git.diff({}, commit1, commit2)
60
+ assert_match 'index 0000000..2e3b0cb', out
61
+ end
62
+
63
+ def test_diff_remove
64
+ commit1 = 'c9cf68fc61bd2634e90a4f6a12d88744e6297c4e'
65
+ commit2 = '7a8d32cb18a0ba2ff8bf86cadacc3fd2816da219'
66
+ out = @git.diff({}, commit1, commit2)
67
+ assert_match 'index 0000000..2e3b0cb', out
68
+ end
69
+
70
+
71
+ def test_cat_file_contents_commit
72
+ out = @git.cat_file({:p => true}, @commit_sha)
73
+ assert_equal out, fixture('cat_file_commit_ruby')
74
+ end
75
+
76
+ def test_cat_file_contents_tree
77
+ out = @git.cat_file({:p => true}, @tree_sha)
78
+ assert_equal out, fixture('cat_file_tree_ruby').chomp
79
+ end
80
+
81
+ def test_cat_file_contents_blob
82
+ out = @git.cat_file({:p => true}, @blob_sha)
83
+ assert_equal out, fixture('cat_file_blob_ruby')
84
+ end
85
+
86
+ def test_cat_file_size
87
+ out = @git.cat_file({:s => true}, @tree_sha)
88
+ assert_equal '252', out
89
+ end
90
+
91
+ def test_ls_tree
92
+ out = @git.ls_tree({}, @tree_sha)
93
+ assert_equal out, fixture('cat_file_tree_ruby').chomp
94
+ end
95
+
96
+ def test_ls_tree_with_blobs
97
+ out = @git.ls_tree({}, @blob_sha)
98
+ assert_equal out, nil
99
+ end
100
+
101
+ def test_ls_tree_treeish
102
+ out = @git.ls_tree({}, 'testing')
103
+ assert_equal out, fixture('cat_file_tree_ruby').chomp
104
+ end
105
+
106
+ def test_ls_tree_paths
107
+ paths = ['History.txt', 'lib']
108
+ out = @git.ls_tree({}, @tree_sha, paths)
109
+ assert_equal out, fixture('ls_tree_paths_ruby').chomp
110
+ end
111
+
112
+ def test_ls_tree_paths_multi_single
113
+ paths = ['lib/grit.rb']
114
+ out = @git.ls_tree({}, @tree_sha, paths)
115
+ assert_equal out, '100644 blob 6afcf64c80da8253fa47228eb09bc0eea217e5d1 lib/grit.rb'
116
+ end
117
+
118
+ def test_rev_list_pretty
119
+ out = @git.rev_list({:pretty => 'raw'}, 'master')
120
+ assert_equal out, fixture('rev_list_all')
121
+ end
122
+
123
+ def test_rev_list_raw_since
124
+ out = @git.rev_list({:since => Time.at(1204644738)}, 'master')
125
+ assert_match fixture('rev_list_since'), out # I return slightly more for now
126
+ end
127
+
128
+ def test_rev_list_pretty_raw
129
+ out = @git.rev_list({:pretty => 'raw'}, 'f1964ad1919180dd1d9eae9d21a1a1f68ac60e77')
130
+ assert_match 'f1964ad1919180dd1d9eae9d21a1a1f68ac60e77', out
131
+ assert_equal out.split("\n").size, 654
132
+ end
133
+
134
+ def test_rev_list
135
+ out = @git.rev_list({}, 'master')
136
+ assert_equal out, fixture('rev_list_lines')
137
+ end
138
+
139
+ def test_rev_list_range
140
+ range = '30e367cef2203eba2b341dc9050993b06fd1e108..3fa4e130fa18c92e3030d4accb5d3e0cadd40157'
141
+ out = @git.rev_list({}, range)
142
+ assert_equal fixture('rev_list_range'), out
143
+ end
144
+
145
+ def test_ls_tree_paths_multi
146
+ paths = ['History.txt', 'lib/grit.rb']
147
+ out = @git.ls_tree({}, @tree_sha, paths)
148
+ assert_equal out, fixture('ls_tree_paths_ruby_deep').chomp
149
+ end
150
+
151
+ def test_ls_tree_path
152
+ paths = ['lib/']
153
+ out = @git.ls_tree({}, @tree_sha, paths)
154
+ assert_equal out, "100644 blob 6afcf64c80da8253fa47228eb09bc0eea217e5d1\tlib/grit.rb\n040000 tree 6244414d0229fb2bd58bc426a2afb5ba66773498\tlib/grit"
155
+ end
156
+
157
+ def test_ls_tree_path_deep
158
+ paths = ['lib/grit/']
159
+ out = @git.ls_tree({}, @tree_sha, paths)
160
+ assert_equal out, fixture('ls_tree_subdir').chomp
161
+ end
162
+
163
+ def test_file_type
164
+ out = @git.file_type(@tree_sha).to_s
165
+ assert_equal 'tree', out
166
+ out = @git.file_type(@blob_sha).to_s
167
+ assert_equal 'blob', out
168
+ out = @git.file_type(@commit_sha).to_s
169
+ assert_equal 'commit', out
170
+ end
171
+
172
+ #def test_ls_tree_noexist
173
+ # puts out = @git.ls_tree({}, '6afcf64c80da8253fa47228eb09bc0eea217e5d0')
174
+ #end
175
+
176
+
177
+ =begin
178
+ def test_ls_tree_grit_tree
179
+ paths = ['lib/grit.rb']
180
+ @repo = Grit::Repo.new('~/projects/github')
181
+ paths = ['app/models/event.rb']
182
+ puts out = @repo.git.ls_tree({}, 'master', ['app/models/event.rb'])
183
+ puts out = @repo.tree('master', paths).contents
184
+ assert_equal out, '100644 blob 6afcf64c80da8253fa47228eb09bc0eea217e5d1 lib/grit.rb'
185
+ end
186
+ =end
187
+
188
+ end
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+ require 'pp'
3
+
4
+ class TestRubyGitAlt < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @git1 = Grit::Repo.new(File.join(File.dirname(__FILE__), *%w[dot_git]), :is_bare => true)
8
+ @git2 = Grit::Repo.new(File.join(File.dirname(__FILE__), *%w[dot_git_clone]), :is_bare => true)
9
+ @git3 = Grit::Repo.new(File.join(File.dirname(__FILE__), *%w[dot_git_clone2]), :is_bare => true)
10
+ @commit_sha = 'ca8a30f5a7f0f163bbe3b6f0abf18a6c83b0687a'
11
+ @tree_sha = 'cd7422af5a2e0fff3e94d6fb1a8fff03b2841881'
12
+ @blob_sha = '4232d073306f01cf0b895864e5a5cfad7dd76fce'
13
+ end
14
+
15
+ def test_basic
16
+ sha_hex = [@commit_sha].pack("H*")
17
+ assert @git1.git.ruby_git.in_loose?(sha_hex)
18
+ assert @git2.git.ruby_git.in_loose?(sha_hex)
19
+ assert @git1.git.ruby_git.object_exists?(@commit_sha)
20
+ assert @git2.git.ruby_git.object_exists?(@commit_sha)
21
+ assert_equal 10, @git1.commits.size
22
+ assert_equal 10, @git2.commits.size
23
+ end
24
+
25
+ def test_clone_of_clone
26
+ sha_hex = [@commit_sha].pack("H*")
27
+ assert @git2.git.ruby_git.in_loose?(sha_hex)
28
+ assert @git3.git.ruby_git.in_loose?(sha_hex)
29
+ assert @git2.git.ruby_git.object_exists?(@commit_sha)
30
+ assert @git3.git.ruby_git.object_exists?(@commit_sha)
31
+ assert_equal 10, @git2.commits.size
32
+ assert_equal 10, @git3.commits.size
33
+ end
34
+
35
+ def test_tree_path
36
+ file = @git2.tree('master', ['test/test_head.rb']).contents.first.name
37
+ assert_equal file, 'test/test_head.rb'
38
+ end
39
+
40
+ end
@@ -0,0 +1,76 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+ require 'pp'
3
+
4
+ class TestRubyGitIndex < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @base_repo = create_temp_repo(File.join(File.dirname(__FILE__), *%w[dot_git_iv2]))
8
+ @git = Grit::Repo.new(@base_repo, :is_bare => true)
9
+ @rgit = @git.git.ruby_git
10
+ @user = Actor.from_string("Tom Werner <tom@example.com>")
11
+ end
12
+
13
+ def teardown
14
+ FileUtils.rm_r(@base_repo)
15
+ end
16
+
17
+ def create_temp_repo(clone_path)
18
+ filename = 'git_test' + Time.now.to_i.to_s + rand(300).to_s.rjust(3, '0')
19
+ tmp_path = File.join("/tmp/", filename)
20
+ FileUtils.mkdir_p(tmp_path)
21
+ FileUtils.cp_r(clone_path, tmp_path)
22
+ File.join(tmp_path, 'dot_git_iv2')
23
+ end
24
+
25
+ def test_add_files
26
+ sha = @git.commits.first.tree.id
27
+
28
+ i = @git.index
29
+ i.read_tree(sha)
30
+ i.add('atester.rb', 'test stuff')
31
+ i.commit('message', [@git.commits.first], @user, nil, 'master')
32
+
33
+ b = @git.commits.first.tree/'atester.rb'
34
+ assert_equal 'f80c3b68482d5e1c8d24c9b8139340f0d0a928d0', b.id
35
+ end
36
+
37
+ def test_add_path_file
38
+ sha = @git.commits.first.tree.id
39
+
40
+ i = @git.index
41
+ i.read_tree(sha)
42
+ i.add('lib/atester.rb', 'test stuff')
43
+ i.commit('message', [@git.commits.first], @user, nil, 'master')
44
+
45
+ b = @git.commits.first.tree/'lib'/'atester.rb'
46
+ assert_equal 'f80c3b68482d5e1c8d24c9b8139340f0d0a928d0', b.id
47
+ b = @git.commits.first.tree/'lib'/'grit.rb'
48
+ assert_equal '77aa887449c28a922a660b2bb749e4127f7664e5', b.id
49
+ end
50
+
51
+ def test_ordered_properly
52
+ sha = @git.commits.first.tree.id
53
+
54
+ i = @git.index
55
+ i.read_tree(sha)
56
+ i.add('lib.rb', 'test stuff')
57
+ i.commit('message', [@git.commits.first], @user, nil, 'master')
58
+
59
+ tr = @git.commits.first.tree.contents
60
+ entries = tr.select { |c| c.name[0, 3] == 'lib' }.map { |c| c.name }
61
+ assert_equal 'lib.rb', entries[0]
62
+ assert_equal 'lib', entries[1]
63
+ end
64
+
65
+ def test_modify_file
66
+ sha = @git.commits.first.tree.id
67
+
68
+ i = @git.index
69
+ i.read_tree(sha)
70
+ i.add('README.txt', 'test more stuff')
71
+ i.commit('message', [@git.commits.first], @user, nil, 'master')
72
+
73
+ b = @git.commits.first.tree/'README.txt'
74
+ assert_equal 'e45d6b418e34951ddaa3e78e4fc4d3d92a46d3d1', b.id
75
+ end
76
+ end