I'll also try to expand on what Robert mentioned. At present, if you do something like "bzr co --lightweight" and the source location has a working tree, it tries to read the content from that working tree, rather than extracting the content from the repository.
This *used* to be faster (pre 2a formats). I'm guessing it no longer holds true. If we removed that logic, you would be saving ~90s from your checkout time. 30s in 'iter_changes' and 60s from reading the old content. I don't know what the specific cost for extraction would be, but at least on your encrypted filesystem, it seems that opening lots of files is much more expensive than doing more work from a single larger file.
Could you try doing:
time bzr co source test1
cd test1
bzr remove-tree .
cd ..
time bzr co --lightweight --lsprof-file colw-nosourcewt.lsprof test1 test2
I'll also try to expand on what Robert mentioned. At present, if you do something like "bzr co --lightweight" and the source location has a working tree, it tries to read the content from that working tree, rather than extracting the content from the repository.
This *used* to be faster (pre 2a formats). I'm guessing it no longer holds true. If we removed that logic, you would be saving ~90s from your checkout time. 30s in 'iter_changes' and 60s from reading the old content. I don't know what the specific cost for extraction would be, but at least on your encrypted filesystem, it seems that opening lots of files is much more expensive than doing more work from a single larger file.
Could you try doing:
time bzr co source test1 .lsprof test1 test2
cd test1
bzr remove-tree .
cd ..
time bzr co --lightweight --lsprof-file colw-nosourcewt
And see what that gives us?