Going along with this, all the rename logic is actually based around 'set_state_from_inventory', rather than directly changing the dirstate. Well, sometimes. "rename_one" is not implemented directly, but "move" is. So if you move files into a subdir (bzr mv X Y Z dir/) it will probably maintain state in a reasonable fashion. If you rename a file "bzr mv foo bar" then it will likely lose it.
What we really need is a superset interface to both rename_one and move, that can be implemented 1 time, and then rename_one and move can just call that. (I think WT3 has an internal function like this, but WT4 does not)
Going along with this, all the rename logic is actually based around 'set_state_ from_inventory' , rather than directly changing the dirstate. Well, sometimes. "rename_one" is not implemented directly, but "move" is. So if you move files into a subdir (bzr mv X Y Z dir/) it will probably maintain state in a reasonable fashion. If you rename a file "bzr mv foo bar" then it will likely lose it.
What we really need is a superset interface to both rename_one and move, that can be implemented 1 time, and then rename_one and move can just call that. (I think WT3 has an internal function like this, but WT4 does not)