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

[PATCH 3/5] mv: make non-directory destination error more clear

From
Jeff King <peff@peff.net>
Date
Dec 12, 2011, 07:51 UTC
Message-ID
<20111212075136.GC17532@sigill.intra.peff.net>
In-Reply-To
<20111212074503.GB16511@sigill.intra.peff.net>

If you try to "git mv" multiple files onto another non-directory file, you confusingly get the "usage" message:

  $ touch one two three
  $ git add .
  $ git mv one two three
  usage: git mv [options] <source>... <destination>
  [...]
>From the user's perspective, that makes no sense. They just
gave parameters that exactly match that usage!

This behavior dates back to the original C version of "git mv", which had a usage message like:

  usage: git mv (<source> <destination> | <source>...  <destination>)

This was slightly less confusing, because it at least mentions that there are two ways to invoke (but it still isn't clear why what the user provided doesn't work).

Instead, let's show an error message like:
  $ git mv one two three
  fatal: destination 'three' is not a directory

We could leave the usage message in place, too, but it doesn't actually help here. It contains no hints that there are two forms, nor that multi-file form requires that the endpoint be a directory. So it just becomes useless noise that distracts from the real error.

Signed-off-by: Jeff King <peff@peff.net>
---
 builtin/mv.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/builtin/mv.c b/builtin/mv.c
index 11abaf5..ae6c30c 100644
--- a/builtin/mv.c
+++ b/builtin/mv.c
@@ -94,7 +94,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
 		destination = copy_pathspec(dest_path[0], argv, argc, 1);
 	} else {
 		if (argc != 1)
-			usage_with_options(builtin_mv_usage, builtin_mv_options);
+			die("destination '%s' is not a directory", dest_path[0]);
 		destination = dest_path;
 	}
 
-- 
1.7.8.13.g74677
Previous: Jeff KingNext: Junio C Hamano
Message 8 of 16 in “git 1.7.7.3: BUG - please make git mv -f quiet”
  1. Jari AaltoDec 11, 2011
  2. 0/5 mixed bag of minor "git mv" fixesJeff King, Dec 12, 2011
  3. 1/5 docs: mention "-k" for both forms of "git mv"Jeff King, Dec 12, 2011
  4. Junio C HamanoDec 12, 2011
  5. 2/5 mv: honor --verbose flagJeff King, Dec 12, 2011
  6. Junio C HamanoDec 12, 2011
  7. Jeff KingDec 12, 2011
  8. 3/5 mv: make non-directory destination error more clearJeff King, Dec 12, 2011
  9. Junio C HamanoDec 12, 2011
  10. 4/5 mv: improve overwrite warningJeff King, Dec 12, 2011
  11. Junio C HamanoDec 12, 2011
  12. Jeff KingDec 12, 2011
  13. 4/5 mv: improve overwrite warningJeff King, Dec 12, 2011
  14. 5/5 mv: be quiet about overwritingJeff King, Dec 12, 2011
  15. 5/5 mv: be quiet about overwritingJeff King, Dec 12, 2011
  16. Junio C HamanoDec 12, 2011

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.