/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.200.51 by Jelmer Vernooij
Fix copyright.
1
# Copyright (C) 2007 Jelmer Vernooij <jelmer@samba.org>
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
2
#
0.201.1 by Jelmer Vernooij
Add very small initial testsuite.
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.
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
7
#
0.201.1 by Jelmer Vernooij
Add very small initial testsuite.
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.
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
12
#
0.201.1 by Jelmer Vernooij
Add very small initial testsuite.
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
0.200.588 by Jelmer Vernooij
Cope with empty directories that are not allowed in git.
17
from bzrlib.inventory import (
18
    InventoryDirectory,
19
    InventoryFile,
20
    )
21
0.200.264 by Jelmer Vernooij
Add more tests.
22
from dulwich.objects import (
0.200.588 by Jelmer Vernooij
Cope with empty directories that are not allowed in git.
23
    Blob,
0.200.264 by Jelmer Vernooij
Add more tests.
24
    Commit,
0.200.588 by Jelmer Vernooij
Cope with empty directories that are not allowed in git.
25
    Tree,
0.200.264 by Jelmer Vernooij
Add more tests.
26
    )
27
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
28
from bzrlib.plugins.git import tests
0.200.258 by Jelmer Vernooij
add tests for file id escape/unescape.
29
from bzrlib.plugins.git.mapping import (
30
    BzrGitMappingv1,
0.200.588 by Jelmer Vernooij
Cope with empty directories that are not allowed in git.
31
    directory_to_tree,
0.200.258 by Jelmer Vernooij
add tests for file id escape/unescape.
32
    escape_file_id,
0.200.351 by Jelmer Vernooij
Add roundtrip tests.
33
    revision_to_commit,
0.200.258 by Jelmer Vernooij
add tests for file id escape/unescape.
34
    unescape_file_id,
35
    )
0.200.190 by Jelmer Vernooij
Bless current mapping as v1.
36
37
38
class TestRevidConversionV1(tests.TestCase):
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
39
40
    def test_simple_git_to_bzr_revision_id(self):
0.200.190 by Jelmer Vernooij
Bless current mapping as v1.
41
        self.assertEqual("git-v1:"
0.204.1 by James Westby
Fix id tests to match new revid prefix.
42
                         "c6a4d8f1fa4ac650748e647c4b1b368f589a7356",
0.200.190 by Jelmer Vernooij
Bless current mapping as v1.
43
                         BzrGitMappingv1().revision_id_foreign_to_bzr(
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
44
                            "c6a4d8f1fa4ac650748e647c4b1b368f589a7356"))
45
46
    def test_simple_bzr_to_git_revision_id(self):
0.200.195 by Jelmer Vernooij
Return mapping in revision_id_bzr_to_foreign() as required by the interface.
47
        self.assertEqual(("c6a4d8f1fa4ac650748e647c4b1b368f589a7356", 
48
                         BzrGitMappingv1()),
0.200.190 by Jelmer Vernooij
Bless current mapping as v1.
49
                         BzrGitMappingv1().revision_id_bzr_to_foreign(
50
                            "git-v1:"
0.204.1 by James Westby
Fix id tests to match new revid prefix.
51
                            "c6a4d8f1fa4ac650748e647c4b1b368f589a7356"))
0.200.258 by Jelmer Vernooij
add tests for file id escape/unescape.
52
53
54
class FileidTests(tests.TestCase):
55
56
    def test_escape_space(self):
57
        self.assertEquals("bla_s", escape_file_id("bla "))
58
59
    def test_escape_underscore(self):
60
        self.assertEquals("bla__", escape_file_id("bla_"))
61
62
    def test_escape_underscore_space(self):
63
        self.assertEquals("bla___s", escape_file_id("bla_ "))
64
65
    def test_unescape_underscore(self):
66
        self.assertEquals("bla ", unescape_file_id("bla_s"))
67
68
    def test_unescape_underscore_space(self):
69
        self.assertEquals("bla _", unescape_file_id("bla_s__"))
0.200.264 by Jelmer Vernooij
Add more tests.
70
71
72
class TestImportCommit(tests.TestCase):
73
74
    def test_commit(self):
75
        c = Commit()
0.200.416 by Jelmer Vernooij
Use public properties to set git objects values.
76
        c.tree = "cc9462f7f8263ef5adfbeff2fb936bb36b504cba"
77
        c.message = "Some message"
78
        c.committer = "Committer"
79
        c.commit_time = 4
80
        c.author_time = 5
0.200.440 by Jelmer Vernooij
Remove silly mapping of timezones; dulwich uses offsets now as well.
81
        c.commit_timezone = 60 * 5
82
        c.author_timezone = 60 * 3
0.200.416 by Jelmer Vernooij
Use public properties to set git objects values.
83
        c.author = "Author"
0.200.264 by Jelmer Vernooij
Add more tests.
84
        c.serialize()
85
        rev = BzrGitMappingv1().import_commit(c)
86
        self.assertEquals("Some message", rev.message)
87
        self.assertEquals("Committer", rev.committer)
88
        self.assertEquals("Author", rev.properties['author'])
