Skip to content

Commit

Permalink
git-mv: fix directory separator treatment on Windows
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Johannes Sixt authored and Junio C Hamano committed Jun 30, 2009
1 parent 6fac1b8 commit b8f2626
Showing 1 changed file with 3 additions and 7 deletions.
10 changes: 3 additions & 7 deletions builtin-mv.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down

0 comments on commit b8f2626

Please sign in to comment.