git-trip 0.0.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.
Files changed (92) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +21 -0
  3. data/Manifest.txt +89 -0
  4. data/README.txt +60 -0
  5. data/Rakefile +31 -0
  6. data/bin/git-trip +0 -0
  7. data/doc/USAGE.txt +54 -0
  8. data/lib/core_ext/hash.rb +15 -0
  9. data/lib/git-trip.rb +23 -0
  10. data/lib/git-trip/errors.rb +22 -0
  11. data/lib/git-trip/gitter.rb +10 -0
  12. data/lib/git-trip/gitter/base.rb +18 -0
  13. data/lib/git-trip/gitter/dir.rb +32 -0
  14. data/lib/git-trip/gitter/uri.rb +40 -0
  15. data/lib/git-trip/paint_mode.rb +52 -0
  16. data/lib/git-trip/painter.rb +167 -0
  17. data/spec/core_ext/hash_spec.rb +25 -0
  18. data/spec/git-trip/errors_spec.rb +43 -0
  19. data/spec/git-trip/gitter/base_spec.rb +15 -0
  20. data/spec/git-trip/gitter/dir_spec.rb +37 -0
  21. data/spec/git-trip/gitter/uri_spec.rb +25 -0
  22. data/spec/git-trip/gitter_spec.rb +11 -0
  23. data/spec/git-trip/paint_mode_spec.rb +56 -0
  24. data/spec/git-trip/painter_spec.rb +173 -0
  25. data/spec/git_trip_spec.rb +23 -0
  26. data/spec/rcov.opts +1 -0
  27. data/spec/spec.opts +4 -0
  28. data/spec/spec_helper.rb +15 -0
  29. data/tasks/ditz.rake +42 -0
  30. data/tasks/docs.rake +68 -0
  31. data/tasks/gittrip.rake +63 -0
  32. data/tasks/rspec.rake +22 -0
  33. data/tasks/site.rake +48 -0
  34. data/tasks/util.rake +44 -0
  35. data/vendor/grit/History.txt +6 -0
  36. data/vendor/grit/Manifest.txt +53 -0
  37. data/vendor/grit/README.txt +213 -0
  38. data/vendor/grit/Rakefile +29 -0
  39. data/vendor/grit/grit.gemspec +16 -0
  40. data/vendor/grit/lib/grit.rb +37 -0
  41. data/vendor/grit/lib/grit/actor.rb +36 -0
  42. data/vendor/grit/lib/grit/blob.rb +117 -0
  43. data/vendor/grit/lib/grit/commit.rb +208 -0
  44. data/vendor/grit/lib/grit/config.rb +44 -0
  45. data/vendor/grit/lib/grit/diff.rb +70 -0
  46. data/vendor/grit/lib/grit/errors.rb +7 -0
  47. data/vendor/grit/lib/grit/git.rb +116 -0
  48. data/vendor/grit/lib/grit/index.rb +77 -0
  49. data/vendor/grit/lib/grit/lazy.rb +31 -0
  50. data/vendor/grit/lib/grit/ref.rb +110 -0
  51. data/vendor/grit/lib/grit/repo.rb +318 -0
  52. data/vendor/grit/lib/grit/tree.rb +99 -0
  53. data/vendor/grit/test/fixtures/blame +131 -0
  54. data/vendor/grit/test/fixtures/cat_file_blob +1 -0
  55. data/vendor/grit/test/fixtures/cat_file_blob_size +1 -0
  56. data/vendor/grit/test/fixtures/diff_2 +54 -0
  57. data/vendor/grit/test/fixtures/diff_2f +19 -0
  58. data/vendor/grit/test/fixtures/diff_f +15 -0
  59. data/vendor/grit/test/fixtures/diff_i +201 -0
  60. data/vendor/grit/test/fixtures/diff_mode_only +1152 -0
  61. data/vendor/grit/test/fixtures/diff_new_mode +17 -0
  62. data/vendor/grit/test/fixtures/diff_p +610 -0
  63. data/vendor/grit/test/fixtures/for_each_ref +0 -0
  64. data/vendor/grit/test/fixtures/for_each_ref_remotes +0 -0
  65. data/vendor/grit/test/fixtures/for_each_ref_tags +0 -0
  66. data/vendor/grit/test/fixtures/ls_tree_a +7 -0
  67. data/vendor/grit/test/fixtures/ls_tree_b +2 -0
  68. data/vendor/grit/test/fixtures/ls_tree_commit +3 -0
  69. data/vendor/grit/test/fixtures/rev_list +26 -0
  70. data/vendor/grit/test/fixtures/rev_list_count +655 -0
  71. data/vendor/grit/test/fixtures/rev_list_single +7 -0
  72. data/vendor/grit/test/fixtures/rev_parse +1 -0
  73. data/vendor/grit/test/fixtures/show_empty_commit +6 -0
  74. data/vendor/grit/test/fixtures/simple_config +2 -0
  75. data/vendor/grit/test/helper.rb +17 -0
  76. data/vendor/grit/test/profile.rb +21 -0
  77. data/vendor/grit/test/suite.rb +6 -0
  78. data/vendor/grit/test/test_actor.rb +35 -0
  79. data/vendor/grit/test/test_blob.rb +74 -0
  80. data/vendor/grit/test/test_commit.rb +182 -0
  81. data/vendor/grit/test/test_config.rb +58 -0
  82. data/vendor/grit/test/test_diff.rb +18 -0
  83. data/vendor/grit/test/test_git.rb +52 -0
  84. data/vendor/grit/test/test_head.rb +22 -0
  85. data/vendor/grit/test/test_real.rb +19 -0
  86. data/vendor/grit/test/test_reality.rb +17 -0
  87. data/vendor/grit/test/test_remote.rb +15 -0
  88. data/vendor/grit/test/test_repo.rb +278 -0
  89. data/vendor/grit/test/test_tag.rb +29 -0
  90. data/vendor/grit/test/test_tree.rb +91 -0
  91. metadata +179 -0
  92. metadata.gz.sig +0 -0
