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,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
@@ -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
@@ -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