Windows: Moving files should take effect even when changes are in case only
- Dominant language
- Python
- Stars
- 15.7k
- Forks
- 2.1k
- Avg merge
- 4d 21h
- Merged PRs (30d)
- 31
Description
### Problem
Running this command in verbose (`-vv`) mode:
```sh
C:\apps\ytdl
λ beet -vv mv -a projections
user configuration: C:\Users\RollingStar\AppData\Roaming\beets\config.yaml
data directory: C:\Users\RollingStar\AppData\Roaming\beets
plugin paths:
Sending event: pluginload
inline: adding item field i_cust_catalog
inline: adding item field i_main
inline: adding album field alb_main
inline: adding album field alb_main_suffix
library database: e:\Music\beetslibrary.bib
library directory: e:\Music
Sending event: library_opened
Moving 0 albums (1 already in place).
Sending event: cli_exit
# same command - but changed config to change the CAPITALIZATION in the path
C:\apps\ytdl
λ beet -vv mv -a projections
user configuration: C:\Users\RollingStar\AppData\Roaming\beets\config.yaml
data directory: C:\Users\RollingStar\AppData\Roaming\beets
plugin paths:
Sending event: pluginload
inline: adding item field i_cust_catalog
inline: adding item field i_main
inline: adding album field alb_main
inline: adding album field alb_main_suffix
library database: e:\Music\beetslibrary.bib
library directory: e:\Music
Sending event: library_opened
Moving 1 album.
moving: e:\Music\Wolfgun - 2013 - PROJECTIONS
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
moving album art e:\Music\Wolfgun - 2013 - PROJECTIONS\front.1.jpg to e:\Music\Wolfgun - 2013 - Projections\front.jpg
Sending event: database_change
Sending event: cli_exit
```
Led to this problem:
Beets correctly identifies when a path changes case (c:\path -> c:\PATH). But the move command doesn't move the files, because (?) Windows paths are case-insensitive.
Relevant code:
https://github.com/beetbox/beets/blob/b659ad6b0c7e7be35f6d39df09b740b4ed69f5f5/beets/library.py#L796
https://github.com/beetbox/beets/blob/b659ad6b0c7e7be35f6d39df09b740b4ed69f5f5/beets/util/__init__.py#L486
The `os.rename(path, dest)` call may be the culprit.
Potential workaround (code): move the files to a temp folder, delete the wrongly-capitalized path once it's empty, and move them to a new folder with the right caps?
Workaround (user): Change the path each time you want to change caps. Add a useless character and remove it if you need to.
Contributor guide
Assessment
This issue has not been assessed yet.