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 ... import osutils
32
from ...bzr.inventory import (
38
from ...revision import (
42
from ...tests import (
47
from ...transport import (
61
def _get_test_commit(self):
63
c.committer = b"Jelmer <jelmer@samba.org>"
66
c.author = b"Jelmer <jelmer@samba.org>"
69
c.message = b"Teh foo bar"
70
c.tree = b"cc9462f7f8263ef5adfbeff2fb936bb36b504cba"
73
def test_commit(self):
74
self.map.start_write_group()
75
updater = self.cache.get_updater(Revision(b"myrevid"))
76
c = self._get_test_commit()
77
updater.add_object(c, {
78
"testament3-sha1": b"cc9462f7f8263ef5adf8eff2fb936bb36b504cba"},
81
self.map.commit_write_group()
83
[("commit", (b"myrevid",
84
b"cc9462f7f8263ef5adfbeff2fb936bb36b504cba",
85
{"testament3-sha1": b"cc9462f7f8263ef5adf8eff2fb936bb36b504cba"},
87
list(self.map.lookup_git_sha(c.id)))
88
self.assertEqual(c.id, self.map.lookup_commit(b"myrevid"))
90
def test_lookup_notfound(self):
91
self.assertRaises(KeyError, list,
92
self.map.lookup_git_sha(b"5686645d49063c73d35436192dfc9a160c672301"))
95
self.map.start_write_group()
96
updater = self.cache.get_updater(Revision(b"myrevid"))
97
updater.add_object(self._get_test_commit(), { "testament3-sha1": b"Test" }, None)
100
updater.add_object(b, (b"myfileid", b"myrevid"), None)
102
self.map.commit_write_group()
104
[("blob", (b"myfileid", b"myrevid"))],
105
list(self.map.lookup_git_sha(b.id)))
106
self.assertEqual(b.id,
107
self.map.lookup_blob_id(b"myfileid", b"myrevid"))
110
self.map.start_write_group()
111
updater = self.cache.get_updater(Revision(b"somerevid"))
112
updater.add_object(self._get_test_commit(), {
113
"testament3-sha1": b"mytestamentsha" }, None)
115
t.add(b"somename", stat.S_IFREG, Blob().id)
116
updater.add_object(t, (b"fileid", b"myrevid"), b"")
118
self.map.commit_write_group()
119
self.assertEqual([("tree", (b"fileid", b"myrevid"))],
120
list(self.map.lookup_git_sha(t.id)))
121
# It's possible for a backend to not implement lookup_tree
123
self.assertEqual(t.id,
124
self.map.lookup_tree_id(b"fileid", b"myrevid"))
125
except NotImplementedError:
128
def test_revids(self):
129
self.map.start_write_group()
130
updater = self.cache.get_updater(Revision(b"myrevid"))
131
c = self._get_test_commit()
132
updater.add_object(c, {"testament3-sha1": b"mtestament"}, None)
134
self.map.commit_write_group()
135
self.assertEqual([b"myrevid"], list(self.map.revids()))
137
def test_missing_revisions(self):
138
self.map.start_write_group()
139
updater = self.cache.get_updater(Revision(b"myrevid"))
140
c = self._get_test_commit()
141
updater.add_object(c, {"testament3-sha1": b"testament"}, None)
143
self.map.commit_write_group()
144
self.assertEqual(set([b"lala", b"bla"]),
145
set(self.map.missing_revisions([b"myrevid", b"lala", b"bla"])))
148
class DictGitShaMapTests(TestCase,TestGitShaMap):
152
self.cache = DictBzrGitCache()
153
self.map = self.cache.idmap
156
class SqliteGitShaMapTests(TestCaseInTempDir,TestGitShaMap):
159
TestCaseInTempDir.setUp(self)
160
self.cache = SqliteBzrGitCache(os.path.join(self.test_dir, 'foo.db'))
161
self.map = self.cache.idmap
164
class TdbGitShaMapTests(TestCaseInTempDir,TestGitShaMap):
167
TestCaseInTempDir.setUp(self)
169
self.cache = TdbBzrGitCache(os.path.join(self.test_dir, 'foo.tdb'))
171
raise UnavailableFeature("Missing tdb")
172
self.map = self.cache.idmap
175
class IndexGitShaMapTests(TestCaseInTempDir,TestGitShaMap):
178
TestCaseInTempDir.setUp(self)
179
transport = get_transport(self.test_dir)
180
IndexGitCacheFormat().initialize(transport)
181
self.cache = IndexBzrGitCache(transport)
182
self.map = self.cache.idmap