grit 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grit might be problematic. Click here for more details.
- data/History.txt +21 -0
- data/PURE_TODO +35 -0
- data/Rakefile +149 -0
- data/{test/bench/benchmarks.rb → benchmarks.rb} +6 -3
- data/benchmarks.txt +21 -0
- data/examples/ex_index.rb +7 -0
- data/grit.gemspec +76 -0
- data/lib/grit.rb +7 -5
- data/lib/grit/commit.rb +26 -12
- data/lib/grit/diff.rb +22 -13
- data/lib/grit/errors.rb +4 -1
- data/lib/grit/git-ruby.rb +12 -7
- data/lib/grit/git-ruby/git_object.rb +2 -2
- data/lib/grit/git-ruby/internal/loose.rb +1 -1
- data/lib/grit/git-ruby/internal/pack.rb +2 -0
- data/lib/grit/git-ruby/repository.rb +33 -6
- data/lib/grit/git.rb +9 -4
- data/lib/grit/index.rb +1 -1
- data/lib/{open3_detach.rb → grit/open3_detach.rb} +0 -0
- data/lib/grit/ref.rb +3 -1
- data/lib/grit/repo.rb +81 -1
- data/lib/grit/tag.rb +57 -4
- data/lib/grit/tree.rb +1 -1
- metadata +30 -46
- data/VERSION.yml +0 -4
- data/test/helper.rb +0 -18
- data/test/profile.rb +0 -21
- data/test/suite.rb +0 -6
- data/test/test_actor.rb +0 -35
- data/test/test_blame.rb +0 -32
- data/test/test_blame_tree.rb +0 -33
- data/test/test_blob.rb +0 -83
- data/test/test_commit.rb +0 -207
- data/test/test_commit_stats.rb +0 -33
- data/test/test_commit_write.rb +0 -20
- data/test/test_config.rb +0 -58
- data/test/test_diff.rb +0 -18
- data/test/test_file_index.rb +0 -56
- data/test/test_git.rb +0 -105
- data/test/test_grit.rb +0 -32
- data/test/test_head.rb +0 -47
- data/test/test_index_status.rb +0 -40
- data/test/test_merge.rb +0 -17
- data/test/test_raw.rb +0 -16
- data/test/test_real.rb +0 -19
- data/test/test_reality.rb +0 -17
- data/test/test_remote.rb +0 -14
- data/test/test_repo.rb +0 -349
- data/test/test_rubygit.rb +0 -192
- data/test/test_rubygit_alt.rb +0 -40
- data/test/test_rubygit_index.rb +0 -76
- data/test/test_rubygit_iv2.rb +0 -28
- data/test/test_submodule.rb +0 -69
- data/test/test_tag.rb +0 -67
- data/test/test_tree.rb +0 -101
data/test/test_commit_stats.rb
DELETED
@@ -1,33 +0,0 @@
|
|
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
|
data/test/test_commit_write.rb
DELETED
@@ -1,20 +0,0 @@
|
|
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
|
-
Git.any_instance.expects(:commit).returns(fixture('commit'))
|
10
|
-
results = @r.commit_index('my message')
|
11
|
-
assert_match /Created commit/, results
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_commit_all
|
15
|
-
Git.any_instance.expects(:commit).returns(fixture('commit'))
|
16
|
-
results = @r.commit_all('my message')
|
17
|
-
assert_match /Created commit/, results
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
data/test/test_config.rb
DELETED
@@ -1,58 +0,0 @@
|
|
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
DELETED
@@ -1,18 +0,0 @@
|
|
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
|
data/test/test_file_index.rb
DELETED
@@ -1,56 +0,0 @@
|
|
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
DELETED
@@ -1,105 +0,0 @@
|
|
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 [], @git.transform_options({:s => false})
|
33
|
-
assert_equal ["-s '5'"], @git.transform_options({:s => 5})
|
34
|
-
|
35
|
-
assert_equal ["--max-count"], @git.transform_options({:max_count => true})
|
36
|
-
assert_equal ["--max-count='5'"], @git.transform_options({:max_count => 5})
|
37
|
-
|
38
|
-
assert_equal ["-s", "-t"], @git.transform_options({:s => true, :t => true}).sort
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_uses_custom_sh_method
|
42
|
-
@git.expects(:sh)
|
43
|
-
@git.something
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_can_skip_timeout
|
47
|
-
@git.expects(:wild_sh)
|
48
|
-
@git.something(:timeout => false)
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_raises_if_too_many_bytes
|
52
|
-
@git.instance_variable_set(:@bytes_read, 6000000)
|
53
|
-
assert_raises Grit::Git::GitTimeout do
|
54
|
-
@git.version
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_raises_on_slow_shell
|
59
|
-
Grit::Git.git_timeout = 0.0000001
|
60
|
-
assert_raises Grit::Git::GitTimeout do
|
61
|
-
@git.version
|
62
|
-
end
|
63
|
-
Grit::Git.git_timeout = 5.0
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_it_really_shell_escapes_arguments_to_the_git_shell
|
67
|
-
@git.expects(:sh).with("#{Git.git_binary} --git-dir='#{@git.git_dir}' foo --bar='bazz\\'er'")
|
68
|
-
@git.foo(:bar => "bazz'er")
|
69
|
-
@git.expects(:sh).with("#{Git.git_binary} --git-dir='#{@git.git_dir}' bar -x 'quu\\'x'")
|
70
|
-
@git.bar(:x => "quu'x")
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_it_shell_escapes_the_standalone_argument
|
74
|
-
@git.expects(:sh).with("#{Git.git_binary} --git-dir='#{@git.git_dir}' foo 'bar\\'s'")
|
75
|
-
@git.foo({}, "bar's")
|
76
|
-
|
77
|
-
@git.expects(:sh).with("#{Git.git_binary} --git-dir='#{@git.git_dir}' foo 'bar' '\\; echo \\'noooo\\''")
|
78
|
-
@git.foo({}, "bar", "; echo 'noooo'")
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_piping_should_work_on_1_9
|
82
|
-
@git.expects(:sh).with("#{Git.git_binary} --git-dir='#{@git.git_dir}' archive 'master' | gzip")
|
83
|
-
@git.archive({}, "master", "| gzip")
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_fs_read
|
87
|
-
f = stub
|
88
|
-
f.expects(:read).returns('bar')
|
89
|
-
File.expects(:open).with(File.join(@git.git_dir, 'foo')).returns(f)
|
90
|
-
assert_equal 'bar', @git.fs_read('foo')
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_fs_write
|
94
|
-
f = stub
|
95
|
-
f.expects(:write).with('baz')
|
96
|
-
FileUtils.expects(:mkdir_p).with(File.join(@git.git_dir, 'foo'))
|
97
|
-
File.expects(:open).with(File.join(@git.git_dir, 'foo/bar'), 'w').yields(f)
|
98
|
-
@git.fs_write('foo/bar', 'baz')
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_fs_delete
|
102
|
-
FileUtils.expects(:rm_rf).with(File.join(@git.git_dir, 'foo'))
|
103
|
-
@git.fs_delete('foo')
|
104
|
-
end
|
105
|
-
end
|
data/test/test_grit.rb
DELETED
@@ -1,32 +0,0 @@
|
|
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
DELETED
@@ -1,47 +0,0 @@
|
|
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
|
data/test/test_index_status.rb
DELETED
@@ -1,40 +0,0 @@
|
|
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
DELETED
@@ -1,17 +0,0 @@
|
|
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
DELETED
@@ -1,16 +0,0 @@
|
|
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
|