Skip to content
This repository was archived by the owner on Feb 26, 2026. It is now read-only.
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions Package.resolved

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion Sources/XcodeGraph/Models/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@ import Path

public enum Package: Equatable, Codable, Sendable {
case remote(url: String, requirement: Requirement)
case local(path: AbsolutePath)
/// Parameters
/// - path: Absolute path of a package
/// - groupPath: Path which would be used to
/// structure packages in generated project
case local(path: AbsolutePath, groupPath: String?)
}

extension XcodeGraph.Package {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ extension Package {
switch self {
case let .remote(url, _):
return url
case let .local(path):
case let .local(path, _):
return path.pathString
}
}
Expand Down
8 changes: 4 additions & 4 deletions Sources/XcodeGraphMapper/Mappers/Graph/XcodeGraphMapper.swift
Original file line number Diff line number Diff line change
Expand Up @@ -141,10 +141,10 @@ public struct XcodeGraphMapper: XcodeGraphMapping {
case .remote:
break
case let .local(path: packagePath):
guard packageInfos[packagePath] == nil else { break }
let packageInfo = try await packageInfoLoader.loadPackageInfo(at: packagePath)
packageInfos[packagePath] = packageInfo
packagesByName[packageInfo.name] = packagePath
guard packageInfos[packagePath.path] == nil else { break }
let packageInfo = try await packageInfoLoader.loadPackageInfo(at: packagePath.path)
packageInfos[packagePath.path] = packageInfo
packagesByName[packageInfo.name] = packagePath.path
}
}
for (path, packageInfo) in packageInfos {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ struct XCPackageMapper: XCPackageMapping {
func map(package: XCLocalSwiftPackageReference, sourceDirectory: AbsolutePath) throws -> Package {
let relativePath = try RelativePath(validating: package.relativePath)
let path = sourceDirectory.appending(relativePath)
return .local(path: path)
return .local(path: path, groupPath: nil)
}

// MARK: - Private Helpers
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ struct PBXProjectMapper: PBXProjectMapping {
}
let localPackages = try pbxProject.localPackages.compactMap {
try packageMapper.map(package: $0, sourceDirectory: sourceDirectory)
} + localPackagePaths.map { .local(path: $0) }
} + localPackagePaths.map { .local(path: $0, groupPath: nil) }

// Create a files group for the main group
let filesGroup = ProjectGroup.group(name: pbxProject.mainGroup?.name ?? "Project")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -432,8 +432,8 @@ struct XcodeGraphMapperTests {
.willReturn(
.test(
packages: [
.local(path: "/tmp/LibraryA"),
.local(path: "/tmp/LibraryB"),
.local(path: "/tmp/LibraryA", groupPath: nil),
.local(path: "/tmp/LibraryB", groupPath: nil),
]
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ struct XCPackageMapperTests {
let expectedPath = xcodeProj.srcPath.appending(
try RelativePath(validating: "Packages/Example")
)
#expect(result == .local(path: expectedPath))
#expect(result == .local(path: expectedPath, groupPath: nil))
}

@Test("Throws an error if remote package has no repository URL")
Expand Down
4 changes: 2 additions & 2 deletions Tests/XcodeGraphTests/Models/PackageTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import XCTest
final class PackageTests: XCTestCase {
func test_codable_local() {
// Given
let subject = Package.local(path: try! AbsolutePath(validating: "/path/to/workspace"))
let subject = Package.local(path: try! AbsolutePath(validating: "/path/to/workspace"), groupPath: nil)

// Then
XCTAssertCodable(subject)
Expand All @@ -26,7 +26,7 @@ final class PackageTests: XCTestCase {

func test_is_remote_local() {
// Given
let subject = Package.local(path: try! AbsolutePath(validating: "/path/to/package"))
let subject = Package.local(path: try! AbsolutePath(validating: "/path/to/package"), groupPath: nil)

// Then
XCTAssertFalse(subject.isRemote)
Expand Down
Loading