...

Text file src/golang.org/x/exp/cmd/gorelease/testdata/internalcompat/README.txt

Documentation: golang.org/x/exp/cmd/gorelease/testdata/internalcompat

     1Modules example.com/internalcompat/{a,b} are copies. One could be a fork
     2of the other. An external package p exposes a type from a package q
     3within the same module.
     4
     5If gorelease ran apidiff on the two modules instead of on the individual
     6packages, then it should not report differences between these packages. The types
     7are distinct, but they correspond (in apidiff terminology), which is the
     8important property when considering differences between modules. More
     9specifically, the fully qualified type names are identical modulo the change
    10to the module path.
    11
    12But at the time gorelease was written, apidiff did not support module
    13comparison. If considered at the package level, the two packages
    14example.com/internalcompat/a/p and example.com/internalcompat/b/p
    15are incompatible, because the packages they refer to are different.
    16
    17So case 2 below would apply if whole modules were being diffed, but
    18it doesn't here because individual packages are being diffed.
    19
    20There are three use cases to consider:
    21
    221. One module substitutes for the other via a `replace` directive.
    23   Only the replacement module is used, and the package paths are effectively
    24   identical, so the types are not distinct.
    252. One module subsititutes for the other by rewriting `import` statements
    26   globally. All references to the original type become references to the
    27   new type, so there is no conflict.
    283. One module substitutes for the other by rewriting some `import` statements
    29   but not others (for example, those within a specific consumer package).
    30   In this case, the types are distinct, and even if there are no changes,
    31   the types are not compatible.

View as plain text