summaryrefslogtreecommitdiff
path: root/builtin-mv.c
diff options
context:
space:
mode:
authorJohannes Sixt <j6t@kdbg.org>2009-06-30 15:33:57 +0200
committerJunio C Hamano <gitster@pobox.com>2009-06-30 11:23:21 -0700
commitb8f262699f6c527b13ff95a322fafc0bfbc5a232 (patch)
treea83bb6f0560f27079b319044c329d20c13ef8f52 /builtin-mv.c
parent6fac1b83bdb9aee73363f93874ffaffd1bc3ad5c (diff)
downloadgit-b8f262699f6c527b13ff95a322fafc0bfbc5a232.tar.gz
git-mv: fix directory separator treatment on Windows
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> Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-mv.c')
-rw-r--r--builtin-mv.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/builtin-mv.c b/builtin-mv.c
index 8b81d4b51d..68f47384dc 100644
--- a/builtin-mv.c
+++ b/builtin-mv.c
@@ -24,14 +24,10 @@ static const char **copy_pathspec(const char *prefix, const char **pathspec,
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);
}