@@ -0,0 +1,22 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class TestHead < Test::Unit::TestCase
4
+ def setup
5
+ @r = Repo.new(GRIT_REPO)
6
+ Git.any_instance.expects(:for_each_ref).returns(fixture('for_each_ref'))
7
+ end
8
+
9
+ # inspect
10
+
11
+ def test_inspect
12
+ head = @r.heads.first
13
+ assert_equal %Q{#<Grit::Head "#{head.name}">}, head.inspect
14
+ end
15
+
16
+ # heads with slashes
17
+
18
+ def test_heads_with_slashes
19
+ head = @r.heads.last
20
+ assert_equal %Q{#<Grit::Head "mojombo/master">}, head.inspect
21
+ end
22
+ end
@@ -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
@@ -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,15 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class TestRemote < Test::Unit::TestCase
4
+ def setup
5
+ @r = Repo.new(GRIT_REPO)
6
+ Git.any_instance.expects(:for_each_ref).returns(fixture('for_each_ref_remotes'))
7
+ end
8
+
9
+ # inspect
10
+
11
+ def test_inspect
12
+ remote = @r.remotes.first
13
+ assert_equal %Q{#<Grit::Remote "#{remote.name}">}, remote.inspect
14
+ end
15
+ end
@@ -0,0 +1,278 @@
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
+ # new
9
+
10
+ def test_new_should_raise_on_invalid_repo_location
11
+ assert_raise(InvalidGitRepositoryError) do
12
+ Repo.new("/tmp")
13
+ end
14
+ end
15
+
16
+ def test_new_should_raise_on_non_existant_path
17
+ assert_raise(NoSuchPathError) do
18
+ Repo.new("/foobar")
19
+ end
20
+ end
21
+
22
+ # descriptions
23
+
24
+ def test_description
25
+ assert_equal "Unnamed repository; edit this file to name it for gitweb.", @r.description
26
+ end
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
+
36
+ # heads
37
+
38
+ def test_heads_should_return_array_of_head_objects
39
+ @r.heads.each do |head|
40
+ assert_equal Grit::Head, head.class
41
+ end
42
+ end
43
+
44
+ def test_heads_should_populate_head_data
45
+ Git.any_instance.expects(:for_each_ref).returns(fixture('for_each_ref'))
46
+
47
+ head = @r.heads.first
48
+
49
+ assert_equal 'master', head.name
50
+ assert_equal '634396b2f541a9f2d58b00be1a07f0c358b999b3', head.commit.id
51
+ end
52
+
53
+ # branches
54
+
55
+ def test_branches
56
+ # same as heads
57
+ end
58
+
59
+ # commits
60
+
61
+ def test_commits
62
+ Git.any_instance.expects(:rev_list).returns(fixture('rev_list'))
63
+
64
+ commits = @r.commits('master', 10)
65
+
66
+ c = commits[0]
67
+ assert_equal '4c8124ffcf4039d292442eeccabdeca5af5c5017', c.id
68
+ assert_equal ["634396b2f541a9f2d58b00be1a07f0c358b999b3"], c.parents.map { |p| p.id }
69
+ assert_equal "672eca9b7f9e09c22dcb128c283e8c3c8d7697a4", c.tree.id
70
+ assert_equal "Tom Preston-Werner", c.author.name
71
+ assert_equal "tom@mojombo.com", c.author.email
72
+ assert_equal Time.at(1191999972), c.authored_date
73
+ assert_equal "Tom Preston-Werner", c.committer.name
74
+ assert_equal "tom@mojombo.com", c.committer.email
75
+ assert_equal Time.at(1191999972), c.committed_date
76
+ assert_equal "implement Grit#heads", c.message
77
+
78
+ c = commits[1]
79
+ assert_equal [], c.parents
80
+
81
+ c = commits[2]
82
+ assert_equal ["6e64c55896aabb9a7d8e9f8f296f426d21a78c2c", "7f874954efb9ba35210445be456c74e037ba6af2"], c.parents.map { |p| p.id }
83
+ assert_equal "Merge branch 'site'\n\n * Some other stuff\n * just one more", c.message
84
+ assert_equal "Merge branch 'site'", c.short_message
85
+ end
86
+
87
+ # commit_count
88
+
89
+ def test_commit_count
90
+ Git.any_instance.expects(:rev_list).with({}, 'master').returns(fixture('rev_list_count'))
91
+
92
+ assert_equal 655, @r.commit_count('master')
93
+ end
94
+
95
+ # commit
96
+
97
+ def test_commit
98
+ commit = @r.commit('634396b2f541a9f2d58b00be1a07f0c358b999b3')
99
+
100
+ assert_equal "634396b2f541a9f2d58b00be1a07f0c358b999b3", commit.id
101
+ end
102
+
103
+ # tree
104
+
105
+ def test_tree
106
+ Git.any_instance.expects(:ls_tree).returns(fixture('ls_tree_a'))
107
+ tree = @r.tree('master')
108
+
109
+ assert_equal 4, tree.contents.select { |c| c.instance_of?(Blob) }.size
110
+ assert_equal 3, tree.contents.select { |c| c.instance_of?(Tree) }.size
111
+ end
112
+
113
+ # blob
114
+
115
+ def test_blob
116
+ Git.any_instance.expects(:cat_file).returns(fixture('cat_file_blob'))
117
+ blob = @r.blob("abc")
118
+ assert_equal "Hello world", blob.data
119
+ end
120
+
121
+ # init_bare
122
+
123
+ def test_init_bare
124
+ Git.any_instance.expects(:init).returns(true)
125
+ Repo.expects(:new).with("/foo/bar.git")
126
+ Repo.init_bare("/foo/bar.git")
127
+ end
128
+
129
+ def test_init_bare_with_options
130
+ Git.any_instance.expects(:init).with(
131
+ :template => "/baz/sweet").returns(true)
132
+ Repo.expects(:new).with("/foo/bar.git")
133
+ Repo.init_bare("/foo/bar.git", :template => "/baz/sweet")
134
+ end
135
+
136
+ # fork_bare
137
+
138
+ def test_fork_bare
139
+ Git.any_instance.expects(:clone).with(
140
+ {:bare => true, :shared => true},
141
+ "#{absolute_project_path}/.git",
142
+ "/foo/bar.git").returns(nil)
143
+ Repo.expects(:new)
144
+
145
+ @r.fork_bare("/foo/bar.git")
146
+ end
147
+
148
+ def test_fork_bare_with_options
149
+ Git.any_instance.expects(:clone).with(
150
+ {:bare => true, :shared => true, :template => '/awesome'},
151
+ "#{absolute_project_path}/.git",
152
+ "/foo/bar.git").returns(nil)
153
+ Repo.expects(:new)
154
+
155
+ @r.fork_bare("/foo/bar.git", :template => '/awesome')
156
+ end
157
+
158
+ # diff
159
+
160
+ def test_diff
161
+ Git.any_instance.expects(:diff).with({}, 'master^', 'master', '--')
162
+ @r.diff('master^', 'master')
163
+
164
+ Git.any_instance.expects(:diff).with({}, 'master^', 'master', '--', 'foo/bar')
165
+ @r.diff('master^', 'master', 'foo/bar')
166
+
167
+ Git.any_instance.expects(:diff).with({}, 'master^', 'master', '--', 'foo/bar', 'foo/baz')
168
+ @r.diff('master^', 'master', 'foo/bar', 'foo/baz')
169
+ end
170
+
171
+ # commit_diff
172
+
173
+ def test_diff
174
+ Git.any_instance.expects(:diff).returns(fixture('diff_p'))
175
+ diffs = @r.commit_diff('master')
176
+
177
+ assert_equal 15, diffs.size
178
+ end
179
+
180
+ # init bare
181
+
182
+ # archive
183
+
184
+ def test_archive_tar
185
+ @r.archive_tar
186
+ end
187
+
188
+ # archive_tar_gz
189
+
190
+ def test_archive_tar_gz
191
+ @r.archive_tar_gz
192
+ end
193
+
194
+ # enable_daemon_serve
195
+
196
+ def test_enable_daemon_serve
197
+ FileUtils.expects(:touch).with(File.join(@r.path, 'git-daemon-export-ok'))
198
+ @r.enable_daemon_serve
199
+ end
200
+
201
+ # disable_daemon_serve
202
+
203
+ def test_disable_daemon_serve
204
+ FileUtils.expects(:rm_f).with(File.join(@r.path, 'git-daemon-export-ok'))
205
+ @r.disable_daemon_serve
206
+ end
207
+
208
+ # alternates
209
+
210
+ def test_alternates_with_two_alternates
211
+ File.expects(:exist?).with("#{absolute_project_path}/.git/objects/info/alternates").returns(true)
212
+ File.expects(:read).returns("/path/to/repo1/.git/objects\n/path/to/repo2.git/objects\n")
213
+
214
+ assert_equal ["/path/to/repo1/.git/objects", "/path/to/repo2.git/objects"], @r.alternates
215
+ end
216
+
217
+ def test_alternates_no_file
218
+ File.expects(:exist?).returns(false)
219
+
220
+ assert_equal [], @r.alternates
221
+ end
222
+
223
+ # alternates=
224
+
225
+ def test_alternates_setter_ok
226
+ alts = %w{/path/to/repo.git/objects /path/to/repo2.git/objects}
227
+
228
+ alts.each do |alt|
229
+ File.expects(:exist?).with(alt).returns(true)
230
+ end
231
+
232
+ File.any_instance.expects(:write).with(alts.join("\n"))
233
+
234
+ assert_nothing_raised do
235
+ @r.alternates = alts
236
+ end
237
+ end
238
+
239
+ def test_alternates_setter_bad
240
+ alts = %w{/path/to/repo.git/objects}
241
+
242
+ alts.each do |alt|
243
+ File.expects(:exist?).with(alt).returns(false)
244
+ end
245
+
246
+ File.any_instance.expects(:write).never
247
+
248
+ assert_raise RuntimeError do
249
+ @r.alternates = alts
250
+ end
251
+ end
252
+
253
+ def test_alternates_setter_empty
254
+ File.expects(:delete)
255
+
256
+ @r.alternates = []
257
+ end
258
+
259
+ # inspect
260
+
261
+ def test_inspect
262
+ assert_equal %Q{#<Grit::Repo "#{File.expand_path(GRIT_REPO)}/.git">}, @r.inspect
263
+ end
264
+
265
+ # log
266
+
267
+ def test_log
268
+ Git.any_instance.expects(:log).times(2).with({:pretty => 'raw'}, 'master').returns(fixture('rev_list'))
269
+
270
+ assert_equal '4c8124ffcf4039d292442eeccabdeca5af5c5017', @r.log.first.id
271
+ assert_equal 'ab25fd8483882c3bda8a458ad2965d2248654335', @r.log.last.id
272
+ end
273
+
274
+ def test_log_with_path_and_options
275
+ Git.any_instance.expects(:log).with({:pretty => 'raw', :max_count => 1}, 'master', '--', 'file.rb').returns(fixture('rev_list'))
276
+ @r.log('master', 'file.rb', :max_count => 1)
277
+ end
278
+ end
@@ -0,0 +1,29 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class TestTag < 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
11
+ Git.any_instance.expects(:for_each_ref).returns(fixture('for_each_ref_tags'))
12
+
13
+ tags = @r.tags
14
+
15
+ assert_equal 1, tags.size
16
+ assert_equal 'v0.7.1', tags.first.name
17
+ assert_equal '634396b2f541a9f2d58b00be1a07f0c358b999b3', tags.first.commit.id
18
+ end
19
+
20
+ # inspect
21
+
22
+ def test_inspect
23
+ Git.any_instance.expects(:for_each_ref).returns(fixture('for_each_ref'))
24
+
25
+ tag = @r.tags.first
26
+
27
+ assert_equal %Q{#<Grit::Tag "#{tag.name}">}, tag.inspect
28
+ end
29
+ end
@@ -0,0 +1,91 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class TestTree < Test::Unit::TestCase
4
+ def setup
5
+ @r = Repo.new(GRIT_REPO)
6
+ @t = Tree.allocate
7
+ end
8
+
9
+ # contents
10
+
11
+ def test_contents_should_cache
12
+ Git.any_instance.expects(:ls_tree).returns(
13
+ fixture('ls_tree_a'),
14
+ fixture('ls_tree_b')
15
+ ).times(2)
16
+ tree = @r.tree('master')
17
+
18
+ child = tree.contents.last
19
+
20
+ child.contents
21
+ child.contents
22
+ end
23
+
24
+ # content_from_string
25
+
26
+ def test_content_from_string_tree_should_return_tree
27
+ text = fixture('ls_tree_a').split("\n").last
28
+
29
+ tree = @t.content_from_string(nil, text)
30
+
31
+ assert_equal Tree, tree.class
32
+ assert_equal "650fa3f0c17f1edb4ae53d8dcca4ac59d86e6c44", tree.id
33
+ assert_equal "040000", tree.mode
34
+ assert_equal "test", tree.name
35
+ end
36
+
37
+ def test_content_from_string_tree_should_return_blob
38
+ text = fixture('ls_tree_b').split("\n").first
39
+
40
+ tree = @t.content_from_string(nil, text)
41
+
42
+ assert_equal Blob, tree.class
43
+ assert_equal "aa94e396335d2957ca92606f909e53e7beaf3fbb", tree.id
44
+ assert_equal "100644", tree.mode
45
+ assert_equal "grit.rb", tree.name
46
+ end
47
+
48
+ def test_content_from_string_tree_should_return_commit
49
+ text = fixture('ls_tree_commit').split("\n")[1]
50
+
51
+ tree = @t.content_from_string(nil, text)
52
+
53
+ assert_nil tree
54
+ end
55
+
56
+ def test_content_from_string_invalid_type_should_raise
57
+ assert_raise(RuntimeError) do
58
+ @t.content_from_string(nil, "040000 bogus 650fa3f0c17f1edb4ae53d8dcca4ac59d86e6c44 test")
59
+ end
60
+ end
61
+
62
+ # /
63
+
64
+ def test_slash
65
+ Git.any_instance.expects(:ls_tree).returns(
66
+ fixture('ls_tree_a')
67
+ )
68
+ tree = @r.tree('master')
69
+
70
+ assert_equal 'aa06ba24b4e3f463b3c4a85469d0fb9e5b421cf8', (tree/'lib').id
71
+ assert_equal '8b1e02c0fb554eed2ce2ef737a68bb369d7527df', (tree/'README.txt').id
72
+ end
73
+
74
+ def test_slash_with_commits
75
+ Git.any_instance.expects(:ls_tree).returns(
76
+ fixture('ls_tree_commit')
77
+ )
78
+ tree = @r.tree('master')
79
+
80
+ assert_nil tree/'bar'
81
+ assert_equal '2afb47bcedf21663580d5e6d2f406f08f3f65f19', (tree/'foo').id
82
+ assert_equal 'f623ee576a09ca491c4a27e48c0dfe04be5f4a2e', (tree/'baz').id
83
+ end
84
+
85
+ # inspect
86
+
87
+ def test_inspect
88
+ @t = Tree.create(@r, :id => 'abc')
89
+ assert_equal %Q{#<Grit::Tree "abc">}, @t.inspect
90
+ end
91
+ end