)
from dulwich.refs import ( # noqa: F401
+ ANNOTATED_TAG_SUFFIX,
check_ref_format,
RefsContainer,
DictRefsContainer,
if depth not in (None, 0):
raise NotImplementedError("depth not supported yet")
- wants = determine_wants(self.get_refs())
+ refs = {}
+ for ref, sha in self.get_refs().items():
+ try:
+ obj = self.object_store[sha]
+ except KeyError:
+ warnings.warn(
+ 'ref %s points at non-present sha %s' % (
+ ref.decode('utf-8', 'replace'), sha.decode('ascii')),
+ UserWarning)
+ continue
+ else:
+ if isinstance(obj, Tag):
+ refs[ref + ANNOTATED_TAG_SUFFIX] = obj.object[1]
+ refs[ref] = sha
+
+ wants = determine_wants(refs)
if not isinstance(wants, list):
raise TypeError("determine_wants() did not return a list")
r.get_walker(b'2a72d929692c41d8554c07f6301757ba18a65d91')],
[b'2a72d929692c41d8554c07f6301757ba18a65d91'])
+ def test_fetch(self):
+ r = self.open_repo('a.git')
+ tmp_dir = self.mkdtemp()
+ self.addCleanup(shutil.rmtree, tmp_dir)
+ t = Repo.init(tmp_dir)
+ r.fetch(t)
+ self.assertIn(b'a90fa2d900a17e99b433217e988c4eb4a2e9a097', t)
+ self.assertIn(b'a90fa2d900a17e99b433217e988c4eb4a2e9a097', t)
+ self.assertIn(b'a90fa2d900a17e99b433217e988c4eb4a2e9a097', t)
+ self.assertIn(b'28237f4dc30d0d462658d6b937b08a0f0b6ef55a', t)
+ self.assertIn(b'b0931cadc54336e78a1d980420e3268903b57a50', t)
+
+ def test_fetch_ignores_missing_refs(self):
+ r = self.open_repo('a.git')
+ missing = b'1234566789123456789123567891234657373833'
+ r.refs[b'refs/heads/blah'] = missing
+ tmp_dir = self.mkdtemp()
+ self.addCleanup(shutil.rmtree, tmp_dir)
+ t = Repo.init(tmp_dir)
+ r.fetch(t)
+ self.assertIn(b'a90fa2d900a17e99b433217e988c4eb4a2e9a097', t)
+ self.assertIn(b'a90fa2d900a17e99b433217e988c4eb4a2e9a097', t)
+ self.assertIn(b'a90fa2d900a17e99b433217e988c4eb4a2e9a097', t)
+ self.assertIn(b'28237f4dc30d0d462658d6b937b08a0f0b6ef55a', t)
+ self.assertIn(b'b0931cadc54336e78a1d980420e3268903b57a50', t)
+ self.assertNotIn(missing, t)
+
def test_clone(self):
r = self.open_repo('a.git')
tmp_dir = self.mkdtemp()