fix: accept a destination inside the device, and say so in --help
Build and publish container / build (pull_request) Successful in 2m27s
Build and publish container / build (pull_request) Successful in 2m27s
The script required the destination to be its own mount point, while the documentation and its own usage text both told the user to pass /media/IPOD/Music. The documented invocation was rejected. A subdirectory is the better target, so the guard was what was wrong. --delete is confined to it, and the device path budget is now derived from it -- the part of the destination below its mount point -- rather than configured, so the budget cannot disagree with where the files are actually going. The check that matters is that the destination sits on a FAT filesystem, which is also what catches an unmounted device: /media/IPOD/Music then resolves to the host's own root filesystem, and emptying that is the outcome all of these guards exist to prevent. Three further faults found by testing the guards rather than reasoning about them: Stripping the trailing slash from "/" left an empty string, so the guard refusing the host root never fired and the user got "destination is not a directory" instead. die() printed only its first argument, so the second half of the non-FAT message -- the half saying to check whether the device is mounted -- was silently dropped. --help was not handled at all. Only -h reached the usage text, and it exited 2 to stderr, which is right for misuse and wrong for someone asking a question. Help now goes to stdout and exits zero, and carries the guidance rather than leaving it to the README, since the question it answers is asked at a terminal. The test stage installs bash, rsync and findmnt, none of which are in the base image, and the tests skip rather than fail where they are absent -- a machine without rsync is not a machine that would run this script.
This commit is contained in:
@@ -150,9 +150,15 @@ tools/sync-to-ipod.sh /mnt/tank/media/music-mp3 /media/IPOD/Music
|
||||
tools/sync-to-ipod.sh -n /mnt/tank/media/music-mp3 /media/IPOD/Music # dry run
|
||||
```
|
||||
|
||||
It refuses to start unless the destination is a mounted FAT filesystem that is
|
||||
its own mount point, because `--delete` aimed at the wrong directory empties it
|
||||
and does not announce itself. It also excludes `/.rockbox`, the scrobbler logs
|
||||
The destination is where the artist folders should end up — normally a
|
||||
subdirectory such as `/media/IPOD/Music`, not the card root. A subdirectory is
|
||||
the better target: `--delete` is confined to it, and the device path budget is
|
||||
derived from it rather than configured, so the two cannot disagree.
|
||||
|
||||
It refuses to start unless the destination is on a mounted FAT filesystem. That
|
||||
check is also what catches an unmounted device — `/media/IPOD/Music` then
|
||||
resolves to the host's own root filesystem, and this refuses to empty that.
|
||||
`--help` says all of it. It also excludes `/.rockbox`, the scrobbler logs
|
||||
and the various filesystem metadata directories from deletion — the mirror does
|
||||
not contain them, and without the exclusion a sync to the card root would
|
||||
remove the Rockbox install.
|
||||
|
||||
Reference in New Issue
Block a user