[Review] SE-0149 Package Manager Support for Top of Tree development


(Daniel Dunbar) #1

Hello Swift community,

The review of SE-0149 “ Package Manager Support for Top of Tree development" begins now and runs through January 31, 2017. The proposal is available here:

https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.mdhttps://github.com/apple/swift-evolution/blob/master/proposal <https://github.com/apple/swift-evolution/blob/master/proposals/XXX-xxxxxxxx>s/0149-package-manager-top-of-tree.md
Reviews are an important part of the Swift evolution process. All reviews should be sent to the swift-build-dev and swift-evolution mailing lists at

https://lists.swift.org/mailman/listinfo/swift-build-dev
https://lists.swift.org/mailman/listinfo/swift-evolution
or, if you would like to keep your feedback private, directly to the review manager. When replying, please try to keep the proposal link at the top of the message:

Proposal link:

https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md
Reply text

Other replies
<https://github.com/apple/swift-evolution#what-goes-into-a-review-1>What goes into a review?

The goal of the review process is to improve the proposal under review through constructive criticism and, eventually, determine the direction of Swift. When writing your review, here are some questions you might want to answer in your review:

What is your evaluation of the proposal?
Is the problem being addressed significant enough to warrant a change to Swift?
Does this proposal fit well with the feel and direction of Swift?
If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?
How much effort did you put into your review? A glance, a quick reading, or an in-depth study?
More information about the Swift evolution process is available at

https://github.com/apple/swift-evolution/blob/master/process.md
Thank you,

- Daniel

Review Manager


(Daniel Dunbar) #2

I am reposting this since the URLs were mangled in the original email.

Hello Swift community,

The review of SE-0149 “ Package Manager Support for Top of Tree development" begins now and runs through January 31, 2017. The proposal is available here:
  https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md

Reviews are an important part of the Swift evolution process. All reviews should be sent to the swift-build-dev and swift-evolution mailing lists at
  https://lists.swift.org/mailman/listinfo/swift-build-dev
  https://lists.swift.org/mailman/listinfo/swift-evolution
or, if you would like to keep your feedback private, directly to the review manager. When replying, please try to keep the proposal link at the top of the message:
  https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md

What goes into a review?

The goal of the review process is to improve the proposal under review through constructive criticism and, eventually, determine the direction of Swift. When writing your review, here are some questions you might want to answer in your review:

  • What is your evaluation of the proposal?
  • Is the problem being addressed significant enough to warrant a change to Swift?
  • Does this proposal fit well with the feel and direction of Swift?
  • If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?
  • How much effort did you put into your review? A glance, a quick reading, or an in-depth study?
More information about the Swift evolution process is available at
  https://github.com/apple/swift-evolution/blob/master/process.md

Thank you,
- Daniel

Review Manager

···

On Jan 24, 2017, at 8:56 AM, Daniel Dunbar via swift-build-dev <swift-build-dev@swift.org> wrote:

Hello Swift community,

The review of SE-0149 “ Package Manager Support for Top of Tree development" begins now and runs through January 31, 2017. The proposal is available here:

<https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md>https://github.com/apple/swift-evolution/blob/master/proposal <https://github.com/apple/swift-evolution/blob/master/proposals/XXX-xxxxxxxx>s/0149-package-manager-top-of-tree.md
Reviews are an important part of the Swift evolution process. All reviews should be sent to the swift-build-dev and swift-evolution mailing lists at

https://lists.swift.org/mailman/listinfo/swift-build-dev
https://lists.swift.org/mailman/listinfo/swift-evolution
or, if you would like to keep your feedback private, directly to the review manager. When replying, please try to keep the proposal link at the top of the message:

Proposal link:

https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md
Reply text

Other replies
<https://github.com/apple/swift-evolution#what-goes-into-a-review-1>What goes into a review?

The goal of the review process is to improve the proposal under review through constructive criticism and, eventually, determine the direction of Swift. When writing your review, here are some questions you might want to answer in your review:

What is your evaluation of the proposal?
Is the problem being addressed significant enough to warrant a change to Swift?
Does this proposal fit well with the feel and direction of Swift?
If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?
How much effort did you put into your review? A glance, a quick reading, or an in-depth study?
More information about the Swift evolution process is available at

https://github.com/apple/swift-evolution/blob/master/process.md
Thank you,

- Daniel

Review Manager

_______________________________________________
swift-build-dev mailing list
swift-build-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-build-dev


(Russ Bishop) #3

Hello Swift community,

The review of SE-0149 “ Package Manager Support for Top of Tree development" begins now and runs through January 31, 2017. The proposal is available here:

What is your evaluation of the proposal?

+1.

This seems reasonable and not terribly controversial to me.

Russ

···

On Jan 24, 2017, at 8:56 AM, Daniel Dunbar via swift-build-dev <swift-build-dev@swift.org <mailto:swift-build-dev@swift.org>> wrote:

