added some low level tree operations and tests
[rubygit.git] / tests / units / test_tree_ops.rb
blob7dba642068cafb18888bf3d88b0aedd28a2f92b4
1 #!/usr/bin/env ruby
3 require File.dirname(__FILE__) + '/../test_helper'
5 class TestTreeOps < Test::Unit::TestCase
7   def setup
8     set_file_paths
9     @git = Git.open(@wdir)
10   end
11   
12   def test_read_tree
13     
14     in_temp_dir do
15       g = Git.clone(@wbare, 'test')
17       g.chdir do
18         g.branch('testbranch1').in_branch('tb commit 1') do
19           new_file('test-file1', 'blahblahblah2')
20           g.add
21           true          
22         end
24         g.branch('testbranch2').in_branch('tb commit 2') do
25           new_file('test-file2', 'blahblahblah3')
26           g.add
27           true          
28         end
30         g.branch('testbranch3').in_branch('tb commit 3') do
31           new_file('test-file3', 'blahblahblah4')
32           g.add
33           true          
34         end
35     
36         # test some read-trees
37         tr = g.with_temp_index do
38           g.read_tree('testbranch1')
39           g.read_tree('testbranch2', :prefix => 'b2/')
40           g.read_tree('testbranch3', :prefix => 'b2/b3/')
41           index = g.ls_files
42           assert(index['b2/test-file2'])
43           assert(index['b2/b3/test-file3'])
44           g.write_tree
45         end
47         assert_equal('2423ef1b38b3a140bbebf625ba024189c872e08b', tr)
48               
49         # only prefixed read-trees
50         tr = g.with_temp_index do
51           g.add  # add whats in our working tree
52           g.read_tree('testbranch1', :prefix => 'b1/')
53           g.read_tree('testbranch3', :prefix => 'b2/b3/')
54           index = g.ls_files
55           assert(index['example.txt'])
56           assert(index['b1/test-file1'])
57           assert(!index['b2/test-file2'])
58           assert(index['b2/b3/test-file3'])
59           g.write_tree
60         end
62         assert_equal('aa7349e1cdaf4b85cc6a6a0cf4f9b3f24879fa42', tr)
63         
64         # new working directory too
65         tr = nil
66         g.with_temp_working do
67           tr = g.with_temp_index do
68             assert_raises Git::GitExecuteError do
69               g.add  # add whats in our working tree - should be nothing
70             end
71             g.read_tree('testbranch1', :prefix => 'b1/')
72             g.read_tree('testbranch3', :prefix => 'b1/b3/')
73             index = g.ls_files
74             assert(!index['example.txt'])
75             assert(index['b1/test-file1'])
76             assert(!index['b2/test-file2'])
77             assert(index['b1/b3/test-file3'])
78             g.write_tree
79           end
80           assert_equal('b40f7a9072cdec637725700668f8fdebe39e6d38', tr)
81         end
82         
83         c = g.commit_tree(tr, :parents => 'HEAD')
84         assert(c.commit?)
85         assert_equal('b40f7a9072cdec637725700668f8fdebe39e6d38', c.gtree.sha)
86         
87         tmp = Tempfile.new('tesxt')
88         tmppath = tmp.path
89         tmp.unlink
90         tr2 = g.with_index(tmppath) do
91           g.read_tree('testbranch1', :prefix => 'b1/')
92           g.read_tree('testbranch3', :prefix => 'b3/')
93           index = g.ls_files
94           assert(!index['b2/test-file2'])
95           assert(index['b3/test-file3'])
96           g.commit('hi')
97         end
98         
99         assert(c.commit?)
100         assert_equal('b40f7a9072cdec637725700668f8fdebe39e6d38', c.gtree.sha)
101         
102       end
103     end
104   end