new os.isRelativeTo (#13212)

This commit is contained in:
Timothee Cour 2020-01-22 15:45:16 -08:00 • committed by Andreas Rumpf
commit 7356bc29b7
3 changed files with 26 additions and 0 deletions

View file

@ -406,6 +406,18 @@ proc relativePath*(path, base: string; sep = DirSep): string {.
if not f.hasNext(path): break
ff = f.next(path)
proc isRelativeTo*(path: string, base: string): bool {.since: (1, 1).} =
## Returns true if `path` is relative to `base`.
runnableExamples:
doAssert isRelativeTo("./foo//bar", "foo")
doAssert isRelativeTo("foo/bar", ".")
doAssert isRelativeTo("/foo/bar.nim", "/foo/bar.nim")
doAssert not isRelativeTo("foo/bar.nims", "foo/bar.nim")
let path = path.normalizePath
let base = base.normalizePath
let ret = relativePath(path, base)
result = path.len > 0 and not ret.startsWith ".."
proc parentDirPos(path: string): int =
var q = 1
if len(path) >= 1 and path[len(path)-1] in {DirSep, AltSep}: q = 2