Move-update has access to the old (move-dst) and new (move-src) trees and uses
this to generate the diff to be merged to make move-dst match move-src. For
nodes where the node kind does not change move-update assumes that the nodes in
the two trees are directly related. However there could be a replace (delete
plus add or copy) between the two nodes. This doesn't matter if there are no
local changes but if when there are local changes merge should generate a
tree-conflict and this is missed.
There is no short-term solution and 1.8 is going to miss detecting these
tree-conflicts. If/when we introduce server-side move-tracking then this
problem will include server-side moves as well as replaces.
Possible long-term solutions:
- move-update contacts the repository to get the history
- move-update contacts the repository to get the delta including replaces
- the original update stores any replaces in the tree-conflict