Re: [PATCH v2 2/2] mv: check for missing destination directory before renaming
- From
Lucas Zamboni Orioli <lucaszam0@gmail.com>
- Date
- Jul 23, 2026, 21:38 UTC
- Message-ID
- <CAH01Q-_2APONq2fXmjF=Wo08rTzScMEjyXL-G=_GH6TbjJmTBw@mail.gmail.com>
- In-Reply-To
- <xmqqo6fximn2.fsf@gitster.g>
Show 7 quoted lines
> lstat() can succeed and 'dir_st' may indicate something other than a > directory (for example, a symbolic link or a regular file). > Alternatively, it can fail with ENOTDIR when, for example, 'dst_dir' > is 'a/b/c' and 'a/b' is a file rather than a directory. > > Both cases will cause 'git mv' into a path assumed to be a directory > to fail. Shouldn't we handle these conditions as well?
Yes, agreed, both should be handled. For v3 I switched from lstat() to stat() so that the check follows symlinks the same way rename() does, and I handle the non-directory cases:
stat() failing with ENOENT or ENOTDIR (missing directory, or a leading path component that is a file) reports "destination directory does not exist".
stat() succeeding on something that is not a directory reports "destination is not a directory".
Other stat() errors fall through to rename(), which reports them as before.
For the messages I used the existing "destination directory does not exist" string for the missing case and added one new string, "destination is not a directory", for the non-directory case. I'm happy to collapse these into a single message instead if you'd prefer to avoid the extra translatable string, let me know.