Merge lp:~jelmer/brz/pack-changes into lp:brz

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: 7638
Merge reported by: The Breezy Bot
Merged at revision: not available
Proposed branch: lp:~jelmer/brz/pack-changes
Merge into: lp:brz
Diff against target: 87 lines (+30/-12)
2 files modified
breezy/git/tests/test_remote.py (+1/-1)
breezy/git/transportgit.py (+29/-11)
To merge this branch: bzr merge lp:~jelmer/brz/pack-changes
Reviewer Review Type Date Requested Status
Jelmer Vernooij Approve
Review via email: mp+429890@code.launchpad.net

Commit message

Fix compatibility with modern dulwich.

Description of the change

Fix compatibility with modern dulwich.

To post a comment you must log in.
Revision history for this message
Jelmer Vernooij (jelmer) :
review: Approve
Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :
Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :
lp:~jelmer/brz/pack-changes updated
7638. By Jelmer Vernooij

More refactoring - avoid creating index with newer versions of Dulwich.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'breezy/git/tests/test_remote.py'
--- breezy/git/tests/test_remote.py 2022-08-30 17:23:15 +0000
+++ breezy/git/tests/test_remote.py 2022-09-14 13:53:01 +0000
@@ -892,7 +892,7 @@
892 t = br.basis_tree()892 t = br.basis_tree()
893 chunks = list(t.archive('tgz', 'foo.tar.gz'))893 chunks = list(t.archive('tgz', 'foo.tar.gz'))
894 with gzip.GzipFile(fileobj=BytesIO(b''.join(chunks))) as g:894 with gzip.GzipFile(fileobj=BytesIO(b''.join(chunks))) as g:
895 self.assertEqual('', g.filename)895 self.assertEqual('', g.name)
896896
897 def test_archive_unsupported(self):897 def test_archive_unsupported(self):
898 # archive is not supported over HTTP, so simulate that898 # archive is not supported over HTTP, so simulate that
899899
=== modified file 'breezy/git/transportgit.py'
--- breezy/git/transportgit.py 2022-08-22 18:19:46 +0000
+++ breezy/git/transportgit.py 2022-09-14 13:53:01 +0000
@@ -51,6 +51,10 @@
51 compute_file_sha,51 compute_file_sha,
52 write_pack_object,52 write_pack_object,
53 )53 )
54try:
55 from dulwich.refs import SymrefLoop
56except ImportError: # dulwich < 0.20.46
57 SymrefLoop = KeyError
54from dulwich.repo import (58from dulwich.repo import (
55 BaseRepo,59 BaseRepo,
56 InfoRefsContainer,60 InfoRefsContainer,
@@ -274,7 +278,7 @@
274 try:278 try:
275 realnames, _ = self.follow(name)279 realnames, _ = self.follow(name)
276 realname = realnames[-1]280 realname = realnames[-1]
277 except (KeyError, IndexError):281 except (KeyError, IndexError, SymrefLoop):
278 realname = name282 realname = name
279 if realname == b'HEAD':283 if realname == b'HEAD':
280 transport = self.worktree_transport284 transport = self.worktree_transport
@@ -635,8 +639,8 @@
635 warning('Unable to read pack file %s',639 warning('Unable to read pack file %s',
636 self.pack_transport.abspath(pack_name))640 self.pack_transport.abspath(pack_name))
637 continue641 continue
638 # TODO(jelmer): Don't read entire file into memory?642 from tempfile import SpooledTemporaryFile
639 f = BytesIO(f.read())643 f = SpooledTemporaryFile(f.read())
640 pd = PackData(pack_name, f)644 pd = PackData(pack_name, f)
641 else:645 else:
642 pd = PackData(646 pd = PackData(
@@ -766,17 +770,31 @@
766 :param path: Path to the pack file.770 :param path: Path to the pack file.
767 """771 """
768 f.seek(0)772 f.seek(0)
769 p = Pack('', resolve_ext_ref=self.get_raw)773 data = PackData.from_file(f, len(f.getvalue()))
770 p._data = PackData.from_file(f, len(f.getvalue()))774 if hasattr(Pack, 'sorted_entries'):
771 p._data.pack = p775 from dulwich.pack import _PackTupleIterable, PackInflater
772 p._idx_load = lambda: MemoryPackIndex(776 sorted_entries = list(
773 p.data.sorted_entries(), p.data.get_stored_checksum())777 data.sorted_entries(resolve_ext_ref=self.get_raw))
774778 pack_sha = iter_sha1(entry[0] for entry in sorted_entries)
775 pack_sha = p.index.objects_sha1()779 inflater = PackInflater.for_pack_data(
780 data, resolve_ext_ref=self.get_raw)
781 pack_tuples = _PackTupleIterable(lambda: iter(inflater), len(data))
782 else: # dulwich < 0.20.47
783 p = Pack('', resolve_ext_ref=self.get_raw)
784 p._data = data
785 p._data.pack = p
786 sorted_entries = p.data.sorted_entries()
787
788 p._idx_load = lambda: MemoryPackIndex(
789 sorted_entries,
790 p.data.get_stored_checksum())
791
792 pack_sha = p.index.objects_sha1()
793 pack_tuples = p.pack_tuples()
776794
777 with self.pack_transport.open_write_stream(795 with self.pack_transport.open_write_stream(
778 "pack-%s.pack" % pack_sha.decode('ascii')) as datafile:796 "pack-%s.pack" % pack_sha.decode('ascii')) as datafile:
779 entries, data_sum = write_pack_objects(datafile, p.pack_tuples())797 entries, data_sum = write_pack_objects(datafile, pack_tuples)
780 entries = sorted([(k, v[0], v[1]) for (k, v) in entries.items()])798 entries = sorted([(k, v[0], v[1]) for (k, v) in entries.items()])
781 with self.pack_transport.open_write_stream(799 with self.pack_transport.open_write_stream(
782 "pack-%s.idx" % pack_sha.decode('ascii')) as idxfile:800 "pack-%s.idx" % pack_sha.decode('ascii')) as idxfile:

Subscribers

People subscribed via source and target branches