'bzr push' copies the entire repository if there is a BzrDir but not a Branch
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Bazaar |
Fix Released
|
High
|
John A Meinel | ||
2.0 |
Won't Fix
|
Undecided
|
Unassigned | ||
2.3 |
Fix Released
|
High
|
John A Meinel | ||
bzr (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Natty |
Fix Released
|
High
|
Jelmer Vernooij |
Bug Description
I don't know what is specifically wrong, but I don't want to release the next version without getting a handle on this.
I just did some work to set up the release branches for bzr 2.0.2 and bzr 2.1.0b2. I then went to push that work to a staging area on 'babune' because I was at a coffee house and babune is closer to Launchpad than I am. (So a few pushes to a shared repo, and then push from there to launchpad.)
However, as I tried to push it seemed to be pushing *way* too much content, given that the remote repository should have all of bzr.dev.
When I instrumented it, I got:
fetching revisions: 11086
streaming inventories: 11086
streaming chk, excluding: 276
streamed 17737 chk pages
found text keys: 33378
So somehow my small incremental branch is trying to push 11k revisions up to the remote side.
'bzr missing --include-merges --mine ../bzr.dev' claims that I only have 7 new revisions, which is obviously << 11k.
Also, in the '-Dhpss' traceback I see lines like:
12.543 Using fetch logic to copy between CHKInventoryRep
12.552 fetch up to rev {None}
12.553 hpss call: 'get', '/home/
12.553 (to bzr+ssh://<email address hidden>
12.694 result: ('ok',)
12.694 35 body bytes read
12.695 hpss call: 'get', '/home/
12.695 (to bzr+ssh://<email address hidden>
12.835 result: ('ok',)
12.836 54 body bytes read
12.836 hpss call: 'stat', '/home/
12.836 (to bzr+ssh://<email address hidden>
12.976 result: ('stat', '4096', '040755')
12.979 hpss call: 'get', '/home/
12.979 (to bzr+ssh://<email address hidden>
13.132 result: ('ok',)
13.132 696 body bytes read
13.139 RemoteSSHTransp
13.139 hpss call w/readv: 'readv', '/home/
13.139 7 bytes in readv request
13.325 result: ('readv',)
13.493 10520 body bytes read
13.497 RemoteSSHTransp
13.497 hpss call w/readv: 'readv', '/home/
13.497 9 bytes in readv request
13.682 result: ('readv',)
13.704 6424 body bytes read
Which show that it starts out using a "RemoteRepository" but then seems to quickly "ensure_real" determine the exact remote format, and then probe the remote indexes directly, rather than using the smarter 'get_parent_map' implementations.
I'm sure it is still using GCCHKStreamSource when it is done, because that is the code I instrumented to get the debug values.
I will post more as I figure out more.
Related branches
- Martin Pool: Approve
-
Diff: 109 lines (+61/-1)4 files modifiedbzrlib/controldir.py (+4/-0)
bzrlib/tests/blackbox/test_push.py (+16/-0)
bzrlib/tests/per_branch/test_push.py (+36/-1)
doc/en/release-notes/bzr-2.3.txt (+5/-0)
summary: |
- 'bzr push' severely degraded + 'bzr push' copies the entire repository if there is a BzrDir but not a + Branch |
tags: | added: push stackin |
tags: |
added: stacking removed: stackin |
Changed in bzr: | |
status: | In Progress → Fix Released |
milestone: | none → 2.4b2 |
Changed in bzr (Ubuntu): | |
status: | New → Fix Released |
Changed in bzr (Ubuntu Natty): | |
status: | New → In Progress |
Changed in bzr (Ubuntu Natty): | |
importance: | Undecided → High |
assignee: | nobody → Jelmer Vernooij (jelmer) |
As near as I can tell, it is trying to copy my entire repository, rather than *just* copying the ancestry of the branch. Poking some more to figure out why.