mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-20 09:58:35 +00:00
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:
@@ -209,6 +209,7 @@
|
||||
- Added `progressInterval` argument to `asyncftpclient.newAsyncFtpClient` to control the interval
|
||||
at which progress callbacks are called.
|
||||
|
||||
- Added `os.copyFileToDir`
|
||||
|
||||
## Language changes
|
||||
|
||||
|
||||
@@ -1682,7 +1682,7 @@ proc setFilePermissions*(filename: string, permissions: set[FilePermission]) {.
|
||||
|
||||
proc copyFile*(source, dest: string) {.rtl, extern: "nos$1",
|
||||
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.
|
||||
##
|
||||
@@ -1738,6 +1738,12 @@ proc copyFile*(source, dest: string) {.rtl, extern: "nos$1",
|
||||
flushFile(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 NoFakeVars:
|
||||
when not defined(haiku):
|
||||
|
||||
@@ -36,6 +36,25 @@ block fileOperations:
|
||||
createDir(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
|
||||
for dir in dirs:
|
||||
createDir(dname/dir)
|
||||
|
||||
Reference in New Issue
Block a user