0.200.368 by Jelmer Vernooij
Cope with more granular timezones.
89
        self.assertEquals(300, rev.timezone)
0.200.264 by Jelmer Vernooij
Add more tests.
90
        self.assertEquals((), rev.parent_ids)
0.200.351 by Jelmer Vernooij
Add roundtrip tests.
91
        self.assertEquals("5", rev.properties['author-timestamp'])
0.200.440 by Jelmer Vernooij
Remove silly mapping of timezones; dulwich uses offsets now as well.
92
        self.assertEquals("180", rev.properties['author-timezone'])
0.200.264 by Jelmer Vernooij
Add more tests.
93
        self.assertEquals("git-v1:" + c.id, rev.revision_id)
0.200.351 by Jelmer Vernooij
Add roundtrip tests.
94
95
96
97
class RoundtripRevisionsFromGit(tests.TestCase):
98
99
    def setUp(self):
100
        super(RoundtripRevisionsFromGit, self).setUp()
101
        self.mapping = BzrGitMappingv1()
102
103
    def assertRoundtripTree(self, tree):
104
        raise NotImplementedError(self.assertRoundtripTree)
105
106
    def assertRoundtripBlob(self, blob):
107
        raise NotImplementedError(self.assertRoundtripBlob)
108
109
    def assertRoundtripCommit(self, commit1):
110
        commit1.serialize()
111
        rev = self.mapping.import_commit(commit1)
112
        commit2 = revision_to_commit(rev, "12341212121212", None)
113
        self.assertEquals(commit1.committer, commit2.committer)
114
        self.assertEquals(commit1.commit_time, commit2.commit_time)
0.200.362 by Jelmer Vernooij
Fix tests.
115
        self.assertEquals(commit1.commit_timezone, commit2.commit_timezone)
0.200.351 by Jelmer Vernooij
Add roundtrip tests.
116
        self.assertEquals(commit1.author, commit2.author)
117
        self.assertEquals(commit1.author_time, commit2.author_time)
0.200.362 by Jelmer Vernooij
Fix tests.
118
        self.assertEquals(commit1.author_timezone, commit2.author_timezone)
0.200.351 by Jelmer Vernooij
Add roundtrip tests.
119
        self.assertEquals(commit1.message, commit2.message)
120
121
    def test_commit(self):
122
        c = Commit()
0.200.416 by Jelmer Vernooij
Use public properties to set git objects values.
123
        c.tree = "cc9462f7f8263ef5adfbeff2fb936bb36b504cba"
124
        c.message = "Some message"
125
        c.committer = "Committer <Committer>"
126
        c.commit_time = 4
0.200.440 by Jelmer Vernooij
Remove silly mapping of timezones; dulwich uses offsets now as well.
127
        c.commit_timezone = -60 * 3
0.200.416 by Jelmer Vernooij
Use public properties to set git objects values.
128
        c.author_time = 5
0.200.440 by Jelmer Vernooij
Remove silly mapping of timezones; dulwich uses offsets now as well.
129
        c.author_timezone = 60 * 2
0.200.416 by Jelmer Vernooij
Use public properties to set git objects values.
130
        c.author = "Author <author>"
0.200.351 by Jelmer Vernooij
Add roundtrip tests.
131
        self.assertRoundtripCommit(c)
132
0.200.588 by Jelmer Vernooij
Cope with empty directories that are not allowed in git.
133
134
class DirectoryToTreeTests(tests.TestCase):
135
136
    def test_empty(self):
137
        ie = InventoryDirectory('foo', 'foo', 'foo')
138
        t = directory_to_tree(ie, None, {})
0.200.589 by Jelmer Vernooij
Fix handling of empty trees.
139
        self.assertEquals(None, t)
0.200.588 by Jelmer Vernooij
Cope with empty directories that are not allowed in git.
140
141
    def test_empty_dir(self):
142
        ie = InventoryDirectory('foo', 'foo', 'foo')
143
        child_ie = InventoryDirectory('bar', 'bar', 'bar')
144
        ie.children['bar'] = child_ie
0.200.589 by Jelmer Vernooij
Fix handling of empty trees.
145
        t = directory_to_tree(ie, lambda x: None, {})
146
        self.assertEquals(None, t)
147
148
    def test_empty_root(self):
149
        ie = InventoryDirectory('foo', 'foo', None)
150
        child_ie = InventoryDirectory('bar', 'bar', 'bar')
151
        ie.children['bar'] = child_ie
152
        t = directory_to_tree(ie, lambda x: None, {})
0.200.588 by Jelmer Vernooij
Cope with empty directories that are not allowed in git.
153
        self.assertEquals(Tree(), t)
154
155
    def test_with_file(self):
156
        ie = InventoryDirectory('foo', 'foo', 'foo')
157
        child_ie = InventoryFile('bar', 'bar', 'bar')
158
        ie.children['bar'] = child_ie
159
        b = Blob.from_string("bla")
160
        t1 = directory_to_tree(ie, lambda x: b.id, {})
161
        t2 = Tree()
162
        t2.add(0100644, "bar", b.id)
163
        self.assertEquals(t1, t2)