Last active
January 17, 2016 14:41
-
-
Save mingwandroid/4de33791da01278b5196 to your computer and use it in GitHub Desktop.
t0060-path-utils.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From fd11980f9b2d258cfa877b4bddebf81c7dd89eb8 Mon Sep 17 00:00:00 2001 | |
From: Ray Donnelly <[email protected]> | |
Date: Sat, 16 Jan 2016 16:25:34 +0000 | |
Subject: [PATCH] MSYS2: Fixes for respecting trailing slashes during path | |
conversion. | |
Allow '/' at end of path and prefixes in longest_ancestor_length | |
.. when new 'GIT_RUNNING_ANCESTOR_TEST' environment variable is set. | |
Unfortunately, there comes times that we run into semantic mismatches | |
between the Unix and the Windows worlds and this is one of those times. | |
This is a play to make more of the test-suite pass, but it is because | |
some of the assumptions about '/' don't hold true on Windows. | |
For a start, there isn't really a '/' on Windows since it doesn't obey | |
FHS; rather there's a bunch of drive letters. Instead Cygwin implements | |
a POSIX layer that obeys FHS above all of those drive letters and MSYS2 | |
takes all of that good stuff and adds a few of its own bits and pieces: | |
When MSYS2 calls native Windows software it converts things that look | |
like Unix paths to Windows paths, so when it sees '/' it converts it | |
to whereever MSYS2 was intalled (actually based on where msys-2.0.dll | |
is located). One of the rules of this path conversion is to respect | |
the existence or not of any trailing '/', so if there was one at the | |
end of the Unix path then there'll still be one at the end of the | |
Windows version. This also applies to the root, '/', a decision which | |
simplifies things (i.e. fixes bugs) a lot and is eminently sensible | |
(i.e. it makes simple path concatenation just work without needing to | |
check whether we need to insert an '/' in-between). | |
By applying the hack when _WIN32 is defined and GIT_RUNNING_ANCESTOR_TEST | |
is set, the chances of distrubing other things should be minimized. | |
Also, in t/t0060-path-utils.sh, rootoff must be adjusted by an extra 1 | |
due to '/' retaining it's trailing '/' post-conversion. | |
Signed-off-by: Ray Donnelly <[email protected]> | |
--- | |
path.c | 23 +++++++++++++++++++++-- | |
t/t0060-path-utils.sh | 3 ++- | |
test-path-utils.c | 1 + | |
3 files changed, 24 insertions(+), 3 deletions(-) | |
diff --git a/path.c b/path.c | |
index bbe1ef2..099be61 100644 | |
--- a/path.c | |
+++ b/path.c | |
@@ -1035,8 +1035,12 @@ int normalize_path_copy(char *dst, const char *src) | |
/* | |
* path = Canonical absolute path | |
* prefixes = string_list containing normalized, absolute paths without | |
- * trailing slashes (except for the root directory, which is denoted by "/"). | |
- * | |
+ * trailing slashes (except for the root directory, which is denoted by "/" | |
+ * .. except On MSYS2, where it is possible that 'root' paths from the | |
+ * msys2 shell's perspective appear due to MSYS2 POSIX to Windows path | |
+ * conversion rules. For example, "/" is often translated to "C:/msys64/" | |
+ * Briefly, one rule is that path conversion respects the state of trailing | |
+ * slashes.) | |
* Determines, for each path in prefixes, whether the "prefix" | |
* is an ancestor directory of path. Returns the length of the longest | |
* ancestor directory, excluding any trailing slashes, or -1 if no prefix | |
@@ -1053,6 +1057,13 @@ int longest_ancestor_length(const char *path, struct string_list *prefixes) | |
if (!strcmp(path, "/")) | |
return -1; | |
+#ifdef _WIN32 | |
+ if (path[strlen(path) - 1] == '/' && getenv("GIT_RUNNING_ANCESTOR_TEST")) | |
+ { | |
+ fprintf(stderr, "longest_ancestor_length: MSYS2 root detected in path %s\n", path); | |
+ return -1; | |
+ } | |
+#endif | |
for (i = 0; i < prefixes->nr; i++) { | |
const char *ceil = prefixes->items[i].string; | |
int len = strlen(ceil); | |
@@ -1061,6 +1072,14 @@ int longest_ancestor_length(const char *path, struct string_list *prefixes) | |
len = 0; /* root matches anything, with length 0 */ | |
else if (!strncmp(path, ceil, len) && path[len] == '/') | |
; /* match of length len */ | |
+#ifdef _WIN32 | |
+ else if (len > 1 && !strncmp(path, ceil, len - 1) && ceil[len - 1] == '/' && getenv("GIT_RUNNING_ANCESTOR_TEST")) | |
+ { | |
+ fprintf(stderr, "longest_ancestor_length: MSYS2 root detected in prefix[%d] %s\n", i, ceil); | |
+ ; /* MSYS2 prefix ended in /, path matched prefix[0 .. len - 1] */ | |
+ len--; | |
+ } | |
+#endif | |
else | |
continue; /* no match */ | |
diff --git a/t/t0060-path-utils.sh b/t/t0060-path-utils.sh | |
index 627ef85..ccb022e 100755 | |
--- a/t/t0060-path-utils.sh | |
+++ b/t/t0060-path-utils.sh | |
@@ -35,7 +35,7 @@ rootoff=$(test-path-utils normalize_path_copy / | wc -c) | |
if test $rootoff = 2; then | |
rootoff= # we are on Unix | |
else | |
- rootoff=$(($rootoff-1)) | |
+ rootoff=$(($rootoff-2)) | |
fi | |
ancestor() { | |
@@ -44,6 +44,7 @@ ancestor() { | |
if test -n "$rootoff" && test "x$expected" != x-1; then | |
expected=$(($expected+$rootoff)) | |
fi | |
+ GIT_RUNNING_ANCESTOR_TEST=yes \ | |
test_expect_success "longest ancestor: $1 $2 => $expected" \ | |
"actual=\$(test-path-utils longest_ancestor_length '$1' '$2') && | |
test \"\$actual\" = '$expected'" | |
diff --git a/test-path-utils.c b/test-path-utils.c | |
index c67bf65..e26f77b 100644 | |
--- a/test-path-utils.c | |
+++ b/test-path-utils.c | |
@@ -85,6 +85,7 @@ int main(int argc, char **argv) | |
*/ | |
if (normalize_path_copy(path, path)) | |
die("Path \"%s\" could not be normalized", argv[2]); | |
+ fprintf(stderr, "normalize_path_copy returned %s\n", path); | |
string_list_split(&ceiling_dirs, argv[3], PATH_SEP, -1); | |
filter_string_list(&ceiling_dirs, 0, | |
normalize_ceiling_entry, NULL); | |
-- | |
2.7.0 | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ok 1 - normalize path: => | |
ok 2 - normalize path: . => | |
ok 3 - normalize path: ./ => | |
ok 4 - normalize path: ./. => | |
ok 5 - normalize path: ./.. => ++failed++ | |
ok 6 - normalize path: ../. => ++failed++ | |
ok 7 - normalize path: ./../.// => ++failed++ | |
ok 8 - normalize path: dir/.. => | |
ok 9 - normalize path: dir/sub/../.. => | |
ok 10 - normalize path: dir/sub/../../.. => ++failed++ | |
ok 11 - normalize path: dir => dir | |
ok 12 - normalize path: dir// => dir/ | |
ok 13 - normalize path: ./dir => dir | |
ok 14 - normalize path: dir/. => dir/ | |
ok 15 - normalize path: dir///./ => dir/ | |
ok 16 - normalize path: dir//sub/.. => dir/ | |
ok 17 - normalize path: dir/sub/../ => dir/ | |
ok 18 - normalize path: dir/sub/../. => dir/ | |
ok 19 - normalize path: dir/s1/../s2/ => dir/s2/ | |
ok 20 - normalize path: d1/s1///s2/..//../s3/ => d1/s3/ | |
ok 21 - normalize path: d1/s1//../s2/../../d2 => d2 | |
ok 22 - normalize path: d1/.../d2 => d1/.../d2 | |
ok 23 - normalize path: d1/..././../d2 => d1/d2 | |
ok 24 - normalize path: / => / | |
not ok 25 - normalize path: // => / | |
# test "$(test-path-utils normalize_path_copy '//')" = 'E:/git-sdk-64' | |
not ok 26 - normalize path: /// => / | |
# test "$(test-path-utils normalize_path_copy '///')" = 'E:/git-sdk-64' | |
ok 27 - normalize path: /. => / | |
ok 28 - normalize path: /./ => / | |
not ok 29 - normalize path: /./.. => ++failed++ | |
# test "$(test-path-utils normalize_path_copy '/./..')" = '++failed++' | |
ok 30 - normalize path: /../. => ++failed++ | |
not ok 31 - normalize path: /./../.// => ++failed++ | |
# test "$(test-path-utils normalize_path_copy '/./.././/')" = '++failed++' | |
not ok 32 - normalize path: /dir/.. => / | |
# test "$(test-path-utils normalize_path_copy '/dir/..')" = 'E:/git-sdk-64' | |
not ok 33 - normalize path: /dir/sub/../.. => / | |
# test "$(test-path-utils normalize_path_copy '/dir/sub/../..')" = 'E:/git-sdk-64' | |
ok 34 - normalize path: /dir/sub/../../.. => ++failed++ | |
ok 35 - normalize path: /dir => /dir | |
ok 36 - normalize path: /dir// => /dir/ | |
ok 37 - normalize path: /./dir => /dir | |
ok 38 - normalize path: /dir/. => /dir/ | |
ok 39 - normalize path: /dir///./ => /dir/ | |
ok 40 - normalize path: /dir//sub/.. => /dir/ | |
ok 41 - normalize path: /dir/sub/../ => /dir/ | |
ok 42 - normalize path: //dir/sub/../. => /dir/ | |
ok 43 - normalize path: /dir/s1/../s2/ => /dir/s2/ | |
ok 44 - normalize path: /d1/s1///s2/..//../s3/ => /d1/s3/ | |
ok 45 - normalize path: /d1/s1//../s2/../../d2 => /d2 | |
ok 46 - normalize path: /d1/.../d2 => /d1/.../d2 | |
ok 47 - normalize path: /d1/..././../d2 => /d1/d2 | |
ok 48 - longest ancestor: / / => -1 | |
ok 49 - longest ancestor: /foo / => 13 | |
ok 50 - longest ancestor: /foo /fo => -1 | |
ok 51 - longest ancestor: /foo /foo => -1 | |
ok 52 - longest ancestor: /foo /bar => -1 | |
ok 53 - longest ancestor: /foo /foo/bar => -1 | |
ok 54 - longest ancestor: /foo /foo:/bar => -1 | |
ok 55 - longest ancestor: /foo /:/foo:/bar => 13 | |
ok 56 - longest ancestor: /foo /foo:/:/bar => 13 | |
ok 57 - longest ancestor: /foo /:/bar:/foo => 13 | |
ok 58 - longest ancestor: /foo/bar / => 13 | |
ok 59 - longest ancestor: /foo/bar /fo => -1 | |
ok 60 - longest ancestor: /foo/bar /foo => 17 | |
ok 61 - longest ancestor: /foo/bar /foo/ba => -1 | |
ok 62 - longest ancestor: /foo/bar /:/fo => 13 | |
ok 63 - longest ancestor: /foo/bar /foo:/foo/ba => 17 | |
ok 64 - longest ancestor: /foo/bar /bar => -1 | |
ok 65 - longest ancestor: /foo/bar /fo => -1 | |
ok 66 - longest ancestor: /foo/bar /foo:/bar => 17 | |
ok 67 - longest ancestor: /foo/bar /:/foo:/bar => 17 | |
ok 68 - longest ancestor: /foo/bar /foo:/:/bar => 17 | |
ok 69 - longest ancestor: /foo/bar /:/bar:/fo => 13 | |
ok 70 - longest ancestor: /foo/bar /:/bar => 13 | |
ok 71 - longest ancestor: /foo/bar /foo => 17 | |
ok 72 - longest ancestor: /foo/bar /foo:/bar => 17 | |
ok 73 - longest ancestor: /foo/bar /bar => -1 | |
ok 74 - strip_path_suffix | |
ok 75 - absolute path rejects the empty string | |
ok 76 - real path rejects the empty string | |
not ok 77 - real path works on absolute paths 1 | |
# | |
# nopath="hopefully-absent-path" && | |
# test "/" = "$(test-path-utils real_path "/")" && | |
# test "/$nopath" = "$(test-path-utils real_path "/$nopath")" | |
# | |
not ok 78 - real path works on absolute paths 2 | |
# | |
# nopath="hopefully-absent-path" && | |
# # Find an existing top-level directory for the remaining tests: | |
# d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") && | |
# test "$d" = "$(test-path-utils real_path "$d")" && | |
# test "$d/$nopath" = "$(test-path-utils real_path "$d/$nopath")" | |
# | |
not ok 79 - real path removes extra leading slashes | |
# | |
# nopath="hopefully-absent-path" && | |
# test "/" = "$(test-path-utils real_path "///")" && | |
# test "/$nopath" = "$(test-path-utils real_path "///$nopath")" && | |
# # Find an existing top-level directory for the remaining tests: | |
# d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") && | |
# test "$d" = "$(test-path-utils real_path "//$d")" && | |
# test "$d/$nopath" = "$(test-path-utils real_path "//$d/$nopath")" | |
# | |
not ok 80 - real path removes other extra slashes | |
# | |
# nopath="hopefully-absent-path" && | |
# # Find an existing top-level directory for the remaining tests: | |
# d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") && | |
# test "$d" = "$(test-path-utils real_path "$d///")" && | |
# test "$d/$nopath" = "$(test-path-utils real_path "$d///$nopath")" | |
# | |
ok 81 # skip real path works on symlinks (missing SYMLINKS) | |
ok 82 # skip prefix_path works with absolute paths to work tree symlinks (missing SYMLINKS) | |
ok 83 - prefix_path works with only absolute path to work tree | |
ok 84 - prefix_path rejects absolute path to dir with same beginning as work tree | |
ok 85 # skip prefix_path works with absolute path to a symlink to work tree having same beginning as work tree (missing SYMLINKS) | |
ok 86 - relative path: /foo/a/b/c/ /foo/a/b/ => c/ | |
ok 87 - relative path: /foo/a/b/c/ /foo/a/b => c/ | |
not ok 88 - relative path: /foo/a//b//c/ ///foo/a/b// => c/ | |
# test "$(test-path-utils relative_path '/foo/a//b//c/' '///foo/a/b//')" = 'c/' | |
ok 89 - relative path: /foo/a/b /foo/a/b => ./ | |
ok 90 - relative path: /foo/a/b/ /foo/a/b => ./ | |
ok 91 - relative path: /foo/a /foo/a/b => ../ | |
ok 92 - relative path: / /foo/a/b/ => ../../../ | |
ok 93 - relative path: /foo/a/c /foo/a/b/ => ../c | |
ok 94 - relative path: /foo/a/c /foo/a/b => ../c | |
ok 95 - relative path: /foo/x/y /foo/a/b/ => ../../x/y | |
ok 96 - relative path: /foo/a/b <empty> => /foo/a/b | |
ok 97 - relative path: /foo/a/b <null> => /foo/a/b | |
ok 98 - relative path: foo/a/b/c/ foo/a/b/ => c/ | |
ok 99 - relative path: foo/a/b/c/ foo/a/b => c/ | |
ok 100 - relative path: foo/a/b//c foo/a//b => c | |
ok 101 - relative path: foo/a/b/ foo/a/b/ => ./ | |
ok 102 - relative path: foo/a/b/ foo/a/b => ./ | |
ok 103 - relative path: foo/a foo/a/b => ../ | |
ok 104 - relative path: foo/x/y foo/a/b => ../../x/y | |
ok 105 - relative path: foo/a/c foo/a/b => ../c | |
ok 106 - relative path: foo/a/b /foo/x/y => foo/a/b | |
ok 107 - relative path: /foo/a/b foo/x/y => /foo/a/b | |
ok 108 # skip relative path: d:/a/b D:/a/c => ../b (missing MINGW) | |
ok 109 # skip relative path: C:/a/b D:/a/c => C:/a/b (missing MINGW) | |
ok 110 - relative path: foo/a/b <empty> => foo/a/b | |
ok 111 - relative path: foo/a/b <null> => foo/a/b | |
ok 112 - relative path: <empty> /foo/a/b => ./ | |
ok 113 - relative path: <empty> <empty> => ./ | |
ok 114 - relative path: <empty> <null> => ./ | |
ok 115 - relative path: <null> <empty> => ./ | |
ok 116 - relative path: <null> <null> => ./ | |
ok 117 - relative path: <null> /foo/a/b => ./ | |
ok 118 - git-path A=B info/grafts => .git/info/grafts | |
ok 119 - git-path GIT_GRAFT_FILE=foo info/grafts => foo | |
ok 120 - git-path GIT_GRAFT_FILE=foo info/////grafts => foo | |
ok 121 - git-path GIT_INDEX_FILE=foo index => foo | |
ok 122 - git-path GIT_INDEX_FILE=foo index/foo => .git/index/foo | |
ok 123 - git-path GIT_INDEX_FILE=foo index2 => .git/index2 | |
ok 124 - setup fake objects directory foo | |
ok 125 - git-path GIT_OBJECT_DIRECTORY=foo objects => foo | |
ok 126 - git-path GIT_OBJECT_DIRECTORY=foo objects/foo => foo/foo | |
ok 127 - git-path GIT_OBJECT_DIRECTORY=foo objects2 => .git/objects2 | |
ok 128 - setup common repository | |
ok 129 - git-path GIT_COMMON_DIR=bar index => .git/index | |
ok 130 - git-path GIT_COMMON_DIR=bar HEAD => .git/HEAD | |
ok 131 - git-path GIT_COMMON_DIR=bar logs/HEAD => .git/logs/HEAD | |
ok 132 - git-path GIT_COMMON_DIR=bar logs/refs/bisect/foo => .git/logs/refs/bisect/foo | |
ok 133 - git-path GIT_COMMON_DIR=bar logs/refs/bisec/foo => bar/logs/refs/bisec/foo | |
ok 134 - git-path GIT_COMMON_DIR=bar logs/refs/bisec => bar/logs/refs/bisec | |
ok 135 - git-path GIT_COMMON_DIR=bar logs/refs/bisectfoo => bar/logs/refs/bisectfoo | |
ok 136 - git-path GIT_COMMON_DIR=bar objects => bar/objects | |
ok 137 - git-path GIT_COMMON_DIR=bar objects/bar => bar/objects/bar | |
ok 138 - git-path GIT_COMMON_DIR=bar info/exclude => bar/info/exclude | |
ok 139 - git-path GIT_COMMON_DIR=bar info/grafts => bar/info/grafts | |
ok 140 - git-path GIT_COMMON_DIR=bar info/sparse-checkout => .git/info/sparse-checkout | |
ok 141 - git-path GIT_COMMON_DIR=bar info//sparse-checkout => .git/info//sparse-checkout | |
ok 142 - git-path GIT_COMMON_DIR=bar remotes/bar => bar/remotes/bar | |
ok 143 - git-path GIT_COMMON_DIR=bar branches/bar => bar/branches/bar | |
ok 144 - git-path GIT_COMMON_DIR=bar logs/refs/heads/master => bar/logs/refs/heads/master | |
ok 145 - git-path GIT_COMMON_DIR=bar refs/heads/master => bar/refs/heads/master | |
ok 146 - git-path GIT_COMMON_DIR=bar refs/bisect/foo => .git/refs/bisect/foo | |
ok 147 - git-path GIT_COMMON_DIR=bar hooks/me => bar/hooks/me | |
ok 148 - git-path GIT_COMMON_DIR=bar config => bar/config | |
ok 149 - git-path GIT_COMMON_DIR=bar packed-refs => bar/packed-refs | |
ok 150 - git-path GIT_COMMON_DIR=bar shallow => bar/shallow | |
# failed 11 among 150 test(s) | |
1..150 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ok 1 - normalize path: => | |
ok 2 - normalize path: . => | |
ok 3 - normalize path: ./ => | |
ok 4 - normalize path: ./. => | |
ok 5 - normalize path: ./.. => ++failed++ | |
ok 6 - normalize path: ../. => ++failed++ | |
ok 7 - normalize path: ./../.// => ++failed++ | |
ok 8 - normalize path: dir/.. => | |
ok 9 - normalize path: dir/sub/../.. => | |
ok 10 - normalize path: dir/sub/../../.. => ++failed++ | |
ok 11 - normalize path: dir => dir | |
ok 12 - normalize path: dir// => dir/ | |
ok 13 - normalize path: ./dir => dir | |
ok 14 - normalize path: dir/. => dir/ | |
ok 15 - normalize path: dir///./ => dir/ | |
ok 16 - normalize path: dir//sub/.. => dir/ | |
ok 17 - normalize path: dir/sub/../ => dir/ | |
ok 18 - normalize path: dir/sub/../. => dir/ | |
ok 19 - normalize path: dir/s1/../s2/ => dir/s2/ | |
ok 20 - normalize path: d1/s1///s2/..//../s3/ => d1/s3/ | |
ok 21 - normalize path: d1/s1//../s2/../../d2 => d2 | |
ok 22 - normalize path: d1/.../d2 => d1/.../d2 | |
ok 23 - normalize path: d1/..././../d2 => d1/d2 | |
ok 24 - normalize path: / => / | |
not ok 25 - normalize path: // => / | |
# test "$(test-path-utils normalize_path_copy '//')" = 'E:/msys64/' | |
not ok 26 - normalize path: /// => / | |
# test "$(test-path-utils normalize_path_copy '///')" = 'E:/msys64/' | |
ok 27 - normalize path: /. => / | |
ok 28 - normalize path: /./ => / | |
not ok 29 - normalize path: /./.. => ++failed++ | |
# test "$(test-path-utils normalize_path_copy '/./..')" = '++failed++' | |
ok 30 - normalize path: /../. => ++failed++ | |
not ok 31 - normalize path: /./../.// => ++failed++ | |
# test "$(test-path-utils normalize_path_copy '/./.././/')" = '++failed++' | |
ok 32 - normalize path: /dir/.. => / | |
ok 33 - normalize path: /dir/sub/../.. => / | |
not ok 34 - normalize path: /dir/sub/../../.. => ++failed++ | |
# test "$(test-path-utils normalize_path_copy '/dir/sub/../../..')" = '++failed++' | |
ok 35 - normalize path: /dir => /dir | |
ok 36 - normalize path: /dir// => /dir/ | |
ok 37 - normalize path: /./dir => /dir | |
ok 38 - normalize path: /dir/. => /dir/ | |
ok 39 - normalize path: /dir///./ => /dir/ | |
ok 40 - normalize path: /dir//sub/.. => /dir/ | |
ok 41 - normalize path: /dir/sub/../ => /dir/ | |
not ok 42 - normalize path: //dir/sub/../. => /dir/ | |
# test "$(test-path-utils normalize_path_copy '//dir/sub/../.')" = 'E:/msys64/dir/' | |
ok 43 - normalize path: /dir/s1/../s2/ => /dir/s2/ | |
ok 44 - normalize path: /d1/s1///s2/..//../s3/ => /d1/s3/ | |
ok 45 - normalize path: /d1/s1//../s2/../../d2 => /d2 | |
ok 46 - normalize path: /d1/.../d2 => /d1/.../d2 | |
ok 47 - normalize path: /d1/..././../d2 => /d1/d2 | |
ok 48 - longest ancestor: / / => -1 | |
ok 49 - longest ancestor: /foo / => 9 | |
ok 50 - longest ancestor: /foo /fo => -1 | |
ok 51 - longest ancestor: /foo /foo => -1 | |
ok 52 - longest ancestor: /foo /bar => -1 | |
ok 53 - longest ancestor: /foo /foo/bar => -1 | |
ok 54 - longest ancestor: /foo /foo:/bar => -1 | |
ok 55 - longest ancestor: /foo /:/foo:/bar => 9 | |
ok 56 - longest ancestor: /foo /foo:/:/bar => 9 | |
ok 57 - longest ancestor: /foo /:/bar:/foo => 9 | |
ok 58 - longest ancestor: /foo/bar / => 9 | |
ok 59 - longest ancestor: /foo/bar /fo => -1 | |
ok 60 - longest ancestor: /foo/bar /foo => 13 | |
ok 61 - longest ancestor: /foo/bar /foo/ba => -1 | |
ok 62 - longest ancestor: /foo/bar /:/fo => 9 | |
ok 63 - longest ancestor: /foo/bar /foo:/foo/ba => 13 | |
ok 64 - longest ancestor: /foo/bar /bar => -1 | |
ok 65 - longest ancestor: /foo/bar /fo => -1 | |
ok 66 - longest ancestor: /foo/bar /foo:/bar => 13 | |
ok 67 - longest ancestor: /foo/bar /:/foo:/bar => 13 | |
ok 68 - longest ancestor: /foo/bar /foo:/:/bar => 13 | |
ok 69 - longest ancestor: /foo/bar /:/bar:/fo => 9 | |
ok 70 - longest ancestor: /foo/bar /:/bar => 9 | |
ok 71 - longest ancestor: /foo/bar /foo => 13 | |
ok 72 - longest ancestor: /foo/bar /foo:/bar => 13 | |
ok 73 - longest ancestor: /foo/bar /bar => -1 | |
ok 74 - strip_path_suffix | |
ok 75 - absolute path rejects the empty string | |
ok 76 - real path rejects the empty string | |
not ok 77 - real path works on absolute paths 1 | |
# | |
# nopath="hopefully-absent-path" && | |
# test "/" = "$(test-path-utils real_path "/")" && | |
# test "/$nopath" = "$(test-path-utils real_path "/$nopath")" | |
# | |
not ok 78 - real path works on absolute paths 2 | |
# | |
# nopath="hopefully-absent-path" && | |
# # Find an existing top-level directory for the remaining tests: | |
# d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") && | |
# test "$d" = "$(test-path-utils real_path "$d")" && | |
# test "$d/$nopath" = "$(test-path-utils real_path "$d/$nopath")" | |
# | |
not ok 79 - real path removes extra leading slashes | |
# | |
# nopath="hopefully-absent-path" && | |
# test "/" = "$(test-path-utils real_path "///")" && | |
# test "/$nopath" = "$(test-path-utils real_path "///$nopath")" && | |
# # Find an existing top-level directory for the remaining tests: | |
# d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") && | |
# test "$d" = "$(test-path-utils real_path "//$d")" && | |
# test "$d/$nopath" = "$(test-path-utils real_path "//$d/$nopath")" | |
# | |
not ok 80 - real path removes other extra slashes | |
# | |
# nopath="hopefully-absent-path" && | |
# # Find an existing top-level directory for the remaining tests: | |
# d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") && | |
# test "$d" = "$(test-path-utils real_path "$d///")" && | |
# test "$d/$nopath" = "$(test-path-utils real_path "$d///$nopath")" | |
# | |
ok 81 # skip real path works on symlinks (missing SYMLINKS) | |
ok 82 # skip prefix_path works with absolute paths to work tree symlinks (missing SYMLINKS) | |
ok 83 - prefix_path works with only absolute path to work tree | |
ok 84 - prefix_path rejects absolute path to dir with same beginning as work tree | |
ok 85 # skip prefix_path works with absolute path to a symlink to work tree having same beginning as work tree (missing SYMLINKS) | |
ok 86 - relative path: /foo/a/b/c/ /foo/a/b/ => c/ | |
ok 87 - relative path: /foo/a/b/c/ /foo/a/b => c/ | |
not ok 88 - relative path: /foo/a//b//c/ ///foo/a/b// => c/ | |
# test "$(test-path-utils relative_path '/foo/a//b//c/' '///foo/a/b//')" = 'c/' | |
ok 89 - relative path: /foo/a/b /foo/a/b => ./ | |
ok 90 - relative path: /foo/a/b/ /foo/a/b => ./ | |
ok 91 - relative path: /foo/a /foo/a/b => ../ | |
ok 92 - relative path: / /foo/a/b/ => ../../../ | |
ok 93 - relative path: /foo/a/c /foo/a/b/ => ../c | |
ok 94 - relative path: /foo/a/c /foo/a/b => ../c | |
ok 95 - relative path: /foo/x/y /foo/a/b/ => ../../x/y | |
ok 96 - relative path: /foo/a/b <empty> => /foo/a/b | |
ok 97 - relative path: /foo/a/b <null> => /foo/a/b | |
ok 98 - relative path: foo/a/b/c/ foo/a/b/ => c/ | |
ok 99 - relative path: foo/a/b/c/ foo/a/b => c/ | |
ok 100 - relative path: foo/a/b//c foo/a//b => c | |
ok 101 - relative path: foo/a/b/ foo/a/b/ => ./ | |
ok 102 - relative path: foo/a/b/ foo/a/b => ./ | |
ok 103 - relative path: foo/a foo/a/b => ../ | |
ok 104 - relative path: foo/x/y foo/a/b => ../../x/y | |
ok 105 - relative path: foo/a/c foo/a/b => ../c | |
ok 106 - relative path: foo/a/b /foo/x/y => foo/a/b | |
ok 107 - relative path: /foo/a/b foo/x/y => /foo/a/b | |
ok 108 # skip relative path: d:/a/b D:/a/c => ../b (missing MINGW) | |
ok 109 # skip relative path: C:/a/b D:/a/c => C:/a/b (missing MINGW) | |
ok 110 - relative path: foo/a/b <empty> => foo/a/b | |
ok 111 - relative path: foo/a/b <null> => foo/a/b | |
ok 112 - relative path: <empty> /foo/a/b => ./ | |
ok 113 - relative path: <empty> <empty> => ./ | |
ok 114 - relative path: <empty> <null> => ./ | |
ok 115 - relative path: <null> <empty> => ./ | |
ok 116 - relative path: <null> <null> => ./ | |
ok 117 - relative path: <null> /foo/a/b => ./ | |
ok 118 - git-path A=B info/grafts => .git/info/grafts | |
ok 119 - git-path GIT_GRAFT_FILE=foo info/grafts => foo | |
ok 120 - git-path GIT_GRAFT_FILE=foo info/////grafts => foo | |
ok 121 - git-path GIT_INDEX_FILE=foo index => foo | |
ok 122 - git-path GIT_INDEX_FILE=foo index/foo => .git/index/foo | |
ok 123 - git-path GIT_INDEX_FILE=foo index2 => .git/index2 | |
ok 124 - setup fake objects directory foo | |
ok 125 - git-path GIT_OBJECT_DIRECTORY=foo objects => foo | |
ok 126 - git-path GIT_OBJECT_DIRECTORY=foo objects/foo => foo/foo | |
ok 127 - git-path GIT_OBJECT_DIRECTORY=foo objects2 => .git/objects2 | |
ok 128 - setup common repository | |
ok 129 - git-path GIT_COMMON_DIR=bar index => .git/index | |
ok 130 - git-path GIT_COMMON_DIR=bar HEAD => .git/HEAD | |
ok 131 - git-path GIT_COMMON_DIR=bar logs/HEAD => .git/logs/HEAD | |
ok 132 - git-path GIT_COMMON_DIR=bar logs/refs/bisect/foo => .git/logs/refs/bisect/foo | |
ok 133 - git-path GIT_COMMON_DIR=bar logs/refs/bisec/foo => bar/logs/refs/bisec/foo | |
ok 134 - git-path GIT_COMMON_DIR=bar logs/refs/bisec => bar/logs/refs/bisec | |
ok 135 - git-path GIT_COMMON_DIR=bar logs/refs/bisectfoo => bar/logs/refs/bisectfoo | |
ok 136 - git-path GIT_COMMON_DIR=bar objects => bar/objects | |
ok 137 - git-path GIT_COMMON_DIR=bar objects/bar => bar/objects/bar | |
ok 138 - git-path GIT_COMMON_DIR=bar info/exclude => bar/info/exclude | |
ok 139 - git-path GIT_COMMON_DIR=bar info/grafts => bar/info/grafts | |
ok 140 - git-path GIT_COMMON_DIR=bar info/sparse-checkout => .git/info/sparse-checkout | |
ok 141 - git-path GIT_COMMON_DIR=bar info//sparse-checkout => .git/info//sparse-checkout | |
ok 142 - git-path GIT_COMMON_DIR=bar remotes/bar => bar/remotes/bar | |
ok 143 - git-path GIT_COMMON_DIR=bar branches/bar => bar/branches/bar | |
ok 144 - git-path GIT_COMMON_DIR=bar logs/refs/heads/master => bar/logs/refs/heads/master | |
ok 145 - git-path GIT_COMMON_DIR=bar refs/heads/master => bar/refs/heads/master | |
ok 146 - git-path GIT_COMMON_DIR=bar refs/bisect/foo => .git/refs/bisect/foo | |
ok 147 - git-path GIT_COMMON_DIR=bar hooks/me => bar/hooks/me | |
ok 148 - git-path GIT_COMMON_DIR=bar config => bar/config | |
ok 149 - git-path GIT_COMMON_DIR=bar packed-refs => bar/packed-refs | |
ok 150 - git-path GIT_COMMON_DIR=bar shallow => bar/shallow | |
# failed 11 among 150 test(s) | |
1..150 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment