[Start of a separate thread...]
I've been thinking about the branch locker because we have issues with it.
I now think the branch locker requirement is difficult to implement because it is hard to understand. I would prefer to replace it with an "everything waits" requirement, and leave it to clients to time out. This is easy to explain to users (and to computers).
If the user cares about concurrency control, then it is reasonable to expect uploads to block while waiting for commits. If they do not (a "continual uploads and commits" scenario), then imposing a 0 timeout will be worse than allowoing a configurable timeout. Note that in the upcoming thick client scenario, the upload itself will anyway need to happen only once -- but that doesn't affect the "always block" scenario.