Skip to content

Commit 86f3e32

Browse files
committed
Add ability to exclude folders in Manifest.
SR-29 jira tasks.
1 parent 84e5989 commit 86f3e32

File tree

9 files changed

+54
-3
lines changed

9 files changed

+54
-3
lines changed

Sources/PackageDescription/Package.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,15 @@ public final class Package {
4949
/// The list of dependencies.
5050
public var dependencies: [Dependency]
5151

52+
/// The list of folders to exlude
53+
public var exclude: [String]
54+
5255
/// Construct a package.
53-
public init(name: String? = nil, targets: [Target] = [], dependencies: [Dependency] = []) {
56+
public init(name: String? = nil, targets: [Target] = [], dependencies: [Dependency] = [], exclude: [String] = []) {
5457
self.name = name
5558
self.targets = targets
5659
self.dependencies = dependencies
60+
self.exclude = exclude
5761

5862
// Add custom exit handler to cause package to be dumped at exit, if requested.
5963
//
@@ -80,6 +84,8 @@ public final class Package {
8084
for target in targets {
8185
result += target.toTOML("package.targets")
8286
}
87+
result += "\n" + "exclude = \(exclude)"
88+
8389
return result
8490
}
8591
}

Sources/dep/Manifest.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,16 @@ extension PackageDescription.Package {
4242
dependencies.append(PackageDescription.Package.Dependency.fromTOML(item, baseURL: baseURL))
4343
}
4444
}
45+
46+
var exclude: [String] = []
47+
if case .Some(.Array(let array)) = table.items["exclude"] {
48+
for item in array.items {
49+
guard case .String(let exludeItem) = item else { fatalError("exclude contains non string element") }
50+
exclude.append(exludeItem)
51+
}
52+
}
4553

46-
return PackageDescription.Package(name: name, targets: targets, dependencies: dependencies)
54+
return PackageDescription.Package(name: name, targets: targets, dependencies: dependencies, exclude: exclude)
4755
}
4856
}
4957

Sources/swift-build/main.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,11 @@ do {
4141
let rootd = try findSourceRoot()
4242
let manifest = try Manifest(path: "\(rootd)/Package.swift", baseURL: rootd)
4343
let pkgname = manifest.package.name ?? rootd.basename
44+
let excludedirs = manifest.package.exclude.map { Path.join(rootd, $0) }
45+
4446
let depsdir = Path.join(rootd, "Packages")
45-
let computedTargets = try determineTargets(packageName: pkgname, prefix: rootd, ignore: [depsdir])
47+
let computedTargets = try determineTargets(packageName: pkgname, prefix: rootd, ignore: [depsdir] + excludedirs)
48+
4649
let targets = try manifest.configureTargets(computedTargets)
4750
let dependencies = try get(manifest.package.dependencies, prefix: depsdir)
4851
let builddir = Path.join(getenv("SWIFT_BUILD_PATH") ?? Path.join(rootd, ".build"), configuration.dirname)

Tests/PackageDescription/PackageDescriptionTests.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,11 @@ class PackageTests: XCTestCase, XCTestCaseProvider {
3434
let p1 = Package(name: "a", dependencies: [.Package(url: "https://example.com/example", majorVersion: 1)])
3535
XCTAssertEqual(p1, Package.fromTOML(parseTOML(p1.toTOML())))
3636
}
37+
38+
func testExclude() {
39+
let exclude = ["Images", "A/B"]
40+
let p1 = Package(name: "a", exclude: exclude)
41+
let pFromTOML = Package.fromTOML(parseTOML(p1.toTOML()))
42+
XCTAssertEqual(pFromTOML.exclude, exclude)
43+
}
3744
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Bar {
2+
var bar: Int = 0
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class FooBar{
2+
var bar: Int = 0
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Foo {
2+
var bar: Int = 0
3+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import PackageDescription
2+
3+
let package = Package(
4+
5+
name: "29_exclude_directory",
6+
exclude: ["FooLib"]
7+
)

Tests/dep/FunctionalBuildTests.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,17 @@ class FunctionalBuildTests: XCTestCase, XCTestCaseProvider {
332332
}
333333
}
334334

335+
// 29: Exclude Direcotries
336+
func testExludeDirs() {
337+
let filesToVerify = ["BarLib.a", "FooBarLib.a"]
338+
let filesShouldNotExist = ["FooLib.a"]
339+
fixture(name: "29_exclude_directory") { prefix in
340+
XCTAssertNotNil(try? executeSwiftBuild(prefix))
341+
XCTAssertTrue(self.verifyFilesExist(filesToVerify, fixturePath: prefix))
342+
XCTAssertFalse(self.verifyFilesExist(filesShouldNotExist, fixturePath: prefix))
343+
}
344+
}
345+
335346
func test_exdeps() {
336347
fixture(name: "102_mattts_dealer") { prefix in
337348
let prefix = Path.join(prefix, "app")

0 commit comments

Comments
 (0)