/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
1
# Copyright (C) 2007 Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
"""Test the model for interacting with the git process, etc."""
18
19
from bzrlib.plugins.git import tests
0.200.27 by David Allouche
Flat is better than nested, remove the gitlib hierarchy.
20
from bzrlib.plugins.git import (
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
21
    errors,
22
    model,
23
    )
24
25
26
class TestModel(tests.TestCaseInTempDir):
27
28
    def test_no_head(self):
29
        tests.run_git('init')
30
        themodel = model.GitModel('.git')
31
        self.assertIs(None, themodel.get_head())
32
33
    def test_no_repository(self):
34
        themodel = model.GitModel('.git')
35
        self.assertRaises(errors.GitCommandError, themodel.get_head)
36
0.200.42 by David Allouche
Rename GitModel.ancestry to .get_revision_graph.
37
    def test_get_revision_graph(self):
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
38
        tests.run_git('init')
0.200.24 by John Arbash Meinel
Use the builder in test_model as well to shave off a few more seconds.
39
        builder = tests.GitBranchBuilder()
40
        file_handle = builder.set_file('a', 'text for a\n', False)
41
        commit1_handle = builder.commit('Joe Foo <joe@foo.com>', u'message')
42
        file2_handle = builder.set_file('a', 'new a\n', False)
43
        commit2_handle = builder.commit('Joe Foo <joe@foo.com>', u'new a')
44
        file3_handle = builder.set_file('b', 'text for b\n', False)
45
        commit3_handle = builder.commit('Jerry Bar <jerry@foo.com>', u'b',
46
                                        base=commit1_handle)
47
        commit4_handle = builder.commit('Jerry Bar <jerry@foo.com>', u'merge',
48
                                        base=commit3_handle,
49
                                        merge=[commit2_handle],)
50
51
        mapping = builder.finish()
52
        commit1_id = mapping[commit1_handle]
53
        commit2_id = mapping[commit2_handle]
54
        commit3_id = mapping[commit3_handle]
55
        commit4_id = mapping[commit4_handle]
56
57
        revisions = tests.run_git('rev-list', '--topo-order',
58
                                  commit4_id)
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
59
        revisions = revisions.splitlines()
0.200.24 by John Arbash Meinel
Use the builder in test_model as well to shave off a few more seconds.
60
        self.assertEqual([commit4_id, commit2_id, commit3_id, commit1_id],
61
                         revisions)
62
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
63
        graph = {revisions[0]:[revisions[2], revisions[1]],
64
                 revisions[1]:[revisions[3]],
65
                 revisions[2]:[revisions[3]],
66
                 revisions[3]:[],
67
                }
68
69
        themodel = model.GitModel('.git')
0.200.20 by John Arbash Meinel
All tests are passing again
70
        self.assertEqual(revisions[0], themodel.get_head())
0.200.42 by David Allouche
Rename GitModel.ancestry to .get_revision_graph.
71
        self.assertEqual(graph, themodel.get_revision_graph([revisions[0]]))
0.200.37 by David Allouche
Reimplement GitModel.get_inventory to retrieve the full inventory in a single git run.
72
73
    def test_get_inventory(self):
74
        # Create a git repository with some interesting files in a revision.
75
        tests.run_git('init')
76
        builder = tests.GitBranchBuilder()
77
        builder.set_file('data', 'text\n', False)
78
        builder.set_file('data-multi\nline', 'text\n', False)
79
        builder.set_file(u'data-unic\xb5de', 'text\n', False)
80
        builder.set_file('executable', 'content', True)
81
        builder.set_link('link', 'broken')
82
        builder.set_file('subdir/subfile', 'subdir text\n', False)
83
        commit_handle = builder.commit('Joe Foo <joe@foo.com>', u'message')
84
        mapping = builder.finish()
85
        commit_id = mapping[commit_handle]
86
87
        # Get the corresponding git inventory.
88
        themodel = model.GitModel('.git')
89
        git_inventory = list(themodel.get_inventory(commit_id))
90
        self.assertEqual(git_inventory,
91
            [('100644', 'blob', '8e27be7d6154a1f68ea9160ef0e18691d20560dc',
92
              u'data'),
93
             ('100644', 'blob', '8e27be7d6154a1f68ea9160ef0e18691d20560dc',
94
              u'data-multi\nline'),
95
             ('100644', 'blob', '8e27be7d6154a1f68ea9160ef0e18691d20560dc',
96
              u'data-unic\xb5de'),
97
             ('100755', 'blob', '6b584e8ece562ebffc15d38808cd6b98fc3d97ea',
98
              u'executable'),
99
             ('120000', 'blob', '86a410dd1d337c4f9f59e2aa35bc188f18ad08e4',
100
              u'link'),
101
             ('040000', 'tree', 'ccf7f8fa4e6eee68d761f36556d9896938b32e7f',
102
              u'subdir'),
103
             ('100644', 'blob', '0ddb53cbe2dd209f550dd8d7f1287a5ed9b1ee8b',
104
              u'subdir/subfile')])