From b80e01f62eb292b84db260b940ce7668b053c4be Mon Sep 17 00:00:00 2001 From: Logan Wright Date: Tue, 21 Mar 2017 14:49:02 +0100 Subject: [PATCH 1/2] working directory support --- Sources/Core/WorkingDirectory.swift | 12 ++++++++++++ Tests/CoreTests/UtilityTests.swift | 9 +++++++++ 2 files changed, 21 insertions(+) create mode 100644 Sources/Core/WorkingDirectory.swift diff --git a/Sources/Core/WorkingDirectory.swift b/Sources/Core/WorkingDirectory.swift new file mode 100644 index 00000000..49d8d49e --- /dev/null +++ b/Sources/Core/WorkingDirectory.swift @@ -0,0 +1,12 @@ +/// This function will attempt to get the current +/// working directory of the application +public func workingDirectory() -> String { + let file = #file + let directory: String? + if file.contains(".build") { + directory = file.components(separatedBy: "/.build").first + } else { + directory = file.components(separatedBy: "/Sources").first + } + return directory?.finished(with: "/") ?? "./" +} diff --git a/Tests/CoreTests/UtilityTests.swift b/Tests/CoreTests/UtilityTests.swift index 8e3b2d10..6e833eb9 100644 --- a/Tests/CoreTests/UtilityTests.swift +++ b/Tests/CoreTests/UtilityTests.swift @@ -7,6 +7,7 @@ class UtilityTests: XCTestCase { ("testLowercase", testLowercase), ("testUppercase", testUppercase), ("testIntHex", testIntHex), + ("testWorkDir", testWorkDir) ] func testLowercase() { @@ -36,4 +37,12 @@ class UtilityTests: XCTestCase { let unsignedHex = Byte(125).hex XCTAssertEqual(unsignedHex, "7D") } + + func testWorkDir() { + let file = #file + + let workDir = workingDirectory() + XCTAssert(file.hasPrefix(workDir)) + XCTAssertNotEqual(workDir, file) + } } From 97aaaecd50e4cac9508b5b9dcb563db5921848f8 Mon Sep 17 00:00:00 2001 From: Logan Wright Date: Tue, 21 Mar 2017 15:36:02 +0100 Subject: [PATCH 2/2] add more capabilities --- Sources/Core/WorkingDirectory.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Sources/Core/WorkingDirectory.swift b/Sources/Core/WorkingDirectory.swift index 49d8d49e..db0a9a9a 100644 --- a/Sources/Core/WorkingDirectory.swift +++ b/Sources/Core/WorkingDirectory.swift @@ -3,8 +3,13 @@ public func workingDirectory() -> String { let file = #file let directory: String? + // most dependencies are in `./.build/` if file.contains(".build") { directory = file.components(separatedBy: "/.build").first + // when editing a dependency, it is in `./Packages/` + } else if file.contains("Packages") { + directory = file.components(separatedBy: "/Packages").first + // when dealing with current repository, file is in `./Sources/` } else { directory = file.components(separatedBy: "/Sources").first }