[swift-build-dev] [swift-evolution] [Review] SE-0149 Package Manager Support for Top of Tree development

Rick Ballard rballard at apple.com
Mon Jan 30 20:28:55 CST 2017


Hi Derrick,

This use case can be solved using `pin --branch`.

If you really wanted to, you could also simply add B as a direct dependency of P to specify a branch; there's no need to "nest" the dependency. If P really does depend on B being on a branch, the manifest for P may be the right place to express that. In general, however, I'd expect that the case you're describing is a workflow use-case, and thus should be accomplished with pinning; it seems uncommon that a package would truly depend on one of its indirect dependencies being on a branch.

If you'd like to discuss this further, please reply on the "Package Manager Support for branches" thread, as (if I understand you correctly) your question is about that proposal, not the "Top of Tree development" proposal.

Thanks,

	- Rick

> On Jan 27, 2017, at 6:42 PM, Derrick Ho via swift-evolution <swift-evolution at swift.org> wrote:
> 
> Boris,
> 
> My Intent is to make it easier to develop dependency B. I may want to develop on a feature branch for dependency B so I'd like to use PM to force that to happen. 
> 
> I don't want to have to cd into the A folder and then cd into B to make that change. I want to control the whole thing from the root git repo

>> On Jan 25, 2017, at 10:40 AM, Boris Buegling via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> Hi Derrick,
>> 
>> I think you meant to send this as a reply to SE-0149 Package Manager Support for branches, correct?
>> 
>> I’m not quite sure about the use case for your described behaviour, can you elaborate a bit more why you would want to override a dependency of A from the manifest of P? 
>> 
>> If the goal is a temporary override, the proposal already allows that by utilising `pin --branch`.
>> 
>> Cheers,
>> Boris
>> 
>>> On 25 Jan 2017, at 01:50, Derrick Ho via swift-evolution <swift-evolution at swift.org> wrote:
>>> 
>>> It probably is a good idea.
>>> 
>>> Perhaps the changes can be done in the Package.swift file but allow nesting of dependencies.
>>> 
>>> Suppose your dependency is like this where P is your current project
>>> 
>>> P --> A --> B
>>> 
>>> Normally P we would describe its dependency on A while B would be abstracted away. In A, there would be another Package.swift file describing its dependency on B.
>>> 
>>> However if we add the ability to NEST the dependency graph in P's Package.swift it could serve as an override to the default behavior.
>>> 
>>> import PackageDescription
>>> 
>>> let package = Package(
>>> name: "P",
>>> targets: [],
>>> dependencies: [
>>> .Package(url: "https://blah.com/A.git",
>>> majorVersion: 1, depdencies: [
>>> .Package(url: "https://blahblah.com/B.git, branch: "test")
>>> ]),
>>> 
>>> ]
>>> )



More information about the swift-build-dev mailing list