Thanks! Very useful. +1 for aliasing "go mod list" to "go list -m"
On 15 September 2018 at 18:59, <thepudds1...@gmail.com> wrote: > > "Maybe having a way for "go mod" to output what is used would be less > confusing?" > > Hi all, > > To see a list of the selected module versions, one way is to use use 'go > list -m all'. This shows the actual versions used based on all of the > various requirements in a build. Sample output: > > $ go list -m all > example.com/my/module > github.com/aws/aws-sdk-go v1.15.35 > github.com/go-ini/ini v1.25.4 > > Another other useful tool is for inspecting requirements is 'go mod graph' > (which prints the module requirement graph), and if you are curious why a > particular module is showing up in your go.mod, you can run 'go mod why -m > <module>' to answer that question. > > You can read some more about these here: > > https://tip.golang.org/cmd/go/#hdr-The_main_module_and_the_build_list > https://tip.golang.org/cmd/go/#hdr-Explain_why_packages_ > or_modules_are_needed > https://tip.golang.org/cmd/go/#hdr-Print_module_requirement_graph > > The first link above also provides a short description of the build list, > which is related to several of the questions raised in this thread: > > ---------------- > "The set of modules providing packages to builds is called the "build > list". The build list initially contains only the main module. Then the go > command adds to the list the exact module versions required by modules > already on the list, recursively, until there is nothing left to add to the > list. If multiple versions of a particular module are added to the list, > then at the end only the latest version (according to semantic version > ordering) is kept for use in the build." > ---------------- > > --thepudds > > On Saturday, September 15, 2018 at 6:34:55 AM UTC-4, Scott Cotton wrote: >> >> Thanks for the clarification. >> >> Maybe having a way for "go mod" to output what is used would be less >> confusing? I would have found so at least. >> >> Cycles crossing major versions may be more problematic. >> >> similarly in the case of coordinating a collection of modules, >> dependency cycles may lead unintentionally to different used versions >> depending on the build context. While the potential use of multiple >> versions is a useful feature of modules, I am not convinced >> that in this context it is desirable. Also, if cycles can span >> arbitrarily large sets of uncoordinated modules, then it seems to me that >> is not the intended use case for cycles and that might be undesirable or >> even lead to the inability of a module maintainer in the cycle >> to effectively propagate an update. >> >> If I come across anything more concrete, I'll file an issue. Just food >> for thought at this point. >> >> Best >> Scott >> >> On Saturday, 15 September 2018 02:45:50 UTC+2, Sameer Ajmani wrote: >>> >>> Go modules can use the listed version or later minor versions. So if B >>> depends on v1.11 of A, then it can also work with v1.12 of A. Therefore a >>> valid set of versions for the build is A v1.12 and B v1.3. >>> >>> On Mon, Sep 10, 2018 at 1:28 AM Scott Cotton <w...@iri-labs.com> wrote: >>> >>>> Well, ok. >>>> >>>> Did you mean if A v1.12 of a module depends on v1.3 of B which depends >>>> on v1.11 of A? >>>> >>>> So go modules don't actually necessarily depend on the listed >>>> dependencies? >>>> >>>> That is quite counteruintintive to me. >>>> >>>> It is much simpler in any case to use acyclic dependencies. >>>> >>>> Scott >>>> >>>> On 10 September 2018 at 04:25, Sameer Ajmani <sam...@golang.org> wrote: >>>> >>>>> I think there's a disconnection between how you and I understand this >>>>> system works. In a given build, there is only a single version of a >>>>> module; >>>>> there cannot be multiple copies, let alone many copies.So if v1.11 of >>>>> module A depends on v1.3 of module B, which in turn depends on v1.12 of >>>>> module A, then the build will choose A v1.12. The is only one version of A >>>>> in the build. >>>>> >>>>> On Sun, Sep 9, 2018 at 1:40 PM Scott Cotton <w...@iri-labs.com> wrote: >>>>> >>>>>> Hi Sameer, >>>>>> >>>>>> Thanks for asking, here are some thoughts, >>>>>> >>>>>> With time, this could create man many many copies of (different >>>>>> versions) of a module. >>>>>> this would slow down fetch, storage, compilation, etc potentially a >>>>>> lot, and it would only >>>>>> get worse and worse over time. >>>>>> >>>>>> if a security patch is applied to the most recent version in a >>>>>> version-compatible space of >>>>>> a module that depends on an earlier version of itself, then the >>>>>> security hole may still exist. >>>>>> Moreover, if the SCC of module dependencies is outside the control of >>>>>> the authors of the >>>>>> module being patched, it seems there is might be no way they could >>>>>> propagate the patch >>>>>> without editing history, which violates the very notion of versioning >>>>>> to begin with. >>>>>> >>>>>> The notion of software moving forward by versioning is in part an >>>>>> increase in reliability, >>>>>> not just security patches, so I would be frightened to use cyclic >>>>>> modules even in code >>>>>> for which I were certain there would be no security patches (like >>>>>> fixed memory, known cpu bounds >>>>>> math algorithms for example) >>>>>> >>>>>> Other than that, it is to me very confusing and counter-intuitive >>>>>> that a version of some software >>>>>> depend on a previous version of itself. Maybe I'm missing something >>>>>> in the modules >>>>>> specification or vision, and maybe, (even hopefully) I am wrong about >>>>>> these concerns. >>>>>> >>>>>> I could list more related ideas, but given that I might be wrong I'll >>>>>> leave it at that. >>>>>> >>>>>> Thanks, >>>>>> >>>>>> Scott >>>>>> >>>>>> >>>>>> On 9 September 2018 at 19:19, Sameer Ajmani <sam...@golang.org> >>>>>> wrote: >>>>>> >>>>>>> If a module depends on an earlier version itself, and successive >>>>>>> versions are backwards compatible, why is it not OK for the current >>>>>>> version >>>>>>> to satisfy that dependency? >>>>>>> >>>>>>> On Sun, Sep 9, 2018 at 1:13 PM Scott Cotton <w...@iri-labs.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Hi Sameer, >>>>>>>> >>>>>>>> When I had a module self-dependency, I considered the fact that it >>>>>>>> worked a bug. I had not followed >>>>>>>> closely enough til this discussion to think of it as expected. >>>>>>>> >>>>>>>> As someone who has a tendency to often ask themself: "worse case >>>>>>>> how can this be a problem?" >>>>>>>> >>>>>>>> the list is indeed long and severe for modules which depend on >>>>>>>> themselves backwards in time. >>>>>>>> >>>>>>>> For cyclic dependencies which are somehow synchronised so that >>>>>>>> there is no backwards in time >>>>>>>> propagation, my impression would be "that's complicated", but I >>>>>>>> can't see offhand how it would be >>>>>>>> as problematic as backward in time self dependencies. >>>>>>>> >>>>>>>> Scott >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On 9 September 2018 at 18:38, Sameer Ajmani <sam...@golang.org> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> With respect to errors, I'm asking how things failed when you had >>>>>>>>> a cyclic module dependency. My expectation is that this should just >>>>>>>>> work. >>>>>>>>> If your module 0.12 has a dependency on itself with min version 0.11, >>>>>>>>> then >>>>>>>>> 0.12 satisfies that dependency (as long as it's following the import >>>>>>>>> compatibility rule, which isn't necessarily expected for pre-1.0 >>>>>>>>> modules). >>>>>>>>> >>>>>>>>> On Sun, Sep 9, 2018 at 9:10 AM Scott Cotton <w...@iri-labs.com> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Hi Sameer, >>>>>>>>>> >>>>>>>>>> I don't know what is considered an error and not an error with >>>>>>>>>> cyclic module dependencies. >>>>>>>>>> >>>>>>>>>> Honestly, it makes my head hurt and simply requires too much >>>>>>>>>> thought that I'd rather spend on the code. >>>>>>>>>> >>>>>>>>>> For example, I don't want to think what will happen to some SCC >>>>>>>>>> in a module dependency graph after >>>>>>>>>> a decade of development, in particular if a module can depend on >>>>>>>>>> an earlier version of itself. >>>>>>>>>> >>>>>>>>>> Scott >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On 9 September 2018 at 14:19, Sameer Ajmani <sam...@golang.org> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> Are you seeing errors when there are cyclic module dependencies? >>>>>>>>>>> As I recall, cyclic dependencies between modules (not packages) >>>>>>>>>>> must be >>>>>>>>>>> allowed: >>>>>>>>>>> https://research.swtch.com/vgo-mvs >>>>>>>>>>> "Note that F 1.1 requires G 1.1, but G 1.1 also requires F 1.1. >>>>>>>>>>> Declaring this kind of cycle can be important when singleton >>>>>>>>>>> functionality >>>>>>>>>>> moves from one module to another. Our algorithms must not assume >>>>>>>>>>> the module >>>>>>>>>>> requirement graph is acyclic." >>>>>>>>>>> On Sun, Sep 9, 2018 at 7:58 AM Scott Cotton <w...@iri-labs.com> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi Paul, >>>>>>>>>>>> >>>>>>>>>>>> On 9 September 2018 at 13:44, Paul Jolly <pa...@myitcv.io> >>>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Hi Scott, >>>>>>>>>>>>> >>>>>>>>>>>>> > Should cyclic module dependencies be allowed? >>>>>>>>>>>>> >>>>>>>>>>>>> Yes, indeed in some situations they are totally necessary. >>>>>>>>>>>>> >>>>>>>>>>>>> I wrote up an experience report on this very topic: >>>>>>>>>>>>> https://gist.github.com/myitcv/79c3f12372e13b0cbbdf0411c8c46 >>>>>>>>>>>>> fd5 >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Interesting. I'm not sure what cyclic module dependencies >>>>>>>>>>>> means. I do know some package managers (not go) boast of having a >>>>>>>>>>>> "solid >>>>>>>>>>>> transitive dependency model". I hope that any cycles in modules >>>>>>>>>>>> dependencies are either avoided or treated in a very clear simple >>>>>>>>>>>> way by >>>>>>>>>>>> go's modules. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> > Should a module, following a cycle, be able to depend on an >>>>>>>>>>>>> earlier version of itself? (I saw this once...) >>>>>>>>>>>>> >>>>>>>>>>>>> I can't see how this would work; indeed I can't even unravel >>>>>>>>>>>>> it in my >>>>>>>>>>>>> head! Do you have a concrete example to help explain? >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Unfortunately, my concrete example is lost in sands of time, so >>>>>>>>>>>> I can only give a rough idea. I had cyclic module dependencies, >>>>>>>>>>>> somewhat >>>>>>>>>>>> unintended, but it crept in via some test case. I was playing >>>>>>>>>>>> with 111 or >>>>>>>>>>>> late 111 release candidate with it and asked it to rebuild go.mod >>>>>>>>>>>> at an >>>>>>>>>>>> untagged HEAD (I think) that was a few commits ahead of say >>>>>>>>>>>> v0.1.2. Then >>>>>>>>>>>> go.mod had that my module required v0.1.1 of itself in go.mod >>>>>>>>>>>> "indirectly". All I could figure out was that the module >>>>>>>>>>>> dependency cycle >>>>>>>>>>>> A -> B -> A had B depending on an older version of A via a test >>>>>>>>>>>> case. >>>>>>>>>>>> >>>>>>>>>>>> Scott >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks, >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Paul >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> Scott Cotton >>>>>>>>>>>> President, IRI France SAS >>>>>>>>>>>> http://www.iri-labs.com >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>>> Google Groups "golang-nuts" group. >>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from >>>>>>>>>>>> it, send an email to golang-nuts...@googlegroups.com. >>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Scott Cotton >>>>>>>>>> President, IRI France SAS >>>>>>>>>> http://www.iri-labs.com >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Scott Cotton >>>>>>>> President, IRI France SAS >>>>>>>> http://www.iri-labs.com >>>>>>>> >>>>>>>> >>>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Scott Cotton >>>>>> President, IRI France SAS >>>>>> http://www.iri-labs.com >>>>>> >>>>>> >>>>>> >>>> >>>> >>>> -- >>>> Scott Cotton >>>> http://www.iri-labs.com >>>> >>>> >>>> -- > You received this message because you are subscribed to a topic in the > Google Groups "golang-nuts" group. > To unsubscribe from this topic, visit https://groups.google.com/d/ > topic/golang-nuts/h2r8ktgOOZI/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- Scott Cotton http://www.iri-labs.com -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.