I'm not really sure what testing you've done on this, but I'm getting some really strange results.
Specifically, when I push it turns out to be sending xml fragments over the wire. Specifically it seems to be this code:
elif (not from_format.supports_chks):
# Source repository doesn't support chks. So we can transmit the
# inventories 'as-is' and either they are just accepted on the
# target, or the Sink will properly convert it.
# (XXX: this assumes that all non-chk formats are understood as-is
# by any Sink, but that presumably isn't true for foreign repo
# formats added by bzr-svn etc?)
return self._get_simple_inventory_stream(revision_ids, missing=missing)
Which means that the raw xml bytes are being transmitted, and then the target side is extracting the xml upcasting and downcasting.
I see that there are code paths in place to do otherwise, but as near as I can tell, "_stream_invs_as_deltas" is only getting called if the *source* format is CHK.
From the profiling I've done, the _generate_root_texts() code is the bulk of the overhead with the new format. But *that* is because all of the data is sent to the server as XML texts, and the server has to do all the work to convert it.
When I just disable the code path that sends 'simple_inventory_stream', then I get:
$ time wbzr push bzr://localhost/test-2a/x
bzr: ERROR: Version present for / in TREE_ROOT
So I have a *strong* feeling the code you've introduced is actually broken, and you just didn't realize it.
I'm not really sure what testing you've done on this, but I'm getting some really strange results.
Specifically, when I push it turns out to be sending xml fragments over the wire. Specifically it seems to be this code: supports_ chks): simple_ inventory_ stream( revision_ ids,
missing= missing)
elif (not from_format.
# Source repository doesn't support chks. So we can transmit the
# inventories 'as-is' and either they are just accepted on the
# target, or the Sink will properly convert it.
# (XXX: this assumes that all non-chk formats are understood as-is
# by any Sink, but that presumably isn't true for foreign repo
# formats added by bzr-svn etc?)
return self._get_
Which means that the raw xml bytes are being transmitted, and then the target side is extracting the xml upcasting and downcasting.
I see that there are code paths in place to do otherwise, but as near as I can tell, "_stream_ invs_as_ deltas" is only getting called if the *source* format is CHK.
From the profiling I've done, the _generate_ root_texts( ) code is the bulk of the overhead with the new format. But *that* is because all of the data is sent to the server as XML texts, and the server has to do all the work to convert it.
When I just disable the code path that sends 'simple_ inventory_ stream' , then I get:
$ time wbzr push bzr://localhost /test-2a/ x
bzr: ERROR: Version present for / in TREE_ROOT
So I have a *strong* feeling the code you've introduced is actually broken, and you just didn't realize it.