When renaming a file and the second file argument doesn't exist bzr:
* Tests whether the file exists with the exact name and path.
* If the exact file does not exist it tries to find it case-insensitively.
* If this fails it takes as much of the path as it has found case-insensitively and appends the unmatched path.
The second step gives up on each element of the path when it finds a case insensitive match. In the example it finds Test before test, gives up and appends moved_file.
The attached patch looks for an exact match on each element before falling back on a case-insensitive match.
When renaming a file and the second file argument doesn't exist bzr:
* Tests whether the file exists with the exact name and path.
* If the exact file does not exist it tries to find it case-insensitively.
* If this fails it takes as much of the path as it has found case-insensitively and appends the unmatched path.
The second step gives up on each element of the path when it finds a case insensitive match. In the example it finds Test before test, gives up and appends moved_file.
The attached patch looks for an exact match on each element before falling back on a case-insensitive match.