Is the problem being addressed significant enough to warrant a change to Swift?
Does this proposal fit well with the feel and direction of Swift?
If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?
How much effort did you put into your review? A glance, a quick reading, or an in-depth study?
More information about the Swift evolution process is available at

https://github.com/apple/swift-evolution/blob/master/process.md
Thank you,

- Daniel

Review Manager

_______________________________________________
swift-build-dev mailing list
swift-build-dev@swift.org <mailto:swift-build-dev@swift.org>
https://lists.swift.org/mailman/listinfo/swift-build-dev

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution


(Derrick Ho) #4

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")
]),

]
)

···

On Tue, Jan 24, 2017 at 3:28 PM Daniel Dunbar via swift-evolution < swift-evolution@swift.org> wrote:

I am reposting this since the URLs were mangled in the original email.

Hello Swift community,

The review of SE-0149 “ Package Manager Support for Top of Tree
development" begins now and runs through January 31, 2017. The proposal is
available here:
  https://github.com/apple/swift-evolution/blob/master/proposals/
0149-package-manager-top-of-tree.md

Reviews are an important part of the Swift evolution process. All reviews
should be sent to the swift-build-dev and swift-evolution mailing lists at
  https://lists.swift.org/mailman/listinfo/swift-build-dev
  https://lists.swift.org/mailman/listinfo/swift-evolution
or, if you would like to keep your feedback private, directly to the
review manager. When replying, please try to keep the proposal link at the
top of the message:

https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md

What goes into a review?

The goal of the review process is to improve the proposal under review
through constructive criticism and, eventually, determine the direction of
Swift. When writing your review, here are some questions you might want to
answer in your review:

• What is your evaluation of the proposal?
• Is the problem being addressed significant enough to warrant a change to
Swift?
• Does this proposal fit well with the feel and direction of Swift?
• If you have used other languages or libraries with a similar feature,
how do you feel that this proposal compares to those?
• How much effort did you put into your review? A glance, a quick reading,
or an in-depth study?
More information about the Swift evolution process is available at
  https://github.com/apple/swift-evolution/blob/master/process.md

Thank you,
- Daniel

Review Manager

On Jan 24, 2017, at 8:56 AM, Daniel Dunbar via swift-build-dev < > swift-build-dev@swift.org> wrote:

Hello Swift community,

The review of SE-0149 “ Package Manager Support for Top of Tree
development" begins now and runs through January 31, 2017. The proposal is
available here:

