os: add overload copyFile*(source, dest: string, isDir = false) (#15537)
* os: add overload copyFile*(source, dest: string, isDir = false) * renamed to copyFileToDir
This commit is contained in:
parent
992952d868
commit
3eac9b2344
3 changed files with 27 additions and 1 deletions
|
|
@ -209,6 +209,7 @@
|
||||||
- Added `progressInterval` argument to `asyncftpclient.newAsyncFtpClient` to control the interval
|
- Added `progressInterval` argument to `asyncftpclient.newAsyncFtpClient` to control the interval
|
||||||
at which progress callbacks are called.
|
at which progress callbacks are called.
|
||||||
|
|
||||||
|
- Added `os.copyFileToDir`
|
||||||
|
|
||||||
## Language changes
|
## Language changes
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1682,7 +1682,7 @@ proc setFilePermissions*(filename: string, permissions: set[FilePermission]) {.
|
||||||
|
|
||||||
proc copyFile*(source, dest: string) {.rtl, extern: "nos$1",
|
proc copyFile*(source, dest: string) {.rtl, extern: "nos$1",
|
||||||
tags: [ReadIOEffect, WriteIOEffect], noWeirdTarget.} =
|
tags: [ReadIOEffect, WriteIOEffect], noWeirdTarget.} =
|
||||||
## Copies a file from `source` to `dest`.
|
## Copies a file from `source` to `dest`, where `dest.parentDir` must exist.
|
||||||
##
|
##
|
||||||
## If this fails, `OSError` is raised.
|
## If this fails, `OSError` is raised.
|
||||||
##
|
##
|
||||||
|
|
@ -1738,6 +1738,12 @@ proc copyFile*(source, dest: string) {.rtl, extern: "nos$1",
|
||||||
flushFile(d)
|
flushFile(d)
|
||||||
close(d)
|
close(d)
|
||||||
|
|
||||||
|
proc copyFileToDir*(source, dir: string) {.noWeirdTarget, since: (1,3,7).} =
|
||||||
|
## Copies a file `source` into directory `dir`, which must exist.
|
||||||
|
if dir.len == 0: # treating "" as "." is error prone
|
||||||
|
raise newException(ValueError, "dest is empty")
|
||||||
|
copyFile(source, dir / source.lastPathPart)
|
||||||
|
|
||||||
when not declared(ENOENT) and not defined(Windows):
|
when not declared(ENOENT) and not defined(Windows):
|
||||||
when NoFakeVars:
|
when NoFakeVars:
|
||||||
when not defined(haiku):
|
when not defined(haiku):
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,25 @@ block fileOperations:
|
||||||
createDir(dname)
|
createDir(dname)
|
||||||
doAssert dirExists(dname)
|
doAssert dirExists(dname)
|
||||||
|
|
||||||
|
block: # copyFile, copyFileToDir
|
||||||
|
doAssertRaises(OSError): copyFile(dname/"nonexistant.txt", dname/"nonexistant.txt")
|
||||||
|
let fname = "D20201009T112235"
|
||||||
|
let fname2 = "D20201009T112235.2"
|
||||||
|
writeFile(dname/fname, "foo")
|
||||||
|
let sub = "sub"
|
||||||
|
doAssertRaises(OSError): copyFile(dname/fname, dname/sub/fname2)
|
||||||
|
doAssertRaises(OSError): copyFileToDir(dname/fname, dname/sub)
|
||||||
|
doAssertRaises(ValueError): copyFileToDir(dname/fname, "")
|
||||||
|
copyFile(dname/fname, dname/fname2)
|
||||||
|
doAssert fileExists(dname/fname2)
|
||||||
|
createDir(dname/sub)
|
||||||
|
copyFileToDir(dname/fname, dname/sub)
|
||||||
|
doAssert fileExists(dname/sub/fname)
|
||||||
|
removeDir(dname/sub)
|
||||||
|
doAssert not dirExists(dname/sub)
|
||||||
|
removeFile(dname/fname)
|
||||||
|
removeFile(dname/fname2)
|
||||||
|
|
||||||
# Test creating files and dirs
|
# Test creating files and dirs
|
||||||
for dir in dirs:
|
for dir in dirs:
|
||||||
createDir(dname/dir)
|
createDir(dname/dir)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue