Skip to content

Commit 77f1819

Browse files
author
Teamcity Account
committed
Merge pull request #16945 in MA/avito-ios from MBS-9685_install_xcode to develop
Automatically merge pull request #16945 in MA/avito-ios from MBS-9685_install_xcode to develop * commit 'a02e316822b252618e3de52769a1cd4a7a40912b': MBS-9685: expose some shared modules GitOrigin-RevId: da80f89755313a4f9e6e55d34dcdf1c80e21eb6c
1 parent ece5fc3 commit 77f1819

File tree

58 files changed

+2332
-9
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+2332
-9
lines changed

Package.swift

+143-2
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,168 @@ let package = Package(
1111
.library(
1212
name: "CommandLineToolkit",
1313
targets: [
14+
"DateProvider",
15+
"FileSystem",
16+
"PathLib",
17+
"PlistLib",
18+
"Tmp",
1419
"Types",
20+
"XcodeLocator",
21+
"XcodeLocatorModels",
22+
]
23+
),
24+
.library(
25+
name: "CommandLineToolkitTestHelpers",
26+
targets: [
27+
"DateProviderTestHelpers",
28+
"FileSystemTestHelpers",
29+
"TestHelpers",
30+
"TmpTestHelpers",
1531
]
1632
),
1733
],
1834
dependencies: [
1935
],
2036
targets: [
2137
.target(
22-
// MARK: Types
38+
name: "DateProvider",
39+
dependencies: [
40+
],
41+
path: "Sources/DateProvider"
42+
),
43+
.target(
44+
name: "DateProviderTestHelpers",
45+
dependencies: [
46+
"DateProvider",
47+
],
48+
path: "Tests/DateProviderTestHelpers"
49+
),
50+
.target(
51+
name: "FileSystem",
52+
dependencies: [
53+
"PathLib",
54+
],
55+
path: "Sources/FileSystem"
56+
),
57+
.target(
58+
name: "FileSystemTestHelpers",
59+
dependencies: [
60+
"FileSystem",
61+
"PathLib",
62+
],
63+
path: "Tests/FileSystemTestHelpers"
64+
),
65+
.testTarget(
66+
name: "FileSystemTests",
67+
dependencies: [
68+
"DateProvider",
69+
"FileSystem",
70+
"PathLib",
71+
"TestHelpers",
72+
"Tmp",
73+
"TmpTestHelpers",
74+
],
75+
path: "Tests/FileSystemTests"
76+
),
77+
.target(
78+
name: "PathLib",
79+
dependencies: [
80+
],
81+
path: "Sources/PathLib"
82+
),
83+
.testTarget(
84+
name: "PathLibTests",
85+
dependencies: [
86+
"PathLib",
87+
],
88+
path: "Tests/PathLibTests"
89+
),
90+
.target(
91+
name: "PlistLib",
92+
dependencies: [
93+
],
94+
path: "Sources/PlistLib"
95+
),
96+
.testTarget(
97+
name: "PlistLibTests",
98+
dependencies: [
99+
"PlistLib",
100+
"TestHelpers",
101+
],
102+
path: "Tests/PlistLibTests"
103+
),
104+
.testTarget(
105+
name: "TemporaryStuffTests",
106+
dependencies: [
107+
"PathLib",
108+
"TestHelpers",
109+
"Tmp",
110+
],
111+
path: "Tests/TemporaryStuffTests"
112+
),
113+
.target(
114+
name: "TestHelpers",
115+
dependencies: [
116+
],
117+
path: "Tests/TestHelpers"
118+
),
119+
.target(
120+
name: "Tmp",
121+
dependencies: [
122+
"PathLib",
123+
],
124+
path: "Sources/Tmp"
125+
),
126+
.target(
127+
name: "TmpTestHelpers",
128+
dependencies: [
129+
"TestHelpers",
130+
"Tmp",
131+
],
132+
path: "Tests/TmpTestHelpers"
133+
),
134+
.target(
23135
name: "Types",
24136
dependencies: [
25137
],
26138
path: "Sources/Types"
27139
),
28140
.testTarget(
29-
// MARK: TypesTests
30141
name: "TypesTests",
31142
dependencies: [
32143
"Types",
33144
],
34145
path: "Tests/TypesTests"
35146
),
147+
.target(
148+
name: "XcodeLocator",
149+
dependencies: [
150+
"FileSystem",
151+
"PathLib",
152+
"PlistLib",
153+
"XcodeLocatorModels",
154+
],
155+
path: "Sources/XcodeLocator"
156+
),
157+
.target(
158+
name: "XcodeLocatorModels",
159+
dependencies: [
160+
"PathLib",
161+
],
162+
path: "Sources/XcodeLocatorModels"
163+
),
164+
.testTarget(
165+
name: "XcodeLocatorTests",
166+
dependencies: [
167+
"FileSystem",
168+
"FileSystemTestHelpers",
169+
"PlistLib",
170+
"TestHelpers",
171+
"TmpTestHelpers",
172+
"XcodeLocator",
173+
"XcodeLocatorModels",
174+
],
175+
path: "Tests/XcodeLocatorTests"
176+
),
36177
]
37178
)

PackageGenerator.swift

+23-6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ let knownImportsToIgnore = [
1616

1717
let packageNameForDependency = [
1818
"ArgumentParser": "swift-argument-parser",
19+
"AtomicModels": "GraphiteClient",
1920
]
2021

2122
let jsonEncoder = JSONEncoder()
@@ -30,7 +31,8 @@ struct ModuleDescription {
3031
let name: String
3132
let deps: [String]
3233
let path: String
33-
let isTest: Bool
34+
let isTestTarget: Bool
35+
let isTestHelper: Bool
3436
}
3537

3638
func generate(at url: URL, isTestTarget: Bool) throws -> [ModuleDescription] {
@@ -85,20 +87,32 @@ func generate(at url: URL, isTestTarget: Bool) throws -> [ModuleDescription] {
8587
let isTestHelper = moduleFolderUrl.path.hasSuffix("TestHelpers")
8688

8789
result.append(
88-
ModuleDescription(name: moduleName, deps: dependencies, path: String(path), isTest: isTestTarget && !isTestHelper)
90+
ModuleDescription(name: moduleName, deps: dependencies, path: String(path), isTestTarget: isTestTarget, isTestHelper: isTestHelper)
8991
)
9092
}
9193

9294
return result
9395
}
9496

95-
func generatePackageSwift(raplacementForTargets: [String]) throws {
97+
func generatePackageSwift(
98+
raplacementForTargets: [String],
99+
replacementForTargetNames: [String],
100+
replacementForTestHelpers: [String]
101+
) throws {
96102
log("Loading template")
97103
var templateContents = try String(contentsOf: URL(fileURLWithPath: "PackageTemplate.swift.txt"))
98104
templateContents = templateContents.replacingOccurrences(
99105
of: "<__TARGETS__>",
100106
with: raplacementForTargets.map { " \($0)" }.joined(separator: "\n")
101107
)
108+
templateContents = templateContents.replacingOccurrences(
109+
of: "<__TARGET_NAMES__>",
110+
with: replacementForTargetNames.map { " \"\($0)\"," }.joined(separator: "\n")
111+
)
112+
templateContents = templateContents.replacingOccurrences(
113+
of: "<__TEST_HELPER_NAMES__>",
114+
with: replacementForTestHelpers.map { " \"\($0)\"," }.joined(separator: "\n")
115+
)
102116

103117
let packageSwiftPath = URL(fileURLWithPath: "Package.swift")
104118

@@ -127,8 +141,7 @@ func main() throws {
127141
var generatedTargetStatements = [String]()
128142
let sortedModuleDescriptions: [ModuleDescription] = moduleDescriptions.sorted { $0.name < $1.name }
129143
for moduleDescription in sortedModuleDescriptions {
130-
generatedTargetStatements.append(".\(!moduleDescription.isTest ? "target" : "testTarget")(")
131-
generatedTargetStatements.append(" // MARK: \(moduleDescription.name)")
144+
generatedTargetStatements.append(".\(!(moduleDescription.isTestTarget && !moduleDescription.isTestHelper) ? "target" : "testTarget")(")
132145
generatedTargetStatements.append(" name: " + "\"\(moduleDescription.name)\"" + ",")
133146
generatedTargetStatements.append(" dependencies: [")
134147
for dependency in moduleDescription.deps {
@@ -142,7 +155,11 @@ func main() throws {
142155
generatedTargetStatements.append(" path: " + "\"" + moduleDescription.path + "\"")
143156
generatedTargetStatements.append("),")
144157
}
145-
try generatePackageSwift(raplacementForTargets: generatedTargetStatements)
158+
try generatePackageSwift(
159+
raplacementForTargets: generatedTargetStatements,
160+
replacementForTargetNames: sortedModuleDescriptions.filter { !$0.isTestTarget }.map { $0.name },
161+
replacementForTestHelpers: sortedModuleDescriptions.filter { $0.isTestHelper }.map { $0.name }
162+
)
146163
}
147164

148165
try main()

PackageTemplate.swift.txt

+7-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,13 @@ let package = Package(
1111
.library(
1212
name: "CommandLineToolkit",
1313
targets: [
14-
"Types",
14+
<__TARGET_NAMES__>
15+
]
16+
),
17+
.library(
18+
name: "CommandLineToolkitTestHelpers",
19+
targets: [
20+
<__TEST_HELPER_NAMES__>
1521
]
1622
),
1723
],
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import Foundation
2+
3+
public protocol DateProvider {
4+
func currentDate() -> Date
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import Foundation
2+
3+
public final class SystemDateProvider: DateProvider {
4+
public init() {}
5+
6+
public func currentDate() -> Date {
7+
return Date()
8+
}
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import Foundation
2+
import PathLib
3+
4+
public enum SearchDomain {
5+
case user
6+
case local
7+
case network
8+
case system
9+
}
10+
11+
public protocol CommonlyUsedPathsProvider {
12+
func applications(inDomain: SearchDomain, create: Bool) throws -> AbsolutePath
13+
func caches(inDomain: SearchDomain, create: Bool) throws -> AbsolutePath
14+
func library(inDomain: SearchDomain, create: Bool) throws -> AbsolutePath
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import Foundation
2+
import PathLib
3+
4+
public final class DeepFileSystemEnumerator: FileSystemEnumerator {
5+
private let path: AbsolutePath
6+
private let fileManager: FileManager
7+
8+
public enum EnumerationError: Error {
9+
case enumeratorFailure
10+
}
11+
12+
public init(
13+
fileManager: FileManager,
14+
path: AbsolutePath
15+
) {
16+
self.fileManager = fileManager
17+
self.path = path
18+
}
19+
20+
public func each(iterator: (AbsolutePath) throws -> ()) throws {
21+
guard let enumerator = fileManager.enumerator(at: path.fileUrl, includingPropertiesForKeys: nil) else {
22+
throw EnumerationError.enumeratorFailure
23+
}
24+
25+
for case let fileURL as URL in enumerator {
26+
let absolutePath = AbsolutePath(fileURL)
27+
try iterator(absolutePath)
28+
}
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import Foundation
2+
import PathLib
3+
4+
public final class DefaultCommonlyUsedPathsProvider: CommonlyUsedPathsProvider {
5+
private let fileManager: FileManager
6+
7+
public init(fileManager: FileManager) {
8+
self.fileManager = fileManager
9+
}
10+
11+
public func applications(inDomain domain: SearchDomain, create: Bool) throws -> AbsolutePath {
12+
return AbsolutePath(
13+
try fileManager.url(
14+
for: .applicationDirectory,
15+
in: domain.mask,
16+
appropriateFor: nil,
17+
create: create
18+
)
19+
)
20+
}
21+
22+
public func caches(inDomain domain: SearchDomain, create: Bool) throws -> AbsolutePath {
23+
return AbsolutePath(
24+
try fileManager.url(
25+
for: .cachesDirectory,
26+
in: domain.mask,
27+
appropriateFor: nil,
28+
create: create
29+
)
30+
)
31+
}
32+
33+
public func library(inDomain domain: SearchDomain, create: Bool) throws -> AbsolutePath {
34+
return AbsolutePath(
35+
try fileManager.url(
36+
for: .libraryDirectory,
37+
in: domain.mask,
38+
appropriateFor: nil,
39+
create: create
40+
)
41+
)
42+
}
43+
}
44+
45+
extension SearchDomain {
46+
var mask: FileManager.SearchPathDomainMask {
47+
switch self {
48+
case .local:
49+
return .localDomainMask
50+
case .user:
51+
return .userDomainMask
52+
case .network:
53+
return .networkDomainMask
54+
case .system:
55+
return .systemDomainMask
56+
}
57+
}
58+
}

0 commit comments

Comments
 (0)