<https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md>
https://github.com/apple/swift-evolution/blob/master/proposal
<https://github.com/apple/swift-evolution/blob/master/proposals/XXX-xxxxxxxx>
s/*0149-package-manager-top-of-tree.md
<http://0149-package-manager-top-of-tree.md>*

Reviews are an important part of the Swift evolution process. All reviews
should be sent to the swift-build-dev and swift-evolution mailing lists at

https://lists.swift.org/mailman/listinfo/swift-build-dev
https://lists.swift.org/mailman/listinfo/swift-evolution

or, if you would like to keep your feedback private, directly to the
review manager. When replying, please try to keep the proposal link at the
top of the message:

Proposal link:

https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md

Reply text

Other replies

<https://github.com/apple/swift-evolution#what-goes-into-a-review-1>What
goes into a review?

The goal of the review process is to improve the proposal under review
through constructive criticism and, eventually, determine the direction of
Swift. When writing your review, here are some questions you might want to
answer in your review:

   - What is your evaluation of the proposal?
   - Is the problem being addressed significant enough to warrant a
   change to Swift?
   - Does this proposal fit well with the feel and direction of Swift?
   - If you have used other languages or libraries with a similar
   feature, how do you feel that this proposal compares to those?
   - How much effort did you put into your review? A glance, a quick
   reading, or an in-depth study?

More information about the Swift evolution process is available at

https://github.com/apple/swift-evolution/blob/master/process.md

Thank you,

- Daniel

Review Manager
_______________________________________________
swift-build-dev mailing list
swift-build-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-build-dev

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution


(David Hart) #5

  • What is your evaluation of the proposal?

It's a small improvement which will be very useful for a certain class of people/projects. I see no downsides.

  • Is the problem being addressed significant enough to warrant a change to Swift?

Not significant for me, but quick enough to implement to be worth it I guess.

  • Does this proposal fit well with the feel and direction of Swift?

Yes.

  • If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?

SwiftPM already goes much further in terms of package development (with edit) than most other dependency managers for iOS. ++

  • How much effort did you put into your review? A glance, a quick reading, or an in-depth study?

Two read-throughs.


#6

I am reposting this since the URLs were mangled in the original email.

Hello Swift community,

The review of SE-0149 “ Package Manager Support for Top of Tree development" begins now and runs through January 31, 2017. The proposal is available here:
https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md

Reviews are an important part of the Swift evolution process. All reviews should be sent to the swift-build-dev and swift-evolution mailing lists at
https://lists.swift.org/mailman/listinfo/swift-build-dev
https://lists.swift.org/mailman/listinfo/swift-evolution
or, if you would like to keep your feedback private, directly to the review manager. When replying, please try to keep the proposal link at the top of the message:
https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md

What goes into a review?

The goal of the review process is to improve the proposal under review through constructive criticism and, eventually, determine the direction of Swift. When writing your review, here are some questions you might want to answer in your review:

  • What is your evaluation of the proposal?

+1. Currently I create the symlinks manually, but that runs into issues; for example when trying to update a changed dependency graph.

I'm also interested in how SwiftPM would handle the situation that Derrick Ho sketches.

  • Is the problem being addressed significant enough to warrant a change to Swift?

Yes.

  • Does this proposal fit well with the feel and direction of Swift?

Yes.

  • If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?

Very similar to what pip (python) offers. It's a feature that I've used a lot.

  • How much effort did you put into your review? A glance, a quick reading, or an in-depth study?

Quick reading.

···

On 2017-01-24 20:28:30 +0000, Daniel Dunbar via swift-evolution said:

More information about the Swift evolution process is available at
https://github.com/apple/swift-evolution/blob/master/process.md

Thank you,
- Daniel

--
-Bouke


(Georgios Moschovitis) #7

+1

This is an obvious (and much needed) enhancement!

While co-developing an application and a dependency package it’s annoying having
to create ‘dummy’ git tags to keep SPM happy.

-g.


(Brent Royal-Gordon) #8

I am in serious need of this feature for one of my projects, and the design looks pretty good to me. +1.

···

On Jan 24, 2017, at 12:28 PM, Daniel Dunbar via swift-evolution <swift-evolution@swift.org> wrote:

  https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md

--
Brent Royal-Gordon
Architechies


(Boris Buegling) #9

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@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")
]),

]
)

On Tue, Jan 24, 2017 at 3:28 PM Daniel Dunbar via swift-evolution <swift-evolution@swift.org> wrote:
I am reposting this since the URLs were mangled in the original email.

Hello Swift community,

The review of SE-0149 “ Package Manager Support for Top of Tree development" begins now and runs through January 31, 2017. The proposal is available here:
  https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md

Reviews are an important part of the Swift evolution process. All reviews should be sent to the swift-build-dev and swift-evolution mailing lists at
  https://lists.swift.org/mailman/listinfo/swift-build-dev
  https://lists.swift.org/mailman/listinfo/swift-evolution
or, if you would like to keep your feedback private, directly to the review manager. When replying, please try to keep the proposal link at the top of the message:
  https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md

What goes into a review?

The goal of the review process is to improve the proposal under review through constructive criticism and, eventually, determine the direction of Swift. When writing your review, here are some questions you might want to answer in your review:

  • What is your evaluation of the proposal?
  • Is the problem being addressed significant enough to warrant a change to Swift?
  • Does this proposal fit well with the feel and direction of Swift?
  • If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?
  • How much effort did you put into your review? A glance, a quick reading, or an in-depth study?
More information about the Swift evolution process is available at
  https://github.com/apple/swift-evolution/blob/master/process.md

Thank you,
- Daniel

Review Manager

On Jan 24, 2017, at 8:56 AM, Daniel Dunbar via swift-build-dev <swift-build-dev@swift.org> wrote:

Hello Swift community,

The review of SE-0149 “ Package Manager Support for Top of Tree development" begins now and runs through January 31, 2017. The proposal is available here:

https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md
Reviews are an important part of the Swift evolution process. All reviews should be sent to the swift-build-dev and swift-evolution mailing lists at

https://lists.swift.org/mailman/listinfo/swift-build-dev
https://lists.swift.org/mailman/listinfo/swift-evolution
or, if you would like to keep your feedback private, directly to the review manager. When replying, please try to keep the proposal link at the top of the message:

Proposal link:

https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md
Reply text

Other replies
What goes into a review?

The goal of the review process is to improve the proposal under review through constructive criticism and, eventually, determine the direction of Swift. When writing your review, here are some questions you might want to answer in your review:

  • What is your evaluation of the proposal?
  • Is the problem being addressed significant enough to warrant a change to Swift?
  • Does this proposal fit well with the feel and direction of Swift?
  • If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?
  • How much effort did you put into your review? A glance, a quick reading, or an in-depth study?
More information about the Swift evolution process is available at

https://github.com/apple/swift-evolution/blob/master/process.md
Thank you,

- Daniel

Review Manager

_______________________________________________
swift-build-dev mailing list
swift-build-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-build-dev

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution


(Derrick Ho) #10

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 Fri, Jan 27, 2017 at 1:55 PM Georgios Moschovitis via swift-evolution < swift-evolution@swift.org> wrote:

+1

This is an obvious (and much needed) enhancement!

While co-developing an application and a dependency package it’s annoying
having
to create ‘dummy’ git tags to keep SPM happy.

-g.
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution


(Rick Ballard) #11

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@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@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@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")
]),

]
)