<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""> Proposal link:<br class="">> <a href="https://github.com/apple/swift-evolution/blob/master/proposals/0158-package-manager-manifest-api-redesign.md" class="">https://github.com/apple/swift-evolution/blob/master/proposals/0158-package-manager-manifest-api-redesign.md</a><br class=""><br class="">Hi Xiaodi,<div class=""><br class=""></div><div class="">Thanks for your review comments! There are indeed a few mistakes here; we're going to revise the proposal appropriately, and assuming that nothing else comes up to cause us to reject this proposal, it will wind up "accepted with revisions" tomorrow.</div><div class=""><br class=""></div><div class="">Specifically:</div><div class=""><br class=""></div><div class="">– .uptoNextMajor() and .uptoNextMinor were miscapitalized; we will correct them to .upToNextMajor() and .upToNextMinor().</div><div class=""><br class=""></div><div class="">– Dave Sweeris' point about this reading wrong in English as .upToNextMajor("x.y.z") (vs. of "x.y.z".upToNextMajor) makes sense to us too. As a result, we're going to clarify this by changing it to .upToNextMajor(after:"x.y.z") and .upToNextMinor(after:"x.y.z").</div><div class=""><br class=""></div><div class="">– We will get rid of .only() in favor of .exact().</div><div class=""><br class=""></div><div class="">– We will remove the .package(url:,branch:) and .package(url:,revision:) initializers. They duplicate the functionality provided by the .branch() and .revision() cases without adding any additional value.</div><div class=""><br class=""></div><div class="">– We are still planning to keep .package(url:,from:), however, even though it duplicates the functionality of the .upToNextMajor() case. The duplication is somewhat undesirable for the reason you mention, but we think it's worth it in this case for two reasons:</div><div class=""><br class=""></div><div class="">* We want to encourage this form of version specification to be used when possible, to establish good norms around semantic versioning in our ecosystem. Calling it out as a special initializer makes it more prominent.</div><div class=""><br class=""></div><div class="">* Since we hope that this form of version specification will be used most of the time, we still think that it's worthwhile to make it really quick and easy to type. Other package managers also have special syntax (e.g. ~>) to make the common version specifiers quick and easy. We want to stay swift-y and descriptive, but .upToNextMajor() is pretty annoying to type every time.</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>- Rick</div><div class=""><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Mar 11, 2017, at 4:41 PM, Xiaodi Wu via swift-build-dev <<a href="mailto:swift-build-dev@swift.org" class="">swift-build-dev@swift.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">On Thu, Mar 9, 2017 at 12:34 AM, Ankit Aggarwal via swift-evolution<span class="Apple-converted-space"> </span><span dir="ltr" class=""><<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>></span><span class="Apple-converted-space"> </span>wrote:<br class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div dir="ltr" class=""><div class="gmail_extra"><span class="gmail-"><div class="gmail_quote"><div class=""> <br class=""></div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word;" class=""><div class=""><span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-"></span><div class="">+1, although I don’t know why we're supporting this:</div><div class=""><pre style="box-sizing: border-box; font-family: sfmono-regular, consolas, 'liberation mono', menlo, courier, monospace; font-size: 13.600000381469727px; margin-top: 0px; margin-bottom: 0px; line-height: 1.45; word-wrap: normal; padding: 16px; overflow: auto; background-color: rgb(246, 248, 250); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: normal; color: rgb(36, 41, 46);" class=""><span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-c" style="box-sizing: border-box;">//</span> 1.5.8 ..< 2.0.0</span>
<span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>.<span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">package</span>(<span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">url</span>: <span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-s" style="box-sizing: border-box; color: rgb(24, 54, 145);"><span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-pds" style="box-sizing: border-box;">"</span>/SwiftyJSON<span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-pds" style="box-sizing: border-box;">"</span></span>, <span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">from</span>: <span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-s" style="box-sizing: border-box; color: rgb(24, 54, 145);"><span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-pds" style="box-sizing: border-box;">"</span>1.5.8<span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-pds" style="box-sizing: border-box;">"</span></span>),</pre><div class="">when, at least as far as I can tell, this:</div><div class=""><pre style="box-sizing: border-box; font-family: sfmono-regular, consolas, 'liberation mono', menlo, courier, monospace; font-size: 13.600000381469727px; margin-top: 0px; margin-bottom: 0px; line-height: 1.45; word-wrap: normal; padding: 16px; overflow: auto; background-color: rgb(246, 248, 250); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: normal; color: rgb(36, 41, 46);" class=""><span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"><span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-c" style="box-sizing: border-box;">//</span> 1.5.8 ..< 2.0.0</span>
<span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);"></span>.<span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">package</span>(<span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">url</span>: <span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-s" style="box-sizing: border-box; color: rgb(24, 54, 145);"><span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-pds" style="box-sizing: border-box;">"</span>/SwiftyJSON<span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-pds" style="box-sizing: border-box;">"</span></span>, .<span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-c1" style="box-sizing: border-box; color: rgb(0, 134, 179);">uptoNextMajor</span>(<span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-s" style="box-sizing: border-box; color: rgb(24, 54, 145);"><span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-pds" style="box-sizing: border-box;">"</span>1.5.8<span class="gmail-m_-5407048787754644256m_3392127985484131722gmail-m_-6685159868071850230pl-pds" style="box-sizing: border-box;">"</span></span>)),</pre><div class="">does the same thing, and the spelling is, at least to me, clearer as well. Dunno, maybe the “from” version is a term of art that I’m just not familiar with.</div></div></div><div class=""><br class=""></div></div></div></blockquote><div class=""><br class=""></div></div></span><div class="">Hi David,</div><div class=""><br class=""></div><div class="">Thank you for the review. </div><div class=""><br class=""></div><div class="">It is true that `from` and `.uptoNextMajor` are exactly same. We think that the most widely used requirement will be `.uptoNextMajor`, so we wanted to provide a shorthand for it.</div></div></div></blockquote></div><br class=""></div><div class="gmail_extra">Kind of a late reply, but overall I think the proposal looks good with the exception of some of these `Requirement` vs. shorthand dichotomies. It looks like the following will be synonyms:</div><div class="gmail_extra"><br class=""></div><div class="gmail_extra">```</div><div class="gmail_extra"><div class="gmail_extra">.package(url: "/SwiftyJSON", branch: "develop")</div><div class="gmail_extra">.package(url: "/SwiftyJSON", .branch("develop"))</div><div class="gmail_extra">```</div><div class="gmail_extra"><br class=""></div><div class="gmail_extra">...as well as...</div><div class="gmail_extra"><br class=""></div><div class="gmail_extra">```</div><div class="gmail_extra">.package(url: "/SwiftyJSON", revision: "e74b07278b926c9ec6f9643455ea00d1ce04a021")</div><div class="gmail_extra"><div class="gmail_extra">.package(url: "/SwiftyJSON", .revision("e74b07278b926c9ec6f9643455ea00d1ce04a021"))</div><div class="">```</div><div class=""><br class=""></div><div class="">It seems odd that there are two subtly different but equivalent ways to spell the same thing like that. But I get that there are possibilities for chaining made available with the latter notation and that the former was promised in a fairly new proposal that's been approved. Where it gets more unsatisfactory, IMO, is that</div><div class=""><br class=""></div><div class="">```</div><div class="">.package(url: "/SwiftyJSON", .only("1.5.8"))<br class=""></div><div class="">.package(url: "/SwiftyJSON", .exact("1.5.8"))<br class=""></div><div class="">```</div><div class=""><br class=""></div><div class="">also seem to mean the same thing. Here, this is actively confusing, because every user will inevitably scratch their head trying to parse out the difference. I also share Dave's concern about</div><div class=""><br class=""></div><div class=""><div class="">```</div><div class="">.package(url: "/SwiftyJSON", from: "1.5.8")</div><div class="">.package(url: "/SwiftyJSON", .uptoNextMajor("1.5.8"))</div><div class="">```</div></div><div class=""><br class=""></div><div class="">There is no intuition that would tell a user that the two are the same; after all, `uptoNextMinor` also starts "from" its argument. I understand that the latter is wordier, but it is not such a grave burden that the argument label couldn't be rewritten also as `uptoNextMajor`.</div><div class=""><br class=""></div><div class="">While we're on the topic, the standard library spelling is `upTo` rather than `upto`, and while it's nitpicky I think it's important to go with the former given that "upto" is not a single word in standard English. If we wanted this to read more grammatically, consider also `.upToNextMajor(from: "1.5.8")`.</div></div></div></div></div></blockquote><br class=""></div><br class=""></div></div></body></html>