mbp at canonical.com
Wed Jul 16 07:13:13 BST 2008
On Thu, Jun 19, 2008 at 11:41 AM, Aaron Bentley <aaron at aaronbentley.com> wrote:
> I'm sorry I didn't notice this earlier, but this patch introduces
> behavior that I fear may lead to disaster. I'm not firm on this vote,
> but it's my default position, until we've discussed it.
> Specifically, it causes stacking to happen when the source branch is
> stacked. This will frequently not be what people want, and there is no
> way to turn off the behavior.
> Here's the code I'm talking about:
>> def sprout(self, url, revision_id=None, force_new_repo=False,
>> recurse='down', possible_transports=None,
>> - accelerator_tree=None, hardlink=False):
>> + accelerator_tree=None, hardlink=False, stacked=False):
>> """Create a copy of this bzrdir prepared for use as a new line of
>> source_branch = self.open_branch()
>> source_repository = source_branch.repository
>> + if stacked:
>> + stacked_branch_url = self.root_transport.base
>> + else:
>> + try:
>> + stacked_branch_url = source_branch.get_stacked_on()
>> + except (errors.NotStacked, errors.UnstackableBranchFormat,
>> + errors.UnstackableRepositoryFormat):
>> + stacked_branch_url = None
> So if the user requested stacking, we stack against the source branch.
> That seems reasonable. But if they didn't specify stacking, we stack
> against whatever that branch was stacked on. Even if they're branching
> into a shared repo.
> Sooner or later, someone is going to get stacking without realizing it,
> and they're going to get data loss when the stacked_on branch goes away.
> While it is tempting to try to solve the slow-initial-branch problem, I
> don't think this is the right way.
> I think sprout shouldn't do stacking unless either:
> - - the user requests it
> - - there's a stacking policy on the target (and there should probably be
> an override to defeat that, also).
You're right, and there are some further complications.
At the moment the branch code always creates a new branch (and
repository and tree where applicable) in the same format as the
source. So if the source branch is not in a format that supports
stacking, you get a somewhat confusing error about the destination not
supporting stacking. ("But I just told you to make it...?") I think
if you ask for stacking, we have to create a destination branch format
that supports it.
(Perhaps we should make people create the branch separately as a
protective step but I think the current behaviour is more confusing
On the other hand if you do not explicitly ask for a stacked branch I
would agree that you should not get one. You do, with the current
code, at least get a message indicating the dependency, but it may
still be a bit of a trap.
More information about the bazaar