git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH mm/mv-file-to-no-such-dir-with-slash] mv: let 'git mv file no-such-dir/' error out on Windows, too

From
Johannes Sixt <j6t@kdbg.org>
Date
Jan 10, 2014, 19:21 UTC
Message-ID
<52D04856.9070005@kdbg.org>
In-Reply-To
<xmqq7ga8aibn.fsf@gitster.dls.corp.google.com>
Am 09.01.2014 23:42, schrieb Junio C Hamano:
Show 12 quoted lines
> Johannes Sixt <j6t@kdbg.org> writes:
> 
>> The previous commit c57f628 (mv: let 'git mv file no-such-dir/' error out)
>> relies on that rename("src", "dst/") fails if directory dst does not
>> exist (note the trailing slash). This does not work as expected on Windows:
>> This rename() call is successful. Insert an explicit check for this case.
> 
> Could you care to explain "Successful how" a bit here?  Do we see
> no-such-dir mkdir'ed and then no-such-dir/file created?  Do we see
> file moved to a new file whose name is no-such-dir/?  I am guessing
> that it would be the latter, but if that is the case we would need
> at least an air-quote around "successful".

The file is renamed to no-such-dir without the slash at the end. The updated commit message would be:

mv: let 'git mv file no-such-dir/' error out on Windows, too

The previous commit c57f628 (mv: let 'git mv file no-such-dir/' error out) relies on that rename("src", "dst/") fails if directory dst does not exist (note the trailing slash). This does not work as expected on Windows: The rename() call does not fail, but renames src to dst (without the trailing slash). Insert an explicit check for this case to force an error.

This changes the error message from
   $ git mv file no-such-dir/
   fatal: renaming 'file' failed: Not a directory
to
   $ git mv file no-such-dir/
   fatal: destination directory does not exist, source=file, destination=no-such-dir/
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Show 29 quoted lines
> 
>> This changes the error message from
>>
>>    $ git mv file no-such-dir/
>>    fatal: renaming 'file' failed: Not a directory
>>
>> to
>>
>>    $ git mv file no-such-dir/
>>    fatal: destination directory does not exist, source=file, destination=no-such-dir/
>>
>> Signed-off-by: Johannes Sixt <j6t@kdbg.org>
>> ---
>>  builtin/mv.c | 2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/builtin/mv.c b/builtin/mv.c
>> index 08fbc03..21c46d1 100644
>> --- a/builtin/mv.c
>> +++ b/builtin/mv.c
>> @@ -214,6 +214,8 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
>>  			}
>>  		} else if (string_list_has_string(&src_for_dst, dst))
>>  			bad = _("multiple sources for the same target");
>> +		else if (is_dir_sep(dst[strlen(dst) - 1]))
>> +			bad = _("destination directory does not exist");
>>  		else
>>  			string_list_insert(&src_for_dst, dst);
> 
Previous: Junio C HamanoNext: Junio C Hamano
Message 10 of 11 in “mv: let 'git mv file no-such-dir/' error out”
  1. mv: let 'git mv file no-such-dir/' error outMatthieu Moy, Dec 3, 2013
  2. Duy NguyenDec 3, 2013
  3. Matthieu MoyDec 4, 2013
  4. Duy NguyenDec 4, 2013
  5. mv: let 'git mv file no-such-dir/' error outMatthieu Moy, Dec 4, 2013
  6. Junio C HamanoDec 4, 2013
  7. Matthieu MoyDec 4, 2013
  8. mv: let 'git mv file no-such-dir/' error out on Windows, tooJohannes Sixt, Jan 8, 2014
  9. Junio C HamanoJan 9, 2014
  10. Johannes SixtJan 10, 2014
  11. Junio C HamanoJan 10, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.