Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
889d825b3a | ||
|
|
f1cd06fdff | ||
|
|
c6e840b9b6 | ||
|
|
eb34ac4af8 | ||
|
|
66ae86c986 |
2
.github/codecov.yml
vendored
Normal file
2
.github/codecov.yml
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
ignore:
|
||||||
|
- Tests
|
||||||
3
.github/ranger.yml
vendored
Normal file
3
.github/ranger.yml
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
merges:
|
||||||
|
- action: delete_branch
|
||||||
|
- action: tag
|
||||||
@@ -19,9 +19,10 @@ jobs:
|
|||||||
name: macOS / Swift 4.2.1
|
name: macOS / Swift 4.2.1
|
||||||
|
|
||||||
- &xcodebuild
|
- &xcodebuild
|
||||||
before_install: swift package generate-xcodeproj
|
before_install: swift package generate-xcodeproj --enable-code-coverage
|
||||||
xcode_destination: platform=iOS Simulator,OS=latest,name=iPhone XS
|
xcode_destination: platform=iOS Simulator,OS=latest,name=iPhone XS
|
||||||
name: iOS / Swift 4.2.1
|
name: iOS / Swift 4.2.1
|
||||||
|
after_success: bash <(curl -s https://codecov.io/bash)
|
||||||
- <<: *xcodebuild
|
- <<: *xcodebuild
|
||||||
xcode_destination: platform=tvOS Simulator,OS=latest,name=Apple TV
|
xcode_destination: platform=tvOS Simulator,OS=latest,name=Apple TV
|
||||||
name: tvOS / Swift 4.2.1
|
name: tvOS / Swift 4.2.1
|
||||||
@@ -34,6 +35,7 @@ jobs:
|
|||||||
-scheme Path.swift-Package \
|
-scheme Path.swift-Package \
|
||||||
-destination 'platform=watchOS Simulator,OS=latest,name=Apple Watch Series 4 - 40mm' \
|
-destination 'platform=watchOS Simulator,OS=latest,name=Apple Watch Series 4 - 40mm' \
|
||||||
build | xcpretty
|
build | xcpretty
|
||||||
|
after_success: false
|
||||||
|
|
||||||
- &linux
|
- &linux
|
||||||
env: SWIFT_VERSION=4.2.1
|
env: SWIFT_VERSION=4.2.1
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ public extension Path {
|
|||||||
*/
|
*/
|
||||||
@discardableResult
|
@discardableResult
|
||||||
func move(to: Path, overwrite: Bool = false) throws -> Path {
|
func move(to: Path, overwrite: Bool = false) throws -> Path {
|
||||||
if overwrite, to.exists {
|
if overwrite, to.isFile {
|
||||||
try FileManager.default.removeItem(at: to.url)
|
try FileManager.default.removeItem(at: to.url)
|
||||||
}
|
}
|
||||||
try FileManager.default.moveItem(at: url, to: to.url)
|
try FileManager.default.moveItem(at: url, to: to.url)
|
||||||
@@ -112,13 +112,16 @@ public extension Path {
|
|||||||
- SeeAlso: move(into:overwrite:)
|
- SeeAlso: move(into:overwrite:)
|
||||||
*/
|
*/
|
||||||
@discardableResult
|
@discardableResult
|
||||||
func move(into: Path) throws -> Path {
|
func move(into: Path, overwrite: Bool = false) throws -> Path {
|
||||||
if !into.exists {
|
if !into.exists {
|
||||||
try into.mkdir(.p)
|
try into.mkdir(.p)
|
||||||
} else if !into.isDirectory {
|
} else if !into.isDirectory {
|
||||||
throw CocoaError.error(.fileWriteFileExists)
|
throw CocoaError.error(.fileWriteFileExists)
|
||||||
}
|
}
|
||||||
let rv = into/basename()
|
let rv = into/basename()
|
||||||
|
if overwrite, rv.isFile {
|
||||||
|
try FileManager.default.removeItem(at: rv.url)
|
||||||
|
}
|
||||||
try FileManager.default.moveItem(at: url, to: rv.url)
|
try FileManager.default.moveItem(at: url, to: rv.url)
|
||||||
return rv
|
return rv
|
||||||
}
|
}
|
||||||
@@ -171,6 +174,13 @@ public extension Path {
|
|||||||
}
|
}
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@discardableResult
|
||||||
|
func rename(_ newname: String) throws -> Path {
|
||||||
|
let newpath = parent/newname
|
||||||
|
try FileManager.default.moveItem(atPath: string, toPath: newpath.string)
|
||||||
|
return newpath
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Options for `Path.mkdir(_:)`
|
/// Options for `Path.mkdir(_:)`
|
||||||
|
|||||||
@@ -165,12 +165,42 @@ class PathTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testCopyInto() throws {
|
func testCopyInto() throws {
|
||||||
|
try Path.mktemp { root1 in
|
||||||
|
let bar1 = try root1.join("bar").touch()
|
||||||
|
try Path.mktemp { root2 in
|
||||||
|
let bar2 = try root2.join("bar").touch()
|
||||||
|
XCTAssertThrowsError(try bar1.copy(into: root2))
|
||||||
|
try bar1.copy(into: root2, overwrite: true)
|
||||||
|
XCTAssertTrue(bar1.exists)
|
||||||
|
XCTAssertTrue(bar2.exists)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func testMoveInto() throws {
|
||||||
|
try Path.mktemp { root1 in
|
||||||
|
let bar1 = try root1.join("bar").touch()
|
||||||
|
try Path.mktemp { root2 in
|
||||||
|
let bar2 = try root2.join("bar").touch()
|
||||||
|
XCTAssertThrowsError(try bar1.move(into: root2))
|
||||||
|
try bar1.move(into: root2, overwrite: true)
|
||||||
|
XCTAssertFalse(bar1.exists)
|
||||||
|
XCTAssertTrue(bar2.exists)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func testRename() throws {
|
||||||
try Path.mktemp { root in
|
try Path.mktemp { root in
|
||||||
let bar = try root.join("bar").touch()
|
do {
|
||||||
try Path.mktemp { root in
|
let file = try root.bar.touch()
|
||||||
try root.join("bar").touch()
|
let foo = try file.rename("foo")
|
||||||
XCTAssertThrowsError(try bar.copy(into: root))
|
XCTAssertFalse(file.exists)
|
||||||
try bar.copy(into: root, overwrite: true)
|
XCTAssertTrue(foo.isFile)
|
||||||
|
}
|
||||||
|
do {
|
||||||
|
let file = try root.bar.touch()
|
||||||
|
XCTAssertThrowsError(try file.rename("foo"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,8 +15,10 @@ extension PathTests {
|
|||||||
("testJoin", testJoin),
|
("testJoin", testJoin),
|
||||||
("testMkpathIfExists", testMkpathIfExists),
|
("testMkpathIfExists", testMkpathIfExists),
|
||||||
("testMktemp", testMktemp),
|
("testMktemp", testMktemp),
|
||||||
|
("testMoveInto", testMoveInto),
|
||||||
("testRelativePathCodable", testRelativePathCodable),
|
("testRelativePathCodable", testRelativePathCodable),
|
||||||
("testRelativeTo", testRelativeTo),
|
("testRelativeTo", testRelativeTo),
|
||||||
|
("testRename", testRename),
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user