While pushing there are two common cases we decently handle:
1a) The target dir doesn't exist. Create it and happily push everything.
1b) Some parent directories also don't exist. Create them if
--creat-prefix is given, complain and bail if not.
2) The target is the same branch, but older. Update it.
Between case 1 and 2 there are several other situations one can
encounter. With Launchpad hosted branches, initial pushes get
interrupted from time to time. When people try to resume, bzr will
loudly fail. Usually some part of the bzrdir hierarchy has been written,
but not enough for bzr to recognize it as a valid branch.
A complicating factor is that Launchpad does not allow you to remove the
branch directory:
https://launchpad.net/products/launchpad-bazaar/+bug/34540
See
https://launchpad.net/products/launchpad-bazaar/+bug/53340
https://launchpad.net/products/bzr/+bug/45504
https://launchpad.net/products/bzr/+bug/30576
no deleting of branches:
Different kinds of situations:
two trivial ones, the dir does not exist, and there is already a branch
present.
the dir exists and has a branch present
normal diverged branch logic kicks in (or not)
the dir does not exist
create it and go on
more than one level does not exist
create the inbetween parts if --create-prefix is given, fail
otherwise
the dir exists but is entirely empty
populate with .bzr and continue
the dir exists and has a .bzr that isn't entirely done
overwrite it?
the dir exists and has non .bzr files but no .bzr
blow away? remote/local
the dir exists
Wouter van Heyst