I agree with Paul suggestion for an error message. In any case, Coreutils 5.93 message was better than the current one
On Sat, Jul 22, 2023 at 8:37 PM Paul Eggert <egg...@cs.ucla.edu> wrote: > On 2023-07-22 03:19, Pádraig Brady wrote: > > Given the subtleties in this area, > > I'd be reluctant to adjust diagnostics here. > > I looked into this a bit more. Given "mv dir e" where e/dir is an > existing nonempty directory, 7th Edition Unix fails this way: > > mv: e/dir exists > > Solaris 10 mv fails this way: > > mv: cannot rename dir to e/dir: File exists > > Coreutils 5.93 fails this way: > > mv: cannot overwrite directory `e/dir' > > Current coreutils fails this way: > > mv: cannot move 'dir' to 'e/dir': Directory not empty > > macOS fails this way: > > mv: rename dir to e/dir: Directory not empty > > If you ask me, none of these are all that good. Current coreutils and > macOS give a confusing "Directory not empty" message (which directory?). > Solaris 10 has a similar confusion. 7th Edition and coreutils 5.93 don't > print strerror (errno). > > All things considered, how about if we go back to something like > coreutils 5.93, except output strerror (errno) too? That is, something > like this: > > mv: cannot overwrite 'e/dir': Directory not empty > > This focuses the user on the problem, avoiding confusion from the > irrelevant source file name. We'd use this format if renameat fails with > an errno that means the problem must be with the destination, and stick > with the current format otherwise. Affected errno values would be > EDQUOT, EISDIR, ENOSPC, EEXIST, ENOTEMPTY. >