fixes joinPath regressions
This commit is contained in:
parent
5d34dec97d
commit
5b39c7aca9
3 changed files with 15 additions and 2 deletions
|
|
@ -105,7 +105,10 @@ proc joinPath*(head, tail: string): string {.
|
||||||
result = newStringOfCap(head.len + tail.len)
|
result = newStringOfCap(head.len + tail.len)
|
||||||
var state = 0
|
var state = 0
|
||||||
addNormalizePath(head, result, state, DirSep)
|
addNormalizePath(head, result, state, DirSep)
|
||||||
addNormalizePath(tail, result, state, DirSep)
|
if tail.len == 0:
|
||||||
|
result.add DirSep
|
||||||
|
else:
|
||||||
|
addNormalizePath(tail, result, state, DirSep)
|
||||||
when false:
|
when false:
|
||||||
if len(head) == 0:
|
if len(head) == 0:
|
||||||
result = tail
|
result = tail
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,12 @@ proc addNormalizePath*(x: string; result: var string; state: var int; dirSep = D
|
||||||
|
|
||||||
# state: 0th bit set if isAbsolute path. Other bits count
|
# state: 0th bit set if isAbsolute path. Other bits count
|
||||||
# the number of path components.
|
# the number of path components.
|
||||||
for b in dirs(x):
|
var it: PathIter
|
||||||
|
it.notFirst = (state shr 1) > 0
|
||||||
|
if it.notFirst:
|
||||||
|
while it.i < x.len and x[it.i] in {DirSep, AltSep}: inc it.i
|
||||||
|
while hasNext(it, x):
|
||||||
|
let b = next(it, x)
|
||||||
if (state shr 1 == 0) and isSlash(x, b):
|
if (state shr 1 == 0) and isSlash(x, b):
|
||||||
result.add dirSep
|
result.add dirSep
|
||||||
state = state or 1
|
state = state or 1
|
||||||
|
|
|
||||||
|
|
@ -92,3 +92,8 @@ doAssert relativePath("/Users///me/bar//z.nim", "//Users/", '/') == "me/bar/z.ni
|
||||||
doAssert relativePath("/Users/me/bar/z.nim", "/Users/me", '/') == "bar/z.nim"
|
doAssert relativePath("/Users/me/bar/z.nim", "/Users/me", '/') == "bar/z.nim"
|
||||||
doAssert relativePath("", "/users/moo", '/') == ""
|
doAssert relativePath("", "/users/moo", '/') == ""
|
||||||
doAssert relativePath("foo", "", '/') == "foo"
|
doAssert relativePath("foo", "", '/') == "foo"
|
||||||
|
|
||||||
|
doAssert joinPath("usr", "") == unixToNativePath"usr/"
|
||||||
|
doAssert joinPath("", "lib") == "lib"
|
||||||
|
doAssert joinPath("", "/lib") == unixToNativePath"/lib"
|
||||||
|
doAssert joinPath("usr/", "/lib") == unixToNativePath"usr/lib"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue