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

[PATCH] git-mv: fix directory separator treatment on Windows

From
Johannes Sixt <j.sixt@viscovery.net>
Date
Jun 30, 2009, 13:33 UTC
Message-ID
<4A4A1445.6090704@viscovery.net>
From: Johannes Sixt <j6t@kdbg.org>
The following invocations did not work as expected on Windows:
    git mv foo\bar dest
    git mv foo\ dest
The first command was interpreted as
    git mv foo/bar dest/foo/bar

because the Windows style directory separator was not obeyed when the basename of 'foo\bar' was computed.

The second command failed because the Windows style directory separator was not removed from the source directory, whereupon the lookup of the directory in the index failed.

This fixes both issues by using is_dir_sep() and basename().
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
---
 builtin-mv.c |   10 +++-------
 1 files changed, 3 insertions(+), 7 deletions(-)
diff --git a/builtin-mv.c b/builtin-mv.c
index 8b81d4b..68f4738 100644
--- a/builtin-mv.c
+++ b/builtin-mv.c
@@ -24,14 +24,10 @@ static const char **copy_pathspec(const char *prefix,
 	result[count] = NULL;
 	for (i = 0; i < count; i++) {
 		int length = strlen(result[i]);
-		if (length > 0 && result[i][length - 1] == '/') {
+		if (length > 0 && is_dir_sep(result[i][length - 1]))
 			result[i] = xmemdupz(result[i], length - 1);
-		}
-		if (base_name) {
-			const char *last_slash = strrchr(result[i], '/');
-			if (last_slash)
-				result[i] = last_slash + 1;
-		}
+		if (base_name)
+			result[i] = basename((char *)result[i]);
 	}
 	return get_pathspec(prefix, result);
 }
-- 
1.6.3.3.1337.g9661167.dirty
Next: Johannes Schindelin
Message 1 of 2 in “git-mv: fix directory separator treatment on Windows”
  1. git-mv: fix directory separator treatment on WindowsJohannes Sixt, Jun 30, 2009
  2. Johannes SchindelinJun 30, 2009

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.