1
# Copyright (C) 2009 Jelmer Vernooij <jelmer@samba.org>
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.
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.
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
17
"""Tests for GitShaMap."""
19
from dulwich.objects import (
28
from bzrlib.inventory import (
34
from bzrlib.revision import (
38
from bzrlib.tests import (
43
from bzrlib.transport import (
47
from bzrlib.plugins.git.cache import (
56
def _get_test_commit(self):
58
c.committer = "Jelmer <jelmer@samba.org>"
61
c.author = "Jelmer <jelmer@samba.org>"
64
c.message = "Teh foo bar"
65
c.tree = "cc9462f7f8263ef5adfbeff2fb936bb36b504cba"
68
def test_commit(self):
69
self.map.start_write_group()
70
updater = self.cache.get_updater(Revision("myrevid"))
71
c = self._get_test_commit()
72
updater.add_object(c, None)
74
self.map.commit_write_group()
76
("commit", ("myrevid", "cc9462f7f8263ef5adfbeff2fb936bb36b504cba")),
77
self.map.lookup_git_sha(c.id))
78
self.assertEquals(c.id, self.map.lookup_commit("myrevid"))
80
def test_lookup_notfound(self):
81
self.assertRaises(KeyError,
82
self.map.lookup_git_sha, "5686645d49063c73d35436192dfc9a160c672301")
85
self.map.start_write_group()
86
updater = self.cache.get_updater(Revision("myrevid"))
87
updater.add_object(self._get_test_commit(), None)
90
ie = InventoryFile("myfileid", "somename", ROOT_ID)
91
ie.revision = "myrevid"
92
updater.add_object(b, ie)
94
self.map.commit_write_group()
96
("blob", ("myfileid", "myrevid")),
97
self.map.lookup_git_sha(b.id))
98
self.assertEquals(b.id,
99
self.map.lookup_blob_id("myfileid", "myrevid"))
102
self.map.start_write_group()
103
updater = self.cache.get_updater(Revision("myrevid"))
104
updater.add_object(self._get_test_commit(), None)
106
t.add(stat.S_IFREG, "somename", Blob().id)
107
ie = InventoryDirectory("fileid", "myname", ROOT_ID)
108
ie.revision = "irrelevant"
109
updater.add_object(t, ie)
111
self.map.commit_write_group()
112
self.assertEquals(("tree", ("fileid", "myrevid")),
113
self.map.lookup_git_sha(t.id))
114
# It's possible for a backend to not implement lookup_tree
116
self.assertEquals(t.id,
117
self.map.lookup_tree_id("fileid", "myrevid"))
118
except NotImplementedError:
121
def test_revids(self):
122
self.map.start_write_group()
123
updater = self.cache.get_updater(Revision("myrevid"))
124
c = self._get_test_commit()
125
updater.add_object(c, None)
127
self.map.commit_write_group()
128
self.assertEquals(["myrevid"], list(self.map.revids()))
130
def test_missing_revisions(self):
131
self.map.start_write_group()
132
updater = self.cache.get_updater(Revision("myrevid"))
133
c = self._get_test_commit()
134
updater.add_object(c, None)
136
self.map.commit_write_group()
137
self.assertEquals(set(["lala", "bla"]),
138
set(self.map.missing_revisions(["myrevid", "lala", "bla"])))
141
class DictGitShaMapTests(TestCase,TestGitShaMap):
145
self.cache = DictBzrGitCache()
146
self.map = self.cache.idmap
149
class SqliteGitShaMapTests(TestCaseInTempDir,TestGitShaMap):
152
TestCaseInTempDir.setUp(self)
153
self.cache = SqliteBzrGitCache(os.path.join(self.test_dir, 'foo.db'))
154
self.map = self.cache.idmap
157
class TdbGitShaMapTests(TestCaseInTempDir,TestGitShaMap):
160
TestCaseInTempDir.setUp(self)
162
self.cache = TdbBzrGitCache(os.path.join(self.test_dir, 'foo.tdb'))
164
raise UnavailableFeature("Missing tdb")
165
self.map = self.cache.idmap
168
class IndexGitShaMapTests(TestCaseInTempDir,TestGitShaMap):
171
TestCaseInTempDir.setUp(self)
172
transport = get_transport(self.test_dir)
173
transport.mkdir("index")
174
self.cache = IndexBzrGitCache(transport)
175
self.map = self.cache.idmap