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