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 dulwich.objects import (
28
from ...revision import (
32
from ...tests import (
37
from ...transport import (
52
def _get_test_commit(self):
54
c.committer = b"Jelmer <jelmer@samba.org>"
57
c.author = b"Jelmer <jelmer@samba.org>"
60
c.message = b"Teh foo bar"
61
c.tree = b"cc9462f7f8263ef5adfbeff2fb936bb36b504cba"
64
def test_commit(self):
65
self.map.start_write_group()
66
updater = self.cache.get_updater(Revision(b"myrevid"))
67
c = self._get_test_commit()
68
updater.add_object(c, {
69
"testament3-sha1": b"cc9462f7f8263ef5adf8eff2fb936bb36b504cba"},
72
self.map.commit_write_group()
74
[("commit", (b"myrevid",
75
b"cc9462f7f8263ef5adfbeff2fb936bb36b504cba",
76
{"testament3-sha1": b"cc9462f7f8263ef5adf8eff2fb936bb36b504cba"},
78
list(self.map.lookup_git_sha(c.id)))
79
self.assertEqual(c.id, self.map.lookup_commit(b"myrevid"))
81
def test_lookup_notfound(self):
82
self.assertRaises(KeyError, list,
83
self.map.lookup_git_sha(b"5686645d49063c73d35436192dfc9a160c672301"))
86
self.map.start_write_group()
87
updater = self.cache.get_updater(Revision(b"myrevid"))
88
updater.add_object(self._get_test_commit(), {
89
"testament3-sha1": b"Test"}, None)
92
updater.add_object(b, (b"myfileid", b"myrevid"), None)
94
self.map.commit_write_group()
96
[("blob", (b"myfileid", b"myrevid"))],
97
list(self.map.lookup_git_sha(b.id)))
98
self.assertEqual(b.id,
99
self.map.lookup_blob_id(b"myfileid", b"myrevid"))
102
self.map.start_write_group()
103
updater = self.cache.get_updater(Revision(b"somerevid"))
104
updater.add_object(self._get_test_commit(), {
105
"testament3-sha1": b"mytestamentsha"}, None)
107
t.add(b"somename", stat.S_IFREG, Blob().id)
108
updater.add_object(t, (b"fileid", b"myrevid"), b"")
110
self.map.commit_write_group()
111
self.assertEqual([("tree", (b"fileid", b"myrevid"))],
112
list(self.map.lookup_git_sha(t.id)))
113
# It's possible for a backend to not implement lookup_tree
115
self.assertEqual(t.id,
116
self.map.lookup_tree_id(b"fileid", b"myrevid"))
117
except NotImplementedError:
120
def test_revids(self):
121
self.map.start_write_group()
122
updater = self.cache.get_updater(Revision(b"myrevid"))
123
c = self._get_test_commit()
124
updater.add_object(c, {"testament3-sha1": b"mtestament"}, None)
126
self.map.commit_write_group()
127
self.assertEqual([b"myrevid"], list(self.map.revids()))
129
def test_missing_revisions(self):
130
self.map.start_write_group()
131
updater = self.cache.get_updater(Revision(b"myrevid"))
132
c = self._get_test_commit()
133
updater.add_object(c, {"testament3-sha1": b"testament"}, None)
135
self.map.commit_write_group()
136
self.assertEqual(set([b"lala", b"bla"]),
137
set(self.map.missing_revisions([b"myrevid", b"lala", b"bla"])))
140
class DictGitShaMapTests(TestCase, TestGitShaMap):
144
self.cache = DictBzrGitCache()
145
self.map = self.cache.idmap
148
class SqliteGitShaMapTests(TestCaseInTempDir, TestGitShaMap):
151
TestCaseInTempDir.setUp(self)
152
self.cache = SqliteBzrGitCache(os.path.join(self.test_dir, 'foo.db'))
153
self.map = self.cache.idmap
156
class TdbGitShaMapTests(TestCaseInTempDir, TestGitShaMap):
159
TestCaseInTempDir.setUp(self)
161
self.cache = TdbBzrGitCache(os.path.join(self.test_dir, 'foo.tdb'))
163
raise UnavailableFeature("Missing tdb")
164
self.map = self.cache.idmap
167
class IndexGitShaMapTests(TestCaseInTempDir, TestGitShaMap):
170
TestCaseInTempDir.setUp(self)
171
transport = get_transport(self.test_dir)
172
IndexGitCacheFormat().initialize(transport)
173
self.cache = IndexBzrGitCache(transport)
174
self.map = self.cache.idmap