new os.isRelativeTo (#13212)
This commit is contained in:
parent
3e843ab335
commit
7356bc29b7
3 changed files with 26 additions and 0 deletions
|
|
@ -53,6 +53,8 @@
|
||||||
Eg: `echo ?.n.typ.kind`
|
Eg: `echo ?.n.typ.kind`
|
||||||
- Added `minIndex` and `maxIndex` to the `sequtils` module
|
- Added `minIndex` and `maxIndex` to the `sequtils` module
|
||||||
|
|
||||||
|
- Added `os.isRelativeTo` to tell whether a path is relative to another
|
||||||
|
|
||||||
## Library changes
|
## Library changes
|
||||||
|
|
||||||
- `asyncdispatch.drain` now properly takes into account `selector.hasPendingOperations`
|
- `asyncdispatch.drain` now properly takes into account `selector.hasPendingOperations`
|
||||||
|
|
|
||||||
|
|
@ -406,6 +406,18 @@ proc relativePath*(path, base: string; sep = DirSep): string {.
|
||||||
if not f.hasNext(path): break
|
if not f.hasNext(path): break
|
||||||
ff = f.next(path)
|
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 =
|
proc parentDirPos(path: string): int =
|
||||||
var q = 1
|
var q = 1
|
||||||
if len(path) >= 1 and path[len(path)-1] in {DirSep, AltSep}: q = 2
|
if len(path) >= 1 and path[len(path)-1] in {DirSep, AltSep}: q = 2
|
||||||
|
|
|
||||||
|
|
@ -382,3 +382,15 @@ block osenv:
|
||||||
doAssert existsEnv(dummyEnvVar) == false
|
doAssert existsEnv(dummyEnvVar) == false
|
||||||
delEnv(dummyEnvVar) # deleting an already deleted env var
|
delEnv(dummyEnvVar) # deleting an already deleted env var
|
||||||
doAssert existsEnv(dummyEnvVar) == false
|
doAssert existsEnv(dummyEnvVar) == false
|
||||||
|
|
||||||
|
block isRelativeTo:
|
||||||
|
doAssert isRelativeTo("/foo", "/")
|
||||||
|
doAssert isRelativeTo("/foo/bar", "/foo")
|
||||||
|
doAssert isRelativeTo("foo/bar", "foo")
|
||||||
|
doAssert isRelativeTo("/foo/bar.nim", "/foo/bar.nim")
|
||||||
|
doAssert isRelativeTo("./foo/", "foo")
|
||||||
|
doAssert isRelativeTo("foo", "./foo/")
|
||||||
|
doAssert isRelativeTo(".", ".")
|
||||||
|
doAssert isRelativeTo("foo/bar", ".")
|
||||||
|
doAssert not isRelativeTo("foo/bar.nims", "foo/bar.nim")
|
||||||
|
doAssert not isRelativeTo("/foo2", "/foo")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue