1
# Copyright (C) 2009-2018 Jelmer Vernooij <jelmer@jelmer.uk>
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
"""Tests for GitShaMap."""
19
from __future__ import absolute_import
21
from dulwich.objects import (
30
from ...revision import (
34
from ...tests import (
39
from ...transport import (
54
def _get_test_commit(self):
56
c.committer = b"Jelmer <jelmer@samba.org>"
59
c.author = b"Jelmer <jelmer@samba.org>"
62
c.message = b"Teh foo bar"
63
c.tree = b"cc9462f7f8263ef5adfbeff2fb936bb36b504cba"
66
def test_commit(self):
67
self.map.start_write_group()
68
updater = self.cache.get_updater(Revision(b"myrevid"))
69
c = self._get_test_commit()
70
updater.add_object(c, {
71
"testament3-sha1": b"cc9462f7f8263ef5adf8eff2fb936bb36b504cba"},
74
self.map.commit_write_group()
76
[("commit", (b"myrevid",
77
b"cc9462f7f8263ef5adfbeff2fb936bb36b504cba",
78
{"testament3-sha1": b"cc9462f7f8263ef5adf8eff2fb936bb36b504cba"},
80
list(self.map.lookup_git_sha(c.id)))
81
self.assertEqual(c.id, self.map.lookup_commit(b"myrevid"))
83
def test_lookup_notfound(self):
84
self.assertRaises(KeyError, list,
85
self.map.lookup_git_sha(b"5686645d49063c73d35436192dfc9a160c672301"))
88
self.map.start_write_group()
89
updater = self.cache.get_updater(Revision(b"myrevid"))
90
updater.add_object(self._get_test_commit(), {
91
"testament3-sha1": b"Test"}, None)
94
updater.add_object(b, (b"myfileid", b"myrevid"), None)
96
self.map.commit_write_group()
98
[("blob", (b"myfileid", b"myrevid"))],
99
list(self.map.lookup_git_sha(b.id)))
100
self.assertEqual(b.id,
101
self.map.lookup_blob_id(b"myfileid", b"myrevid"))
104
self.map.start_write_group()
105
updater = self.cache.get_updater(Revision(b"somerevid"))
106
updater.add_object(self._get_test_commit(), {
107
"testament3-sha1": b"mytestamentsha"}, None)
109
t.add(b"somename", stat.S_IFREG, Blob().id)
110
updater.add_object(t, (b"fileid", b"myrevid"), b"")
112
self.map.commit_write_group()
113
self.assertEqual([("tree", (b"fileid", b"myrevid"))],
114
list(self.map.lookup_git_sha(t.id)))
115
# It's possible for a backend to not implement lookup_tree
117
self.assertEqual(t.id,
118
self.map.lookup_tree_id(b"fileid", b"myrevid"))
119
except NotImplementedError:
122
def test_revids(self):
123
self.map.start_write_group()
124
updater = self.cache.get_updater(Revision(b"myrevid"))
125
c = self._get_test_commit()
126
updater.add_object(c, {"testament3-sha1": b"mtestament"}, None)
128
self.map.commit_write_group()
129
self.assertEqual([b"myrevid"], list(self.map.revids()))
131
def test_missing_revisions(self):
132
self.map.start_write_group()
133
updater = self.cache.get_updater(Revision(b"myrevid"))
134
c = self._get_test_commit()
135
updater.add_object(c, {"testament3-sha1": b"testament"}, None)
137
self.map.commit_write_group()
138
self.assertEqual(set([b"lala", b"bla"]),
139
set(self.map.missing_revisions([b"myrevid", b"lala", b"bla"])))
142
class DictGitShaMapTests(TestCase, TestGitShaMap):
146
self.cache = DictBzrGitCache()
147
self.map = self.cache.idmap
150
class SqliteGitShaMapTests(TestCaseInTempDir, TestGitShaMap):
153
TestCaseInTempDir.setUp(self)
154
self.cache = SqliteBzrGitCache(os.path.join(self.test_dir, 'foo.db'))
155
self.map = self.cache.idmap
158
class TdbGitShaMapTests(TestCaseInTempDir, TestGitShaMap):
161
TestCaseInTempDir.setUp(self)
163
self.cache = TdbBzrGitCache(os.path.join(self.test_dir, 'foo.tdb'))
165
raise UnavailableFeature("Missing tdb")
166
self.map = self.cache.idmap
169
class IndexGitShaMapTests(TestCaseInTempDir, TestGitShaMap):
172
TestCaseInTempDir.setUp(self)
173
transport = get_transport(self.test_dir)
174
IndexGitCacheFormat().initialize(transport)
175
self.cache = IndexBzrGitCache(transport)
176
self.map = self.cache.idmap