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
1=== modified file 'remote.py'
2--- remote.py 2012-07-02 19:02:08 +0000
3+++ remote.py 2013-08-14 04:06:32 +0000
4@@ -311,27 +311,19 @@
5 def __init__(self, path, resolve_ext_ref):
6 super(TemporaryPackIterator, self).__init__(path)
7 self.resolve_ext_ref = resolve_ext_ref
8-
9- @property
10- def data(self):
11- if self._data is None:
12- self._data = PackData(self._data_path)
13- return self._data
14-
15- @property
16- def index(self):
17- if self._idx is None:
18- if not os.path.exists(self._idx_path):
19- pb = ui.ui_factory.nested_progress_bar()
20- try:
21- def report_progress(cur, total):
22- pb.update("generating index", cur, total)
23- self.data.create_index(self._idx_path,
24- progress=report_progress)
25- finally:
26- pb.finished()
27- self._idx = load_pack_index(self._idx_path)
28- return self._idx
29+ self._idx_load = lambda: self._idx_load_or_generate(self._idx_path)
30+
31+ def _idx_load_or_generate(self, path):
32+ if not os.path.exists(path):
33+ pb = ui.ui_factory.nested_progress_bar()
34+ try:
35+ def report_progress(cur, total):
36+ pb.update("generating index", cur, total)
37+ self.data.create_index(path,
38+ progress=report_progress)
39+ finally:
40+ pb.finished()
41+ return load_pack_index(path)
42
43 def __del__(self):
44 if self._idx is not None:

Subscribers

People subscribed via source and target branches

to all changes: