Merge lp:~wgrant/bzr-git/remote-ref-deltas into lp:bzr-git

Proposed by William Grant
Status: Merged
Merged at revision: 1620
Proposed branch: lp:~wgrant/bzr-git/remote-ref-deltas
Merge into: lp:bzr-git
Diff against target: 44 lines (+13/-21)
1 file modified
remote.py (+13/-21)
To merge this branch: bzr merge lp:~wgrant/bzr-git/remote-ref-deltas
Reviewer Review Type Date Requested Status
Jelmer Vernooij Approve
Review via email: mp+180033@code.launchpad.net

Commit message

Fix fetching from remote servers that send ref deltas.

Description of the change

Some git servers (most notably Google Code) don't sent packs containing ofs deltas, instead always sending old ref deltas. dulwich handles this fine, but bzr-git's TemporaryPackIterator didn't set PackData.pack, so it couldn't look up references. This manifested as a KeyError when branching from a server that sends ref deltas.

I dropped TemporaryPackIterator.data, as the superclass does what bzr-git needs, plus the bit that's needed to fix this bug. I also stopped overriding index, instead overriding _idx_load, as it seems a bit cleaner.

To post a comment you must log in.
Revision history for this message
Jelmer Vernooij (jelmer) :
review: Approve
Revision history for this message
Jelmer Vernooij (jelmer) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'remote.py'
--- remote.py 2012-07-02 19:02:08 +0000
+++ remote.py 2013-08-14 04:06:32 +0000
@@ -311,27 +311,19 @@
311 def __init__(self, path, resolve_ext_ref):311 def __init__(self, path, resolve_ext_ref):
312 super(TemporaryPackIterator, self).__init__(path)312 super(TemporaryPackIterator, self).__init__(path)
313 self.resolve_ext_ref = resolve_ext_ref313 self.resolve_ext_ref = resolve_ext_ref
314314 self._idx_load = lambda: self._idx_load_or_generate(self._idx_path)
315 @property315
316 def data(self):316 def _idx_load_or_generate(self, path):
317 if self._data is None:317 if not os.path.exists(path):
318 self._data = PackData(self._data_path)318 pb = ui.ui_factory.nested_progress_bar()
319 return self._data319 try:
320320 def report_progress(cur, total):
321 @property321 pb.update("generating index", cur, total)
322 def index(self):322 self.data.create_index(path,
323 if self._idx is None:323 progress=report_progress)
324 if not os.path.exists(self._idx_path):324 finally:
325 pb = ui.ui_factory.nested_progress_bar()325 pb.finished()
326 try:326 return load_pack_index(path)
327 def report_progress(cur, total):
328 pb.update("generating index", cur, total)
329 self.data.create_index(self._idx_path,
330 progress=report_progress)
331 finally:
332 pb.finished()
333 self._idx = load_pack_index(self._idx_path)
334 return self._idx
335327
336 def __del__(self):328 def __del__(self):
337 if self._idx is not None:329 if self._idx is not None:

Subscribers

People subscribed via source and target branches

to all changes: