Text file src/cmd/go/testdata/script/mod_lazy_consistency.txt

     1  # If the root requirements in a lazy module are inconsistent
     2  # (for example, due to a bad hand-edit or git merge),
     3  # they can go unnoticed as long as the module with the violated
     4  # requirement is not used.
     5  # When we load a package from that module, we should spot-check its
     6  # requirements and either emit an error or update the go.mod file.
     7  
     8  cp go.mod go.mod.orig
     9  
    10  
    11  # If we load package x from x.1, we only check the requirements of x,
    12  # which are fine: loading succeeds.
    13  
    14  go list -deps ./usex
    15  stdout '^example.net/x$'
    16  cmp go.mod go.mod.orig
    17  
    18  
    19  # However, if we load needx2, we should load the requirements of needx2.
    20  # Those requirements indicate x.2, not x.1, so the module graph is
    21  # inconsistent and needs to be fixed.
    22  
    23  ! go list -deps ./useneedx2
    24  stderr '^go: updates to go.mod needed; to update it:\n\tgo mod tidy$'
    25  
    26  ! go list -deps example.net/needx2
    27  stderr '^go: updates to go.mod needed; to update it:\n\tgo mod tidy$'
    28  
    29  
    30  # The command printed in the error message should fix the problem.
    31  
    32  go mod tidy
    33  go list -deps ./useneedx2
    34  stdout '^example.net/m/useneedx2$'
    35  stdout '^example.net/needx2$'
    36  stdout '^example.net/x$'
    37  
    38  go list -m all
    39  stdout '^example.net/needx2 v0\.1\.0 '
    40  stdout '^example.net/x v0\.2\.0 '
    41  
    42  
    43  -- go.mod --
    44  module example.net/m
    45  
    46  go 1.17
    47  
    48  require (
    49  	example.net/needx2 v0.1.0
    50  	example.net/x v0.1.0
    51  )
    52  
    53  replace (
    54  	example.net/needx2 v0.1.0 => ./needx2.1
    55  	example.net/x v0.1.0 => ./x.1
    56  	example.net/x v0.2.0 => ./x.2
    57  )
    58  -- useneedx2/useneedx2.go --
    59  package useneedx2
    60  
    61  import _ "example.net/needx2"
    62  -- usex/usex.go --
    63  package usex
    64  
    65  import _ "example.net/x"
    66  
    67  -- x.1/go.mod --
    68  module example.com/x
    69  
    70  go 1.17
    71  -- x.1/x.go --
    72  package x
    73  
    74  -- x.2/go.mod --
    75  module example.com/x
    76  
    77  go 1.17
    78  -- x.2/x.go --
    79  package x
    80  
    81  const AddedInV2 = true
    82  
    83  -- needx2.1/go.mod --
    84  module example.com/x
    85  
    86  go 1.17
    87  
    88  require example.net/x v0.2.0
    89  -- needx2.1/needx2.go --
    90  // Package needx2 needs x v0.2.0 or higher.
    91  package needx2
    92  
    93  import "example.net/x"
    94  
    95  var _ = x.AddedInV2
    96  

View as plain text