test-path-utils.c: remove incorrect assumption

In normalize_ceiling_entry(), we test that normalized paths end with
slash, *unless* the path to be normalized was already the root
directory.

However, normalize_path_copy() does not even enforce this condition.

Even worse: on Windows, the root directory gets translated into a
Windows directory by the Bash before being passed to `git.exe` (or
`test-path-utils.exe`), which means that we cannot even know whether
the path that was passed to us was the root directory to begin with.

This issue has already caused endless hours of trying to "fix" the
MSYS2 runtime, only to break other things due to MSYS2 ensuring that
the converted path maintains the same state as the input path with
respect to any final '/'.

So let's just forget about this test. It is non-essential to Git's
operation, anyway.

Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Ray Donnelly <mingw.android@gmail.com>
This commit is contained in:
Ray Donnelly 2015-10-01 20:04:17 +01:00 committed by Junio C Hamano
parent 22f698cb18
commit b2a7123b99
2 changed files with 5 additions and 2 deletions

5
path.c
View File

@ -676,6 +676,11 @@ const char *remove_leading_path(const char *in, const char *prefix)
* normalized, any time "../" eats up to the prefix_len part, * normalized, any time "../" eats up to the prefix_len part,
* prefix_len is reduced. In the end prefix_len is the remaining * prefix_len is reduced. In the end prefix_len is the remaining
* prefix that has not been overridden by user pathspec. * prefix that has not been overridden by user pathspec.
*
* NEEDSWORK: This function doesn't perform normalization w.r.t. trailing '/'.
* For everything but the root folder itself, the normalized path should not
* end with a '/', then the callers need to be fixed up accordingly.
*
*/ */
int normalize_path_copy_len(char *dst, const char *src, int *prefix_len) int normalize_path_copy_len(char *dst, const char *src, int *prefix_len)
{ {

View File

@ -21,8 +21,6 @@ static int normalize_ceiling_entry(struct string_list_item *item, void *unused)
if (normalize_path_copy(buf, ceil) < 0) if (normalize_path_copy(buf, ceil) < 0)
die("Path \"%s\" could not be normalized", ceil); die("Path \"%s\" could not be normalized", ceil);
len = strlen(buf); len = strlen(buf);
if (len > 1 && buf[len-1] == '/')
die("Normalized path \"%s\" ended with slash", buf);
free(item->string); free(item->string);
item->string = xstrdup(buf); item->string = xstrdup(buf);
return 1; return 1;