Re: [PATCH v2 1/2] mv: name both source and destination when rename fails
Junio C Hamano <[email protected]>
| Newsgroups | org.kernel.vger.git |
|---|---|
| Message-ID | <[email protected]> |
"Lucas Zamboni Orioli via GitGitGadget" <[email protected]> writes: > From: Lucas Zamboni Orioli <[email protected]> > > When "git mv" fails at the rename(2) syscall, the error is reported > with die_errno() using only the source path: > > fatal: renaming 'src' failed: No such file or directory > > rename(2) returns ENOENT both when the source does not exist and when > a directory component of the destination does not exist, and errno > does not distinguish the two. Reporting only the source therefore > misleads the user in the latter case: for > > git mv a/file b/no-such-dir/file > > the message blames 'a/file', which exists, and gives no hint that > 'b/no-such-dir/' is the missing part. > > Inspecting the paths again after the failure to determine which one is > at fault would be racy, since either could appear or disappear between > the rename(2) and the follow-up check. Instead, simply name both the > source and the destination in the message and let the reader see which > one is wrong: > > fatal: renaming 'a/file' to 'b/no-such-dir/file' failed: > No such file or directory > > Signed-off-by: Lucas Zamboni Orioli <[email protected]> > --- > builtin/mv.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/builtin/mv.c b/builtin/mv.c > index a82fc97a19..35e504484a 100644 > --- a/builtin/mv.c > +++ b/builtin/mv.c > @@ -549,7 +549,7 @@ remove_entry: > rename(src, dst) < 0) { > if (ignore_errors) > continue; > - die_errno(_("renaming '%s' failed"), src); > + die_errno(_("renaming '%s' to '%s' failed"), src, dst); > } > if (submodule_gitfiles[i]) { > if (!update_path_in_gitmodules(src, dst)) Makes sense.