Re: [PATCH v2 2/2] mv: check for missing destination directory before renaming
Junio C Hamano <[email protected]>
| Newsgroups | org.kernel.vger.git |
|---|---|
| Message-ID | <[email protected]> |
Lucas Zamboni Orioli <[email protected]> writes: >> 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: Generally, a symbolic link in a Git-managed working tree should not be followed. Following a symbolic link would mean that 'git mv x y' could move 'x' outside the working tree if 'y' is a tracked symbolic link pointing to a directory outside the working tree. 'git apply', for example, avoids being fooled by a symbolic link for the same reason. I doubt that using stat() instead of lstat() is the right approach. Doing so essentially amounts to ignoring the presence of symbolic links.