From b405b325a0476b8e3c605b339d749fed182707d5 Mon Sep 17 00:00:00 2001 From: David Hartunian Date: Wed, 21 Jun 2023 10:16:59 -0400 Subject: [PATCH 1/8] upgrade go.mod to go 1.20 --- .github/workflows/ci.yaml | 8 +- go.mod | 2 +- go.sum | 1629 ------------------------------------- 3 files changed, 4 insertions(+), 1635 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ff98d98..e60ecd5 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -2,9 +2,9 @@ name: Go on: push: - branches: [ master ] + branches: [ master, go-1.20-upgrade ] pull_request: - branches: [ master ] + branches: [ master, go-1.20-upgrade ] jobs: @@ -13,10 +13,8 @@ jobs: strategy: matrix: go: - - "1.17" - - "1.18" - - "1.19" - "1.20" + - "1.21" steps: - uses: actions/checkout@v2 diff --git a/go.mod b/go.mod index e82dca3..3b77354 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/cockroachdb/errors -go 1.17 +go 1.20 require ( github.com/cockroachdb/datadriven v1.0.2 diff --git a/go.sum b/go.sum index 98d1124..ed2fdd2 100644 --- a/go.sum +++ b/go.sum @@ -1,650 +1,16 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= -cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= -cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= -cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= -cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= -cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= -cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= -cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= -cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= -cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= -cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= -cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= -cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= -cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= -cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= -cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= -cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= -cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= -cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= -cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= -cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= -cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= -cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= -cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= -cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= -cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= -cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= -cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= -cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= -cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= -cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= -cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= -cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= -cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= -cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= -cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= -cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= -cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= -cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= -cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= -cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= -cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= -cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= -cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= -cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= -cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= -cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= -cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= -cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= -cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= -cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= -cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= -cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= -cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= -cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= -cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= -cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= -cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= -cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= -cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= -cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= -cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= -cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= -cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= -cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= -cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= -cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= -cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= -cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= -cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= -cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= -cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= -cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= -cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= -cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= -cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= -cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= -cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= -cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= -cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= -cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= -cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= -cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= -cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= -cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= -cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= -cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= -cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= -cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= -cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= -cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= -cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= -cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= -cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= -cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= -cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= -cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= -cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= -cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= -cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= -cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= -cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= -cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= -cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= -cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= -cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= -cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= -cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= -cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= -cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= -cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= -cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= -cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= -cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= -cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= -cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= -cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= -cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= -cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= -cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= -cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= -cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= -cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= -cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= -cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= -cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= -cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= -cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= -cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= -cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= -cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= -cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= -cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= -cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= -cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= -cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= -cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= -cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= -cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= -cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= -cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= -cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= -cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= -cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= -cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= -cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= -cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= -cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= -cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= -cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= -cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= -cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= -cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= -cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= -cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= -cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= -cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= -cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= -cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= -cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= -cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= -cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= -cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= -cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= -cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= -cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= -cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= -cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= -cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= -cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= -cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= -cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= -cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= -cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= -cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= -cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= -cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= -cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= -cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= -cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= -cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= -cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= -cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= -cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= -cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= -cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= -cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= -cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= -cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= -cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= -cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= -cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= -cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= -cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= -cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= -cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= -cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= -cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= -cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= -cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= -cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= -cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= -cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= -cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= -cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= -cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= -cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= -cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= -cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= -cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= -cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= -cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= -cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= -cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= -cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= -cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= -cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= -cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= -cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= -cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= -cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= -cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= -cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= -cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= -cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= -cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= -cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= -cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= -cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= -cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= -cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= -cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= -cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= -cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= -cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= -cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= -cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= -cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= -cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= -cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= -cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= -cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= -cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= -cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= -cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= -cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= -cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= -cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= -cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= -cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= -cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= -cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= -cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= -cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= -cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= -cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= -cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= -cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= -cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= -cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= -cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= -cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= -cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= -cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= -cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= -cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= -cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= -cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= -cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= -cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= -cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= -cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= -cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= -cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= -cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= -cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= -cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= -cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= -cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= -cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= -cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= -cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= -cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= -cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= -cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= -cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= -cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= -cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= -cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= -cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= -cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= -cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= -cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= -cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= -cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= -cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= -cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= -cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= -cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= -cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= -cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= -cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= -cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= -cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= -cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= -cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= -cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= -cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= -cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= -cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= -cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= -cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= -cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= -cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= -cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= -cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= -cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= -cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= -cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= -cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= -cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= -cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= -cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= -cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= -cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= -cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= -cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= -cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= -cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= -cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= -cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= -cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= -cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= -cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= -cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= -cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= -cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= -cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= -cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= -cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= -cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= -cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= -cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= -cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= -cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= -cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= -cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= -cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= -cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= -cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= -cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= -cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= -cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= -cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= -cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= -cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= -cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= -cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= -cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= -cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= -cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= -cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= -cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= -cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= -cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= -cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= -cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= -cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= -cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= -cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= -cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= -cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= -cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= -cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= -cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= -cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= -cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= -cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= -cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= -cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= -cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= -cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= -cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= -cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= -cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= -cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= -cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= -cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= -cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= -cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= -cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= -cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= -cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= -cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= -cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= -cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= -cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= -cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= -cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= -cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= -cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= -cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= -cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= -cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= -cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= -cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= -cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= -cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= -cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= -cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= -cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= -cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= -cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= -cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= -cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= -cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= -cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= -cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= -cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= -cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= -cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= -cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= -cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= -cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= -cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= -cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= -cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= -cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= -cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= -cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= -cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= -cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= -cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= -git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet/v6 v6.1.0/go.mod h1:d3ypHeIRNo2+XyqnGA8s+aphtcVpjP5hPwP/Lzo7Ro4= -github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= -github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjKLwalezA0k99cWs5L11HWOAPNjdUZ6RxH1BXbbM= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= -github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= -github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= -github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= -github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= -github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/djherbis/atime v1.1.0/go.mod h1:28OF6Y8s3NQWwacXc5eZTsEsiMzp7LF8MbXE+XJPdBE= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= -github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0= github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= -github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= -github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= -github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= -github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= -github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= -github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= -github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= -github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.1.0/go.mod h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL0= -github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= @@ -653,1080 +19,85 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogo/status v1.1.0 h1:+eIkrewn5q6b30y+g/BJINVVdi2xH7je5MPJ3ZPK3JA= github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= -github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= -github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= -github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= -github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= -github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hydrogen18/memlistener v1.0.0 h1:JR7eDj8HD6eXrc5fWLbSUnfcQFL06PYvCc0DKQnWfaU= github.com/hydrogen18/memlistener v1.0.0/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/httpexpect/v2 v2.3.1/go.mod h1:ICTf89VBKSD3KB0fsyyHviKF8G8hyepP0dOXJPWz3T0= -github.com/iris-contrib/jade v1.1.4/go.mod h1:EDqR+ur9piDl6DUgs6qRrlfzmlx/D5UybogqrXvJTBE= -github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/kataras/blocks v0.0.6/go.mod h1:UK+Iwk0Oxpc0GdoJja7sEildotAUKK1LYeYcVF0COWc= -github.com/kataras/blocks v0.0.7/go.mod h1:UJIU97CluDo0f+zEjbnbkeMRlvYORtmc1304EeyXf4I= -github.com/kataras/golog v0.1.7/go.mod h1:jOSQ+C5fUqsNSwurB/oAHq1IFSb0KI3l6GMa7xB6dZA= -github.com/kataras/iris/v12 v12.2.0-beta5/go.mod h1:q26aoWJ0Knx/00iPKg5iizDK7oQQSPjbD8np0XDh6dc= -github.com/kataras/jwt v0.1.8/go.mod h1:Q5j2IkcIHnfwy+oNY3TVWuEBJNw0ADgCcXK9CaZwV4o= -github.com/kataras/neffos v0.0.20/go.mod h1:srdvC/Uo8mgrApWW0AYtiiLgMbyNPf69qPsd2FhE6MQ= -github.com/kataras/pio v0.0.10/go.mod h1:gS3ui9xSD+lAUpbYnjOGiQyY7sUMJO+EHpiRzhtZ5no= -github.com/kataras/pio v0.0.11/go.mod h1:38hH6SWH6m4DKSYmRhlrCJ5WItwWgCVrTNU62XZyUvI= -github.com/kataras/sitemap v0.0.6/go.mod h1:dW4dOCNs896OR1HmG+dMLdT7JjDk7mYBzoIRwuj5jA4= -github.com/kataras/tunnel v0.0.4/go.mod h1:9FkU4LaeifdMWqZu7o20ojmW4B7hdhv2CMLwfnHGpYw= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= -github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.15.10/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/labstack/echo/v4 v4.9.0/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= -github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailgun/raymond/v2 v2.0.46/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mediocregopher/radix/v3 v3.8.0/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= -github.com/microcosm-cc/bluemonday v1.0.20/go.mod h1:yfBmMi8mxvaZut3Yytv+jTXRY8mxyjJ0/kQBTElld50= -github.com/microcosm-cc/bluemonday v1.0.21/go.mod h1:ytNkv4RrDrLJ2pqlsSI46O6IVXmZOBBD4SaJyDwwTkM= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= -github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= -github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/nats-io/jwt/v2 v2.2.1-0.20220330180145-442af02fd36a/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= -github.com/nats-io/jwt/v2 v2.3.0/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= -github.com/nats-io/nats-server/v2 v2.8.4/go.mod h1:8zZa+Al3WsESfmgSs98Fi06dRWLH5Bnq90m5bKD/eT4= -github.com/nats-io/nats.go v1.15.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= -github.com/nats-io/nats.go v1.16.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= -github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= -github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= -github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= -github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= -github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= -github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shirou/gopsutil/v3 v3.22.8/go.mod h1:s648gW4IywYzUfE/KjXxUsqrqx/T2xO5VqOXxONeRfI= -github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= -github.com/smartystreets/assertions v1.13.0/go.mod h1:wDmR7qL282YbGsPy6H/yAsesrxfxaaSlJazyFLYVFx8= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tdewolff/minify/v2 v2.12.1/go.mod h1:p5pwbvNs1ghbFED/ZW1towGsnnWwzvM8iz8l0eURi9g= -github.com/tdewolff/minify/v2 v2.12.4/go.mod h1:h+SRvSIX3kwgwTFOpSckvSxgax3uy8kZTSF1Ojrr3bk= -github.com/tdewolff/parse/v2 v2.6.3/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= -github.com/tdewolff/parse/v2 v2.6.4/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= -github.com/tdewolff/test v1.0.7/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= -github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= -github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= -gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= -gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= -google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= -google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= -google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= -google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= -google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= -google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= -google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= -google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= google.golang.org/genproto v0.0.0-20230227214838-9b19f0bdc514 h1:rtNKfB++wz5mtDY2t5C8TXlU5y52ojSu7tZo0z7u8eQ= google.golang.org/genproto v0.0.0-20230227214838-9b19f0bdc514/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= -modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= -modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= -modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= -modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= -modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= -modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= -modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= -modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= -modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= -modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= -modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= -modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= -modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= -modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= -modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= -modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= -modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= -modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= -modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= -moul.io/http2curl v1.0.0/go.mod h1:f6cULg+e4Md/oW1cYmwW4IWQOVl2lGbmCNGOHvzX2kE= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= From 8a8366e618091b571dd12bf4d7bc339645bdb8eb Mon Sep 17 00:00:00 2001 From: David Hartunian Date: Thu, 27 Jul 2023 15:27:37 -0400 Subject: [PATCH 2/8] support multi-cause errors in go 1.20 Go 1.20 introduces the idea of an error with multiple causes instead of a single chain. This commit updates the errors library to properly encode, decode, and format these error types. For encoding and decoding we use the existing `EncodedLeaf` type and embellish it with a `causes` field. This is done in order to keep the encoding/decoding backwards compatible. `EncodedLeaf` types containing multiple causes when decided by earlier versions will simply see an opaque leaf with a message inside. The reason the `EncodedWrapper` is not used here is because the wrapper already contains a mandatory single `cause` field that we cannot fill with the multi-errors. A new type cannot be used because it would not be decodable by older versions of this library. --- errbase/adapters_test.go | 26 +++ errbase/decode.go | 13 ++ errbase/encode.go | 30 +++- errbase/opaque.go | 27 +++- errbase/unwrap.go | 20 +++ errbase/unwrap_test.go | 13 ++ errorspb/errors.pb.go | 149 ++++++++++++------ errorspb/errors.proto | 8 +- errutil/as.go | 9 ++ errutil/as_test.go | 42 ++++- errutil_api_test.go | 19 +++ fmttests/datadriven_test.go | 5 +- fmttests/testdata/format/wrap-fmt | 90 +++++++++++ fmttests/testdata/format/wrap-fmt-via-network | 141 +++++++++++++++++ fmttests/testdata/format/wrap-goerr | 90 +++++++++++ .../testdata/format/wrap-goerr-via-network | 125 +++++++++++++++ fmttests/testdata/format/wrap-newf | 96 +++++++++++ .../testdata/format/wrap-newf-via-network | 145 +++++++++++++++++ fmttests/testdata/format/wrap-nofmt | 90 +++++++++++ .../testdata/format/wrap-nofmt-via-network | 141 +++++++++++++++++ fmttests/testdata/format/wrap-pkgerr | 96 +++++++++++ .../testdata/format/wrap-pkgerr-via-network | 141 +++++++++++++++++ markers/markers.go | 11 +- markers/markers_test.go | 106 +++++++++++++ 24 files changed, 1576 insertions(+), 57 deletions(-) create mode 100644 errutil_api_test.go diff --git a/errbase/adapters_test.go b/errbase/adapters_test.go index 0b3bd81..f80c0bf 100644 --- a/errbase/adapters_test.go +++ b/errbase/adapters_test.go @@ -64,7 +64,33 @@ func TestAdaptGoSingleWrapErr(t *testing.T) { tt := testutils.T{T: t} // The library preserves the cause. It's not possible to preserve the fmt // string. + tt.CheckEqual(newErr.Error(), origErr.Error()) + tt.CheckContains(newErr.Error(), "hello") +} + +func TestAdaptBaseGoJoinErr(t *testing.T) { + origErr := goErr.Join(goErr.New("hello"), goErr.New("world")) + t.Logf("start err: %# v", pretty.Formatter(origErr)) + + newErr := network(t, origErr) + + tt := testutils.T{T: t} + // The library preserves the error message. + tt.CheckEqual(newErr.Error(), origErr.Error()) + +} + +func TestAdaptGoMultiWrapErr(t *testing.T) { + origErr := fmt.Errorf("an error %w and also %w", goErr.New("hello"), goErr.New("world")) + t.Logf("start err: %# v", pretty.Formatter(origErr)) + + newErr := network(t, origErr) + + tt := testutils.T{T: t} + // The library preserves the causes. It's not possible to preserve the fmt string. + tt.CheckEqual(newErr.Error(), origErr.Error()) tt.CheckContains(newErr.Error(), "hello") + tt.CheckContains(newErr.Error(), "world") } func TestAdaptPkgWithMessage(t *testing.T) { diff --git a/errbase/decode.go b/errbase/decode.go index 835133a..2de4a30 100644 --- a/errbase/decode.go +++ b/errbase/decode.go @@ -66,6 +66,19 @@ func decodeLeaf(ctx context.Context, enc *errorspb.EncodedErrorLeaf) error { } } + if len(enc.MultierrorCauses) > 0 { + causes := make([]error, len(enc.MultierrorCauses)) + for i, e := range enc.MultierrorCauses { + causes[i] = DecodeError(ctx, *e) + } + leaf := &opaqueLeafCauses{ + causes: causes, + } + leaf.msg = enc.Message + leaf.details = enc.Details + return leaf + } + // No decoder and no error type: we'll keep what we received and // make it ready to re-encode exactly (if the error leaves over the // network again). diff --git a/errbase/encode.go b/errbase/encode.go index ac0faa3..80d4799 100644 --- a/errbase/encode.go +++ b/errbase/encode.go @@ -33,18 +33,24 @@ func EncodeError(ctx context.Context, err error) EncodedError { if cause := UnwrapOnce(err); cause != nil { return encodeWrapper(ctx, err, cause) } - // Not a causer. - return encodeLeaf(ctx, err) + return encodeLeaf(ctx, err, UnwrapMulti(err)) } -// encodeLeaf encodes a leaf error. -func encodeLeaf(ctx context.Context, err error) EncodedError { +// encodeLeaf encodes a leaf error. This function accepts a `causes` +// argument because we encode multi-cause errors using the Leaf +// protobuf. This was done to enable backwards compatibility when +// introducing this functionality since the Wrapper type already has a +// required single `cause` field. +func encodeLeaf(ctx context.Context, err error, causes []error) EncodedError { var msg string var details errorspb.EncodedErrorDetails if e, ok := err.(*opaqueLeaf); ok { msg = e.msg details = e.details + } else if e, ok := err.(*opaqueLeafCauses); ok { + msg = e.msg + details = e.details } else { details.OriginalTypeName, details.ErrorTypeMark.FamilyName, details.ErrorTypeMark.Extension = getTypeDetails(err, false /*onlyFamily*/) @@ -74,11 +80,21 @@ func encodeLeaf(ctx context.Context, err error) EncodedError { details.FullDetails = encodeAsAny(ctx, err, payload) } + var cs []*EncodedError + if len(causes) > 0 { + cs = make([]*EncodedError, len(causes)) + for i, ee := range causes { + ee := EncodeError(ctx, ee) + cs[i] = &ee + } + } + return EncodedError{ Error: &errorspb.EncodedError_Leaf{ Leaf: &errorspb.EncodedErrorLeaf{ - Message: msg, - Details: details, + Message: msg, + Details: details, + MultierrorCauses: cs, }, }, } @@ -207,6 +223,8 @@ func getTypeDetails( switch t := err.(type) { case *opaqueLeaf: return t.details.OriginalTypeName, t.details.ErrorTypeMark.FamilyName, t.details.ErrorTypeMark.Extension + case *opaqueLeafCauses: + return t.details.OriginalTypeName, t.details.ErrorTypeMark.FamilyName, t.details.ErrorTypeMark.Extension case *opaqueWrapper: return t.details.OriginalTypeName, t.details.ErrorTypeMark.FamilyName, t.details.ErrorTypeMark.Extension } diff --git a/errbase/opaque.go b/errbase/opaque.go index 0e7c33d..cd9b38a 100644 --- a/errbase/opaque.go +++ b/errbase/opaque.go @@ -30,11 +30,30 @@ type opaqueLeaf struct { details errorspb.EncodedErrorDetails } +// opaqueLeafCauses is used when receiving an unknown multi-cause +// wrapper type. Its important property is that if it is communicated +// back to some network system that _does_ know about the type, the +// original object can be restored. We encode multi-cause errors as +// leaf nodes over the network, in order to support backwards +// compatibility with existing single-cause wrapper messages. +// +// This struct *must* be initialized with a non-nil causes value in +// order to comply with go stdlib expectations for `Unwrap()`. +type opaqueLeafCauses struct { + opaqueLeaf + causes []error +} + var _ error = (*opaqueLeaf)(nil) var _ SafeDetailer = (*opaqueLeaf)(nil) var _ fmt.Formatter = (*opaqueLeaf)(nil) var _ SafeFormatter = (*opaqueLeaf)(nil) +var _ error = (*opaqueLeafCauses)(nil) +var _ SafeDetailer = (*opaqueLeafCauses)(nil) +var _ fmt.Formatter = (*opaqueLeafCauses)(nil) +var _ SafeFormatter = (*opaqueLeafCauses)(nil) + // opaqueWrapper is used when receiving an unknown wrapper type. // Its important property is that if it is communicated // back to some network system that _does_ know about @@ -70,8 +89,12 @@ func (e *opaqueWrapper) Unwrap() error { return e.cause } func (e *opaqueLeaf) SafeDetails() []string { return e.details.ReportablePayload } func (e *opaqueWrapper) SafeDetails() []string { return e.details.ReportablePayload } -func (e *opaqueLeaf) Format(s fmt.State, verb rune) { FormatError(e, s, verb) } -func (e *opaqueWrapper) Format(s fmt.State, verb rune) { FormatError(e, s, verb) } +func (e *opaqueLeaf) Format(s fmt.State, verb rune) { FormatError(e, s, verb) } +func (e *opaqueLeafCauses) Format(s fmt.State, verb rune) { FormatError(e, s, verb) } +func (e *opaqueWrapper) Format(s fmt.State, verb rune) { FormatError(e, s, verb) } + +// opaqueLeafCauses is a multi-cause wrapper +func (e *opaqueLeafCauses) Unwrap() []error { return e.causes } func (e *opaqueLeaf) SafeFormatError(p Printer) (next error) { p.Print(e.msg) diff --git a/errbase/unwrap.go b/errbase/unwrap.go index 031cf7f..bed4c9a 100644 --- a/errbase/unwrap.go +++ b/errbase/unwrap.go @@ -27,6 +27,16 @@ package errbase // It supports both errors implementing causer (`Cause()` method, from // github.com/pkg/errors) and `Wrapper` (`Unwrap()` method, from the // Go 2 error proposal). +// +// UnwrapOnce treats multi-errors (those implementing the +// `Unwrap() []error` interface as leaf-nodes since they cannot +// reasonably be iterated through to a single cause. These errors +// are typically constructed as a result of `fmt.Errorf` which results +// in a `wrapErrors` instance that contains an interpolated error +// string along with a list of causes. +// +// The go stdlib does not define output on `Unwrap()` for a multi-cause +// error, so we default to nil here. func UnwrapOnce(err error) (cause error) { switch e := err.(type) { case interface{ Cause() error }: @@ -39,6 +49,7 @@ func UnwrapOnce(err error) (cause error) { // UnwrapAll accesses the root cause object of the error. // If the error has no cause (leaf error), it is returned directly. +// UnwrapAll treats multi-errors as leaf nodes. func UnwrapAll(err error) error { for { if cause := UnwrapOnce(err); cause != nil { @@ -49,3 +60,12 @@ func UnwrapAll(err error) error { } return err } + +// UnwrapMulti access the slice of causes that an error contains, if it is a +// multi-error. +func UnwrapMulti(err error) []error { + if me, ok := err.(interface{ Unwrap() []error }); ok { + return me.Unwrap() + } + return nil +} diff --git a/errbase/unwrap_test.go b/errbase/unwrap_test.go index 5699f35..725420d 100644 --- a/errbase/unwrap_test.go +++ b/errbase/unwrap_test.go @@ -16,6 +16,7 @@ package errbase_test import ( "errors" + "fmt" "testing" "github.com/cockroachdb/errors/errbase" @@ -58,6 +59,18 @@ func TestMixedErrorWrapping(t *testing.T) { tt.CheckEqual(errbase.UnwrapAll(err3), err) } +func TestMultiErrorUnwrap(t *testing.T) { + tt := testutils.T{T: t} + + err := errors.New("hello") + err2 := pkgErr.WithMessage(err, "woo") + err3 := fmt.Errorf("%w %w", err, err2) + + tt.CheckEqual(errbase.UnwrapOnce(err3), nil) + tt.CheckEqual(errbase.UnwrapAll(err3), err3) + tt.CheckDeepEqual(errbase.UnwrapMulti(err3), []error{err, err2}) +} + type myWrapper struct{ cause error } func (w *myWrapper) Error() string { return w.cause.Error() } diff --git a/errorspb/errors.pb.go b/errorspb/errors.pb.go index 51c3fd6..3ec6bfe 100644 --- a/errorspb/errors.pb.go +++ b/errorspb/errors.pb.go @@ -140,7 +140,7 @@ func (*EncodedError) XXX_OneofWrappers() []interface{} { } // EncodedErrorLeaf is the wire-encodable representation -// of an error leaf. +// of an error leaf or a multi-cause wrapper from go 1.20+ type EncodedErrorLeaf struct { // The main error message (mandatory), that can be printed to human // users and may contain PII. This contains the value of the leaf @@ -148,6 +148,11 @@ type EncodedErrorLeaf struct { Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` // The error details. Details EncodedErrorDetails `protobuf:"bytes,2,opt,name=details,proto3" json:"details"` + // multierror_causes is a list of errors that contain the causal tree + // of this leaf. If this field is not empty, then this leaf encodes + // an error from go 1.20 or later that encodes multiple causes in its + // chain. + MultierrorCauses []*EncodedError `protobuf:"bytes,3,rep,name=multierror_causes,json=multierrorCauses,proto3" json:"multierror_causes,omitempty"` } func (m *EncodedErrorLeaf) Reset() { *m = EncodedErrorLeaf{} } @@ -433,49 +438,51 @@ func init() { func init() { proto.RegisterFile("errorspb/errors.proto", fileDescriptor_ddc818d0729874b8) } var fileDescriptor_ddc818d0729874b8 = []byte{ - // 665 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x53, 0x4f, 0x4f, 0x13, 0x41, - 0x14, 0xdf, 0xa5, 0x85, 0xb6, 0xaf, 0x05, 0xeb, 0x88, 0xc9, 0x42, 0x64, 0x29, 0xab, 0x89, 0x04, - 0x75, 0x9b, 0xe0, 0xc1, 0xc4, 0x18, 0x13, 0x1a, 0x0b, 0x98, 0x00, 0x92, 0x05, 0xa3, 0xf1, 0xb2, - 0x99, 0x6e, 0xa7, 0xcb, 0x84, 0xdd, 0x9d, 0xcd, 0xcc, 0x36, 0xb2, 0xdf, 0xc2, 0xc4, 0x2f, 0xc5, - 0x91, 0x23, 0x27, 0xa3, 0x25, 0x7e, 0x04, 0x6f, 0x1e, 0xcc, 0xce, 0xec, 0xd2, 0xa2, 0x28, 0x07, - 0x6f, 0x6f, 0x7e, 0xef, 0xf7, 0xfe, 0xfe, 0xde, 0xc0, 0x5d, 0xc2, 0x39, 0xe3, 0x22, 0xee, 0xb5, - 0x95, 0x61, 0xc7, 0x9c, 0x25, 0x0c, 0x21, 0x8f, 0x79, 0xc7, 0x9c, 0x61, 0xef, 0xc8, 0x2e, 0x08, - 0x8b, 0x0b, 0x3e, 0x63, 0x7e, 0x40, 0xda, 0x92, 0xd1, 0x1b, 0x0e, 0xda, 0x38, 0x4a, 0x15, 0x7d, - 0x71, 0xde, 0x67, 0x3e, 0x93, 0x66, 0x3b, 0xb3, 0x14, 0x6a, 0x7d, 0xd6, 0xa1, 0xd1, 0x8d, 0x3c, - 0xd6, 0x27, 0xfd, 0x6e, 0x96, 0x04, 0x3d, 0x87, 0x72, 0x40, 0xf0, 0xc0, 0xd0, 0x5b, 0xfa, 0x6a, - 0x7d, 0xfd, 0x81, 0xfd, 0x67, 0x11, 0x7b, 0x92, 0xbf, 0x43, 0xf0, 0x60, 0x5b, 0x73, 0x64, 0x0c, - 0x7a, 0x09, 0x95, 0x8f, 0x1c, 0xc7, 0x31, 0xe1, 0xc6, 0x94, 0x0c, 0xb7, 0xfe, 0x11, 0xfe, 0x4e, - 0x31, 0xb7, 0x35, 0xa7, 0x08, 0xea, 0x54, 0x60, 0x5a, 0xb2, 0xac, 0x21, 0x34, 0x7f, 0x2f, 0x82, - 0x0c, 0xa8, 0x84, 0x44, 0x08, 0xec, 0x13, 0xd9, 0x5b, 0xcd, 0x29, 0x9e, 0x68, 0x0b, 0x2a, 0x7d, - 0x92, 0x60, 0x1a, 0x88, 0xbc, 0xec, 0xc3, 0x9b, 0xba, 0x7e, 0xa5, 0xe8, 0x9d, 0xf2, 0xe9, 0x97, - 0x65, 0xcd, 0x29, 0xa2, 0xad, 0x9f, 0x3a, 0xdc, 0xb9, 0x86, 0x86, 0x1e, 0x03, 0x62, 0x9c, 0xfa, - 0x34, 0xc2, 0x81, 0x9b, 0xa4, 0x31, 0x71, 0x23, 0x1c, 0x16, 0x5d, 0x34, 0x0b, 0xcf, 0x61, 0x1a, - 0x93, 0x3d, 0x1c, 0x12, 0xf4, 0x06, 0x6e, 0xc9, 0xa2, 0x8a, 0x1a, 0x62, 0x7e, 0x9c, 0xb7, 0xb5, - 0x72, 0x6d, 0x5b, 0x99, 0x91, 0xc5, 0xee, 0x62, 0x7e, 0x9c, 0x37, 0x34, 0x4b, 0x26, 0x41, 0xf4, - 0x04, 0x10, 0x27, 0x31, 0xe3, 0x09, 0xee, 0x05, 0xc4, 0x8d, 0x71, 0x1a, 0x30, 0xdc, 0x37, 0x4a, - 0xad, 0xd2, 0x6a, 0xcd, 0xb9, 0x3d, 0xf6, 0xec, 0x2b, 0x07, 0x7a, 0x06, 0x8d, 0xc1, 0x30, 0x08, - 0xdc, 0x62, 0x27, 0x65, 0x59, 0x7c, 0xde, 0x56, 0xa7, 0x61, 0x17, 0xa7, 0x61, 0x6f, 0x44, 0xa9, - 0x53, 0xcf, 0x98, 0xf9, 0x98, 0xd6, 0x0f, 0x1d, 0xe6, 0xae, 0x8a, 0x83, 0x5e, 0xc0, 0xb4, 0x87, - 0x87, 0x82, 0xe4, 0xe7, 0xd0, 0xba, 0x69, 0xb1, 0xf9, 0x00, 0x2a, 0x68, 0x52, 0xb2, 0xa9, 0xbf, - 0x4a, 0x56, 0xfa, 0x1f, 0xc9, 0x50, 0x07, 0x1a, 0x79, 0x4e, 0xb9, 0x6e, 0x39, 0xec, 0xdc, 0xfa, - 0xf2, 0x75, 0xd9, 0x76, 0x15, 0x2f, 0x5b, 0xab, 0x53, 0x0f, 0xc7, 0x0f, 0x6b, 0x0f, 0x66, 0xaf, - 0xa8, 0x80, 0x96, 0xa1, 0x3e, 0xc0, 0x21, 0x0d, 0xd2, 0x49, 0xa1, 0x41, 0x41, 0x52, 0xe2, 0x7b, - 0x50, 0x23, 0x27, 0x09, 0x89, 0x04, 0x65, 0x51, 0x3e, 0xda, 0x18, 0xb0, 0xd6, 0x60, 0xee, 0x20, - 0xe1, 0x34, 0xf2, 0x45, 0x21, 0x89, 0x31, 0x1e, 0x57, 0x97, 0xb2, 0x5d, 0x9e, 0xdc, 0xf7, 0xec, - 0xff, 0x71, 0x1e, 0xb1, 0x82, 0xba, 0x04, 0x90, 0x5d, 0x94, 0x4b, 0x32, 0x50, 0x96, 0x2e, 0x39, - 0xb5, 0x0c, 0x91, 0x2c, 0x84, 0xa0, 0x8c, 0xb9, 0x77, 0x94, 0x17, 0x95, 0x36, 0xba, 0x0f, 0xb3, - 0x54, 0xb8, 0x31, 0xe1, 0x21, 0x15, 0xb2, 0xa3, 0x6c, 0xa5, 0x55, 0xa7, 0x41, 0xc5, 0xfe, 0x25, - 0x86, 0x16, 0xa0, 0x4a, 0x85, 0x4b, 0x4e, 0xa8, 0x48, 0xe4, 0x92, 0xaa, 0x4e, 0x85, 0x8a, 0x6e, - 0xf6, 0x44, 0x2d, 0x68, 0x50, 0xe1, 0x46, 0x2c, 0xc9, 0xdd, 0xd3, 0xd2, 0x0d, 0x54, 0xec, 0xb1, - 0x44, 0x31, 0x96, 0x00, 0xa8, 0x70, 0x13, 0x1a, 0x12, 0x36, 0x4c, 0x8c, 0x19, 0xe9, 0xaf, 0x51, - 0x71, 0xa8, 0x00, 0xb4, 0x22, 0x13, 0x24, 0x24, 0x8c, 0x19, 0xc7, 0x3c, 0x35, 0x2a, 0x92, 0x50, - 0xa7, 0xe2, 0xb0, 0x80, 0xd6, 0x1e, 0x41, 0x7d, 0x62, 0xff, 0x08, 0x60, 0x66, 0xdf, 0xe9, 0x6e, - 0xbe, 0x7e, 0xdf, 0xd4, 0x50, 0x13, 0x1a, 0x9b, 0x6f, 0x77, 0x76, 0xdc, 0xdd, 0xee, 0xc1, 0xc1, - 0xc6, 0x56, 0xb7, 0xa9, 0x77, 0xd6, 0x4e, 0xbf, 0x99, 0xda, 0xe9, 0xc8, 0xd4, 0xcf, 0x46, 0xa6, - 0x7e, 0x3e, 0x32, 0xf5, 0xaf, 0x23, 0x53, 0xff, 0x74, 0x61, 0x6a, 0x67, 0x17, 0xa6, 0x76, 0x7e, - 0x61, 0x6a, 0x1f, 0xaa, 0x85, 0xaa, 0xbd, 0x19, 0x79, 0xcf, 0x4f, 0x7f, 0x05, 0x00, 0x00, 0xff, - 0xff, 0x21, 0x83, 0x20, 0x6a, 0x25, 0x05, 0x00, 0x00, + // 693 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x53, 0x41, 0x4f, 0x13, 0x41, + 0x14, 0xde, 0xa5, 0x85, 0xb6, 0xaf, 0x05, 0xcb, 0x88, 0xc9, 0x42, 0x64, 0x29, 0xab, 0x89, 0x04, + 0x75, 0x9b, 0xe0, 0xc1, 0xc4, 0x18, 0x13, 0xaa, 0x05, 0x4c, 0x28, 0x92, 0x05, 0xa3, 0xf1, 0xb2, + 0x99, 0xb6, 0xd3, 0x65, 0xc2, 0xee, 0xce, 0x66, 0x66, 0x1b, 0xd9, 0x7f, 0x61, 0xe2, 0x5f, 0xf2, + 0xc0, 0x91, 0x23, 0x27, 0xa3, 0x25, 0xfe, 0x04, 0x6f, 0x1e, 0xcc, 0xce, 0xee, 0xd8, 0xa2, 0x28, + 0x07, 0x6f, 0x6f, 0xde, 0xfb, 0xbe, 0xf7, 0xde, 0xf7, 0xde, 0x1b, 0xb8, 0x45, 0x38, 0x67, 0x5c, + 0x44, 0xdd, 0x66, 0x66, 0xd8, 0x11, 0x67, 0x31, 0x43, 0xa8, 0xc7, 0x7a, 0xc7, 0x9c, 0xe1, 0xde, + 0x91, 0xad, 0x00, 0x4b, 0x8b, 0x1e, 0x63, 0x9e, 0x4f, 0x9a, 0x12, 0xd1, 0x1d, 0x0e, 0x9a, 0x38, + 0x4c, 0x32, 0xf8, 0xd2, 0x82, 0xc7, 0x3c, 0x26, 0xcd, 0x66, 0x6a, 0x65, 0x5e, 0xeb, 0xa3, 0x0e, + 0xb5, 0x76, 0xd8, 0x63, 0x7d, 0xd2, 0x6f, 0xa7, 0x49, 0xd0, 0x13, 0x28, 0xfa, 0x04, 0x0f, 0x0c, + 0xbd, 0xa1, 0xaf, 0x55, 0x37, 0xee, 0xda, 0x7f, 0x16, 0xb1, 0x27, 0xf1, 0xbb, 0x04, 0x0f, 0x76, + 0x34, 0x47, 0x72, 0xd0, 0x33, 0x28, 0xbd, 0xe7, 0x38, 0x8a, 0x08, 0x37, 0xa6, 0x24, 0xdd, 0xfa, + 0x07, 0xfd, 0x4d, 0x86, 0xdc, 0xd1, 0x1c, 0x45, 0x6a, 0x95, 0x60, 0x5a, 0xa2, 0xac, 0x4f, 0x3a, + 0xd4, 0x7f, 0xaf, 0x82, 0x0c, 0x28, 0x05, 0x44, 0x08, 0xec, 0x11, 0xd9, 0x5c, 0xc5, 0x51, 0x4f, + 0xb4, 0x0d, 0xa5, 0x3e, 0x89, 0x31, 0xf5, 0x45, 0x5e, 0xf7, 0xde, 0x75, 0x6d, 0xbf, 0xc8, 0xe0, + 0xad, 0xe2, 0xe9, 0xe7, 0x15, 0xcd, 0x51, 0x6c, 0xd4, 0x81, 0xf9, 0x60, 0xe8, 0xc7, 0x54, 0x72, + 0xdc, 0x1e, 0x1e, 0x0a, 0x22, 0x8c, 0x42, 0xa3, 0xb0, 0x56, 0xdd, 0x68, 0x5c, 0x97, 0xd2, 0xa9, + 0x8f, 0xa9, 0xcf, 0x25, 0xd3, 0xfa, 0xa1, 0xc3, 0xcd, 0x2b, 0xaa, 0xa2, 0x07, 0x80, 0x18, 0xa7, + 0x1e, 0x0d, 0xb1, 0xef, 0xc6, 0x49, 0x44, 0xdc, 0x10, 0x07, 0x4a, 0x54, 0x5d, 0x45, 0x0e, 0x93, + 0x88, 0xec, 0xe1, 0x80, 0xa0, 0x57, 0x70, 0x23, 0xeb, 0x47, 0x42, 0x03, 0xcc, 0x8f, 0x73, 0x95, + 0xab, 0x57, 0xb6, 0x94, 0x1a, 0x29, 0xb7, 0x83, 0xf9, 0x71, 0xae, 0x6f, 0x96, 0x4c, 0x3a, 0xd1, + 0x43, 0x40, 0x9c, 0x44, 0x8c, 0xc7, 0xb8, 0xeb, 0x13, 0x37, 0xc2, 0x89, 0xcf, 0x70, 0x5f, 0xca, + 0xac, 0x38, 0xf3, 0xe3, 0xc8, 0x7e, 0x16, 0x40, 0x8f, 0xa1, 0x36, 0x18, 0xfa, 0xbe, 0xab, 0x46, + 0x5c, 0x94, 0xc5, 0x17, 0xec, 0xec, 0xd4, 0x6c, 0x75, 0x6a, 0xf6, 0x66, 0x98, 0x38, 0xd5, 0x14, + 0x99, 0xcb, 0xb4, 0xbe, 0xeb, 0x30, 0x77, 0x79, 0xd9, 0xe8, 0x29, 0x4c, 0xcb, 0xa9, 0xe6, 0xe7, + 0x75, 0xed, 0x50, 0x73, 0x01, 0x19, 0x69, 0xf2, 0x02, 0xa6, 0xfe, 0x7a, 0x01, 0x85, 0xff, 0xba, + 0x80, 0x16, 0xd4, 0xf2, 0x9c, 0x72, 0xdc, 0x52, 0xec, 0xdc, 0xc6, 0xca, 0x55, 0xd9, 0x3a, 0x19, + 0x2e, 0x1d, 0xab, 0x53, 0x0d, 0xc6, 0x0f, 0x6b, 0x0f, 0x66, 0x2f, 0x6d, 0x01, 0xad, 0x40, 0x75, + 0x80, 0x03, 0xea, 0x27, 0x93, 0x8b, 0x86, 0xcc, 0x25, 0x57, 0x7c, 0x1b, 0x2a, 0xe4, 0x24, 0x26, + 0xa1, 0xa0, 0x2c, 0xcc, 0xa5, 0x8d, 0x1d, 0xd6, 0x3a, 0xcc, 0x1d, 0xc4, 0x9c, 0x86, 0x9e, 0x50, + 0x2b, 0x31, 0xc6, 0x72, 0x75, 0xb9, 0x36, 0xf5, 0xb4, 0xbe, 0xa5, 0xff, 0x99, 0xf3, 0x90, 0x29, + 0xe8, 0x32, 0x40, 0x7a, 0x51, 0x2e, 0x49, 0x9d, 0xb2, 0x74, 0xc1, 0xa9, 0xa4, 0x1e, 0x89, 0x42, + 0x08, 0x8a, 0x98, 0xf7, 0x8e, 0xf2, 0xa2, 0xd2, 0x46, 0x77, 0x60, 0x96, 0x0a, 0x37, 0x22, 0x3c, + 0xa0, 0x42, 0x76, 0x94, 0x8e, 0xb4, 0xec, 0xd4, 0xa8, 0xd8, 0xff, 0xe5, 0x43, 0x8b, 0x50, 0xa6, + 0xc2, 0x25, 0x27, 0x54, 0xc4, 0x72, 0x48, 0x65, 0xa7, 0x44, 0x45, 0x3b, 0x7d, 0xa2, 0x06, 0xd4, + 0xa8, 0x70, 0x43, 0x16, 0xe7, 0xe1, 0x69, 0x19, 0x06, 0x2a, 0xf6, 0x58, 0x9c, 0x21, 0x96, 0x01, + 0xa8, 0x70, 0x63, 0x1a, 0x10, 0x36, 0x8c, 0x8d, 0x19, 0x19, 0xaf, 0x50, 0x71, 0x98, 0x39, 0xd0, + 0xaa, 0x4c, 0x10, 0x93, 0x20, 0x62, 0x1c, 0xf3, 0xc4, 0x28, 0x49, 0x40, 0x95, 0x8a, 0x43, 0xe5, + 0x5a, 0xbf, 0x0f, 0xd5, 0x89, 0xf9, 0x23, 0x80, 0x99, 0x7d, 0xa7, 0xbd, 0xf5, 0xf2, 0x6d, 0x5d, + 0x43, 0x75, 0xa8, 0x6d, 0xbd, 0xde, 0xdd, 0x75, 0x3b, 0xed, 0x83, 0x83, 0xcd, 0xed, 0x76, 0x5d, + 0x6f, 0xad, 0x9f, 0x7e, 0x35, 0xb5, 0xd3, 0x91, 0xa9, 0x9f, 0x8d, 0x4c, 0xfd, 0x7c, 0x64, 0xea, + 0x5f, 0x46, 0xa6, 0xfe, 0xe1, 0xc2, 0xd4, 0xce, 0x2e, 0x4c, 0xed, 0xfc, 0xc2, 0xd4, 0xde, 0x95, + 0xd5, 0x56, 0xbb, 0x33, 0xf2, 0x9e, 0x1f, 0xfd, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xd7, 0x2c, 0x21, + 0xe3, 0x75, 0x05, 0x00, 0x00, } func (m *EncodedError) Marshal() (dAtA []byte, err error) { @@ -572,6 +579,20 @@ func (m *EncodedErrorLeaf) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.MultierrorCauses) > 0 { + for iNdEx := len(m.MultierrorCauses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.MultierrorCauses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintErrors(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } { size, err := m.Details.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -921,6 +942,12 @@ func (m *EncodedErrorLeaf) Size() (n int) { } l = m.Details.Size() n += 1 + l + sovErrors(uint64(l)) + if len(m.MultierrorCauses) > 0 { + for _, e := range m.MultierrorCauses { + l = e.Size() + n += 1 + l + sovErrors(uint64(l)) + } + } return n } @@ -1252,6 +1279,40 @@ func (m *EncodedErrorLeaf) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MultierrorCauses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowErrors + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthErrors + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthErrors + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MultierrorCauses = append(m.MultierrorCauses, &EncodedError{}) + if err := m.MultierrorCauses[len(m.MultierrorCauses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipErrors(dAtA[iNdEx:]) diff --git a/errorspb/errors.proto b/errorspb/errors.proto index 075672a..aba161d 100644 --- a/errorspb/errors.proto +++ b/errorspb/errors.proto @@ -17,7 +17,7 @@ message EncodedError { } // EncodedErrorLeaf is the wire-encodable representation -// of an error leaf. +// of an error leaf or a multi-cause wrapper from go 1.20+ message EncodedErrorLeaf { // The main error message (mandatory), that can be printed to human // users and may contain PII. This contains the value of the leaf @@ -26,6 +26,12 @@ message EncodedErrorLeaf { // The error details. EncodedErrorDetails details = 2 [(gogoproto.nullable) = false]; + + // multierror_causes is a list of errors that contain the causal tree + // of this leaf. If this field is not empty, then this leaf encodes + // an error from go 1.20 or later that encodes multiple causes in its + // chain. + repeated EncodedError multierror_causes = 3; } message EncodedErrorDetails { diff --git a/errutil/as.go b/errutil/as.go index bf45e45..ad2a8fc 100644 --- a/errutil/as.go +++ b/errutil/as.go @@ -58,7 +58,16 @@ func As(err error, target interface{}) bool { if x, ok := c.(interface{ As(interface{}) bool }); ok && x.As(target) { return true } + + // If at any point in the single cause chain including the top, + // we encounter a multi-cause chain, recursively explore it. + for _, cause := range errbase.UnwrapMulti(c) { + if As(cause, target) { + return true + } + } } + return false } diff --git a/errutil/as_test.go b/errutil/as_test.go index bbe4aae..38d75be 100644 --- a/errutil/as_test.go +++ b/errutil/as_test.go @@ -15,6 +15,7 @@ package errutil_test import ( + goErr "errors" "fmt" "testing" @@ -54,11 +55,39 @@ func TestAs(t *testing.T) { tt.Check(errors.As(wwErr, &mywSlot)) tt.Check(errors.Is(mywSlot, refwErr)) - // Check that it works even if hidden in multi-error + // Check that it works even if hidden in wrapError multiWrapErr := fmt.Errorf("test %w test", errors.Wrap(refwErr, "hidden")) mywSlot = nil tt.Check(errors.As(multiWrapErr, &mywSlot)) tt.Check(errors.Is(mywSlot, refwErr)) + + // Check that it works even if hidden in multi-cause wrapErrors + multiWrapErr = fmt.Errorf("error: %w and %w", errors.Wrap(refwErr, "hidden"), errors.New("world")) + mywSlot = nil + tt.Check(errors.As(multiWrapErr, &mywSlot)) + tt.Check(errors.Is(mywSlot, refwErr)) + + // Check that it works even if hidden in custom multi-error + multiWrapErr = &myMultiWrapper{ + causes: []error{errors.Wrap(refwErr, "hidden"), errors.New("world")}, + msg: "errors", + } + mywSlot = nil + tt.Check(errors.As(multiWrapErr, &mywSlot)) + tt.Check(errors.Is(mywSlot, refwErr)) + + // Check that it works even if hidden in a multi-level multi-cause chain + multiWrapErr = fmt.Errorf("error: %w and %w", + &myMultiWrapper{ + causes: []error{errors.New("ignoreme"), errors.New("also ignore")}, + msg: "red herring", + }, &myMultiWrapper{ + causes: []error{errors.Wrap(refwErr, "hidden"), errors.New("world")}, + msg: "errors", + }) + mywSlot = nil + tt.Check(errors.As(multiWrapErr, &mywSlot)) + tt.Check(errors.Is(mywSlot, refwErr)) } type myType struct{ msg string } @@ -71,3 +100,14 @@ type myWrapper struct { } func (m *myWrapper) Error() string { return fmt.Sprintf("%s: %v", m.msg, m.cause) } + +type myMultiWrapper struct { + causes []error + msg string +} + +func (m *myMultiWrapper) Error() string { return fmt.Sprintf("%s: %v", m.msg, goErr.Join(m.causes...)) } + +func (m *myMultiWrapper) Unwrap() []error { + return m.causes +} diff --git a/errutil_api_test.go b/errutil_api_test.go new file mode 100644 index 0000000..cd3fa34 --- /dev/null +++ b/errutil_api_test.go @@ -0,0 +1,19 @@ +package errors_test + +import ( + "fmt" + "testing" + + "github.com/cockroachdb/errors" + "github.com/cockroachdb/errors/testutils" +) + +func TestUnwrap(t *testing.T) { + tt := testutils.T{t} + + e := fmt.Errorf("foo %w %w", fmt.Errorf("bar"), fmt.Errorf("baz")) + + // Compatibility with go 1.20: Unwrap() on a multierror returns nil + // (per API documentation) + tt.Check(errors.Unwrap(e) == nil) +} diff --git a/fmttests/datadriven_test.go b/fmttests/datadriven_test.go index 2e10880..90aafd1 100644 --- a/fmttests/datadriven_test.go +++ b/fmttests/datadriven_test.go @@ -157,6 +157,9 @@ var wrapCommands = map[string]commandFn{ "go-errorf-suffix": func(e error, args []arg) error { return fmt.Errorf("%w - %s", e, strfy(args)) }, + "go-errorf-multi": func(err error, args []arg) error { + return fmt.Errorf("%s - %w %w", strfy(args), err, pkgErr.New("sibling error in wrapper")) + }, "opaque": func(err error, _ []arg) error { return errbase.DecodeError(context.Background(), errbase.EncodeError(context.Background(), err)) @@ -300,7 +303,7 @@ func init() { // too. Most implementation of Format() are incomplete and unable to // emit a "Go representation", so this breaks. // - "goerr", "go-errorf", "go-errorf-suffix", "fmt-old", "fmt-old-delegate", + "goerr", "go-errorf", "go-errorf-suffix", "go-errorf-multi", "fmt-old", "fmt-old-delegate", "os-syscall", "os-link", "os-path", diff --git a/fmttests/testdata/format/wrap-fmt b/fmttests/testdata/format/wrap-fmt index 1437070..91f1008 100644 --- a/fmttests/testdata/format/wrap-fmt +++ b/fmttests/testdata/format/wrap-fmt @@ -1605,6 +1605,96 @@ Type: "*fmttests.errFmt" Title: "×" (NO STACKTRACE) +run +fmt innerone innertwo +go-errorf-multi outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapErrors{msg:"outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", errs:[]error{(*fmttests.errFmt)(0xAAAABBBB), (*errors.fundamental)(0xAAAABBBB)}} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper +Error types: (1) *fmt.wrapErrors +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - innerone› +‹ | innertwo sibling error in wrapper› +Error types: (1) *fmt.wrapErrors +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Error types: (1) *fmt.wrapErrors +-- report composition: +*fmt.wrapErrors +== Extra "error types" +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmt.wrapErrors" +Title: "×" +(NO STACKTRACE) + run fmt innerone innertwo go-errorf-suffix outerthree outerfour diff --git a/fmttests/testdata/format/wrap-fmt-via-network b/fmttests/testdata/format/wrap-fmt-via-network index ae9b3c4..c653d87 100644 --- a/fmttests/testdata/format/wrap-fmt-via-network +++ b/fmttests/testdata/format/wrap-fmt-via-network @@ -2072,6 +2072,147 @@ Type: "*fmttests.errFmt" Title: "×" (NO STACKTRACE) +run +fmt innerone innertwo +go-errorf-multi outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - innerone› + | ‹innertwo sibling error in wrapper› + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +-- report composition: +*fmt.wrapErrors +== Extra "error types" +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmt.wrapErrors" +Title: "×" +(NO STACKTRACE) + run fmt innerone innertwo go-errorf-suffix outerthree outerfour diff --git a/fmttests/testdata/format/wrap-goerr b/fmttests/testdata/format/wrap-goerr index 2abf1cd..e3594ef 100644 --- a/fmttests/testdata/format/wrap-goerr +++ b/fmttests/testdata/format/wrap-goerr @@ -1460,6 +1460,96 @@ Type: "*errors.errorString" Title: "×" (NO STACKTRACE) +run +goerr innerone innertwo +go-errorf-multi outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapErrors{msg:"outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", errs:[]error{(*errors.errorString)(0xAAAABBBB), (*errors.fundamental)(0xAAAABBBB)}} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper +Error types: (1) *fmt.wrapErrors +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - innerone› +‹ | innertwo sibling error in wrapper› +Error types: (1) *fmt.wrapErrors +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Error types: (1) *fmt.wrapErrors +-- report composition: +*fmt.wrapErrors +== Extra "error types" +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmt.wrapErrors" +Title: "×" +(NO STACKTRACE) + run goerr innerone innertwo go-errorf-suffix outerthree outerfour diff --git a/fmttests/testdata/format/wrap-goerr-via-network b/fmttests/testdata/format/wrap-goerr-via-network index eb68be1..159524e 100644 --- a/fmttests/testdata/format/wrap-goerr-via-network +++ b/fmttests/testdata/format/wrap-goerr-via-network @@ -1697,6 +1697,131 @@ Type: "*errors.errorString" Title: "×" (NO STACKTRACE) +run +goerr innerone innertwo +go-errorf-multi outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - innerone› + | ‹innertwo sibling error in wrapper› + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +-- report composition: +*fmt.wrapErrors +== Extra "error types" +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmt.wrapErrors" +Title: "×" +(NO STACKTRACE) + run goerr innerone innertwo go-errorf-suffix outerthree outerfour diff --git a/fmttests/testdata/format/wrap-newf b/fmttests/testdata/format/wrap-newf index 5146866..6567b1c 100644 --- a/fmttests/testdata/format/wrap-newf +++ b/fmttests/testdata/format/wrap-newf @@ -3076,6 +3076,102 @@ Title: "*errutil.leafError: ×\nvia *withstack.withStack" :: (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +run +newf innerone innertwo +go-errorf-multi outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - new-style innerone\ninnertwo sibling error in wrapper", + errs: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapErrors{msg:"outerthree\nouterfour - new-style innerone\ninnertwo sibling error in wrapper", errs:[]error{(*withstack.withStack)(0xAAAABBBB), (*errors.fundamental)(0xAAAABBBB)}} +== Error() +outerthree +outerfour - new-style innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - new-style innerone\ninnertwo sibling error in wrapper", + errs: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - new-style innerone + | innertwo sibling error in wrapper +Error types: (1) *fmt.wrapErrors +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - new-style innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - new-style innerone› +‹ | innertwo sibling error in wrapper› +Error types: (1) *fmt.wrapErrors +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Error types: (1) *fmt.wrapErrors +-- report composition: +*fmt.wrapErrors +== Extra "error types" +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmt.wrapErrors" +Title: "×" +(NO STACKTRACE) + run newf innerone innertwo go-errorf-suffix outerthree outerfour diff --git a/fmttests/testdata/format/wrap-newf-via-network b/fmttests/testdata/format/wrap-newf-via-network index 22600e7..df5e711 100644 --- a/fmttests/testdata/format/wrap-newf-via-network +++ b/fmttests/testdata/format/wrap-newf-via-network @@ -3602,6 +3602,151 @@ Title: "*errutil.leafError: ×\nvia *withstack.withStack" :: (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +run +newf innerone innertwo +go-errorf-multi outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - new-style innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - new-style innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +== Error() +outerthree +outerfour - new-style innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - new-style innerone + | innertwo sibling error in wrapper + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - new-style innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - new-style innerone› + | ‹innertwo sibling error in wrapper› + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +-- report composition: +*fmt.wrapErrors +== Extra "error types" +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmt.wrapErrors" +Title: "×" +(NO STACKTRACE) + run newf innerone innertwo go-errorf-suffix outerthree outerfour diff --git a/fmttests/testdata/format/wrap-nofmt b/fmttests/testdata/format/wrap-nofmt index 1f84e51..666d4e9 100644 --- a/fmttests/testdata/format/wrap-nofmt +++ b/fmttests/testdata/format/wrap-nofmt @@ -1460,6 +1460,96 @@ Type: "*fmttests.errNoFmt" Title: "×" (NO STACKTRACE) +run +nofmt innerone innertwo +go-errorf-multi outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapErrors{msg:"outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", errs:[]error{(*fmttests.errNoFmt)(0xAAAABBBB), (*errors.fundamental)(0xAAAABBBB)}} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper +Error types: (1) *fmt.wrapErrors +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - innerone› +‹ | innertwo sibling error in wrapper› +Error types: (1) *fmt.wrapErrors +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Error types: (1) *fmt.wrapErrors +-- report composition: +*fmt.wrapErrors +== Extra "error types" +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmt.wrapErrors" +Title: "×" +(NO STACKTRACE) + run nofmt innerone innertwo go-errorf-suffix outerthree outerfour diff --git a/fmttests/testdata/format/wrap-nofmt-via-network b/fmttests/testdata/format/wrap-nofmt-via-network index d149325..71fc4b2 100644 --- a/fmttests/testdata/format/wrap-nofmt-via-network +++ b/fmttests/testdata/format/wrap-nofmt-via-network @@ -2072,6 +2072,147 @@ Type: "*fmttests.errNoFmt" Title: "×" (NO STACKTRACE) +run +nofmt innerone innertwo +go-errorf-multi outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - innerone› + | ‹innertwo sibling error in wrapper› + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +-- report composition: +*fmt.wrapErrors +== Extra "error types" +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmt.wrapErrors" +Title: "×" +(NO STACKTRACE) + run nofmt innerone innertwo go-errorf-suffix outerthree outerfour diff --git a/fmttests/testdata/format/wrap-pkgerr b/fmttests/testdata/format/wrap-pkgerr index dd70d25..3bfc433 100644 --- a/fmttests/testdata/format/wrap-pkgerr +++ b/fmttests/testdata/format/wrap-pkgerr @@ -2963,6 +2963,102 @@ Title: "*errors.fundamental: ×" :: (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +run +pkgerr innerone innertwo +go-errorf-multi outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapErrors{msg:"outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", errs:[]error{(*errors.fundamental)(0xAAAABBBB), (*errors.fundamental)(0xAAAABBBB)}} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper +Error types: (1) *fmt.wrapErrors +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - innerone› +‹ | innertwo sibling error in wrapper› +Error types: (1) *fmt.wrapErrors +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Error types: (1) *fmt.wrapErrors +-- report composition: +*fmt.wrapErrors +== Extra "error types" +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmt.wrapErrors" +Title: "×" +(NO STACKTRACE) + run pkgerr innerone innertwo go-errorf-suffix outerthree outerfour diff --git a/fmttests/testdata/format/wrap-pkgerr-via-network b/fmttests/testdata/format/wrap-pkgerr-via-network index 807b6c8..d9376e1 100644 --- a/fmttests/testdata/format/wrap-pkgerr-via-network +++ b/fmttests/testdata/format/wrap-pkgerr-via-network @@ -3518,6 +3518,147 @@ Title: "*errors.fundamental: ×" :: (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +run +pkgerr innerone innertwo +go-errorf-multi outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - innerone› + | ‹innertwo sibling error in wrapper› + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Error types: (1) *errbase.opaqueLeafCauses +-- report composition: +*fmt.wrapErrors +== Extra "error types" +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmt.wrapErrors" +Title: "×" +(NO STACKTRACE) + run pkgerr innerone innertwo go-errorf-suffix outerthree outerfour diff --git a/markers/markers.go b/markers/markers.go index d270125..fa69b0c 100644 --- a/markers/markers.go +++ b/markers/markers.go @@ -59,6 +59,13 @@ func Is(err, reference error) bool { if tryDelegateToIsMethod(c, reference) { return true } + + // Recursively try multi-error causes, if applicable. + for _, me := range errbase.UnwrapMulti(c) { + if Is(me, reference) { + return true + } + } } if err == nil { @@ -68,8 +75,8 @@ func Is(err, reference error) bool { return false } - // Not directly equal. Try harder, using error marks. We don't this - // during the loop above as it may be more expensive. + // Not directly equal. Try harder, using error marks. We don't do + // this during the loop above as it may be more expensive. // // Note: there is a more effective recursive algorithm that ensures // that any pair of string only gets compared once. Should the diff --git a/markers/markers_test.go b/markers/markers_test.go index 1b48bab..a589676 100644 --- a/markers/markers_test.go +++ b/markers/markers_test.go @@ -247,6 +247,112 @@ func TestGoErrWrappedEquivalence(t *testing.T) { tt.Check(markers.Is(err2w, m2)) } +// This test demonstrates that equivalence can be "peeked" through +// behind multiple layers of wrapping. +func TestGoMultiErrWrappedEquivalence(t *testing.T) { + tt := testutils.T{T: t} + + err1 := errors.New("hello") + err2 := errors.New("world") + err3 := fmt.Errorf("an error %w and %w", err1, err2) + + tt.Check(markers.Is(err3, err1)) + tt.Check(markers.Is(err3, err2)) + + m3 := errors.New("m3") + err3w := markers.Mark(err3, m3) + + tt.Check(markers.Is(err3w, m3)) + + err4 := fmt.Errorf("error: %w", err3) + + tt.Check(markers.Is(err4, err1)) + tt.Check(markers.Is(err4, err2)) +} + +type myErr struct{ msg string } + +func (e *myErr) Error() string { + return e.msg +} + +// This test demonstrates that it is possible to recognize standard +// multierrors that have been sent over the network. +func TestStandardFmtMultierrorRemoteEquivalence(t *testing.T) { + tt := testutils.T{T: t} + + err1 := fmt.Errorf("hello %w %w", goErr.New("world"), goErr.New("one")) + err2 := fmt.Errorf("hello %w %w", goErr.New("world"), goErr.New("two")) + + newErr1 := network(err1) + + tt.Check(markers.Is(err1, newErr1)) + tt.Check(markers.Is(newErr1, err1)) + tt.Check(!markers.Is(err2, newErr1)) + tt.Check(!markers.Is(newErr1, err2)) + + // Check multiple levels of causal nesting + err3 := fmt.Errorf("err: %w", goErr.Join(err1, err2, &myErr{msg: "hi"})) + newErr3 := network(err3) + myErrV := &myErr{msg: "hi"} + + tt.Check(markers.Is(err3, newErr3)) + tt.Check(markers.Is(newErr3, err3)) + + tt.Check(markers.Is(err3, myErrV)) + tt.Check(markers.Is(newErr3, myErrV)) +} + +type myMultiError struct{ cause error } + +func (e myMultiError) Error() string { return e.cause.Error() } +func (e myMultiError) Unwrap() []error { return []error{e.cause} } + +type myOtherMultiError struct{ cause error } + +func (e myOtherMultiError) Error() string { return e.cause.Error() } +func (e myOtherMultiError) Unwrap() []error { return []error{e.cause} } + +func TestDifferentMultiErrorTypesCompareDifferentOverNetwork(t *testing.T) { + tt := testutils.T{T: t} + + base := goErr.New("woo") + e1 := myMultiError{base} + e2 := myOtherMultiError{base} + + tt.Check(!markers.Is(e1, e2)) + + de1 := network(e1) + de2 := network(e2) + + tt.Check(!markers.Is(de1, de2)) +} + +// This test demonstrates that errors from the join +// and fmt constructors are properly considered as distinct. +func TestStandardFmtMultierrorRemoteRecursiveEquivalence(t *testing.T) { + tt := testutils.T{T: t} + + baseErr := goErr.New("world") + err1 := fmt.Errorf("%w %w", baseErr, baseErr) + err2 := goErr.Join(baseErr, baseErr) + + tt.Check(markers.Is(err1, baseErr)) + tt.Check(!markers.Is(err1, err2)) + tt.Check(!markers.Is(err2, err1)) + + newErr1 := network(err1) + newErr2 := network(err2) + + tt.Check(markers.Is(newErr1, baseErr)) + tt.Check(markers.Is(newErr2, baseErr)) + tt.Check(!markers.Is(newErr1, newErr2)) + tt.Check(!markers.Is(err1, newErr2)) + tt.Check(!markers.Is(err2, newErr1)) + tt.Check(!markers.Is(newErr2, err1)) + tt.Check(!markers.Is(newErr1, err2)) +} + // This check verifies that IsAny() works. func TestIsAny(t *testing.T) { tt := testutils.T{T: t} From 042d819c78c41aef5670f154a219e1b60dd7d46e Mon Sep 17 00:00:00 2001 From: David Hartunian Date: Tue, 1 Aug 2023 09:57:14 -0400 Subject: [PATCH 3/8] add formatting for multi-cause errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, error formatting logic was based on a single linear chain of causality. Error causes would be printed vertically down the page, and their interpretation was natural. This commit adds multi-cause formatting support with two goals in mind: 1. Preserve output exactly as before for single-cause error chains 2. Format multi-errors in a way that preserves the existing vertical layout style. For non-verbose error display (`.Error()`, `%s`, `%v`) there are no changes implemented here. We rely on the error's own display logic and typically a multi-cause error will have a message within that has been constructed from all of its causes during instantiation. For verbose error display (`%+v`) which relies on object introspection, whenever we encounter a multi-cause error in the chain, we mark that subtree as being displayed with markers for the "depth" of various causes. All child errors of the parent, will be at depth "1", their child errors will be at depth "2", etc. During display, we indent the error by its "depth" and add a `└─` symbol to illustrate the parent/child relationship. Example: Printing the error produced by this construction using the format directive `%+v` ``` fmt.Errorf( "prefix1: %w", fmt.Errorf( "prefix2 %w", goErr.Join( fmt.Errorf("a%w", fmt.Errorf("b%w", fmt.Errorf("c%w", goErr.New("d")))), fmt.Errorf("e%w", fmt.Errorf("f%w", fmt.Errorf("g%w", goErr.New("h")))), ))) ``` Produces the following output: ``` prefix1: prefix2: abcd (1) prefix1 Wraps: (2) prefix2 Wraps: (3) abcd | efgh └─ Wraps: (4) efgh └─ Wraps: (5) fgh └─ Wraps: (6) gh └─ Wraps: (7) h └─ Wraps: (8) abcd └─ Wraps: (9) bcd └─ Wraps: (10) cd └─ Wraps: (11) d Error types: (1) *fmt.wrapError (2) *fmt.wrapError (3) *errors.joinError (4) *fmt.wrapError (5) *fmt.wrapError (6) *fmt.wrapError (7) *errors.errorString (8) *fmt.wrapError (9) *fmt.wrapError (10) *fmt.wrapError (11) *errors.errorString`, ``` Note the following properties of the output: * The top-level single cause chain maintains the left-aligned `Wrap` lines which contain each cause one at a time. * As soon as we hit the multi-cause errors within the `joinError` struct (`(3)`), we add new indentation to show that The child errors of `(3)` are `(4)` and `(8)` * Subsequent causes of errors after `joinError`, are also indented to disambiguate the causal chain * The `Error types` section at the bottom remains the same and the numbering of the types can be matched to the errors above using the integers next to the `Wrap` lines. * No special effort has been made to number the errors in a way that describes the causal chain or tree. This keeps it easy to match up the error to its type descriptor. --- errbase/format_error.go | 124 ++++++-- errbase/format_error_internal_test.go | 281 ++++++++++++++++++ fmttests/testdata/format/wrap-fmt | 96 +++++- fmttests/testdata/format/wrap-fmt-via-network | 111 ++++++- fmttests/testdata/format/wrap-goerr | 87 +++++- .../testdata/format/wrap-goerr-via-network | 102 ++++++- fmttests/testdata/format/wrap-newf | 165 +++++++++- .../testdata/format/wrap-newf-via-network | 189 +++++++++++- fmttests/testdata/format/wrap-nofmt | 87 +++++- .../testdata/format/wrap-nofmt-via-network | 111 ++++++- fmttests/testdata/format/wrap-pkgerr | 159 +++++++++- .../testdata/format/wrap-pkgerr-via-network | 189 +++++++++++- report/report.go | 20 +- 13 files changed, 1658 insertions(+), 63 deletions(-) diff --git a/errbase/format_error.go b/errbase/format_error.go index c6d50c8..406a513 100644 --- a/errbase/format_error.go +++ b/errbase/format_error.go @@ -102,7 +102,13 @@ func formatErrorInternal(err error, s fmt.State, verb rune, redactableOutput boo // to enable stack trace de-duplication. This requires a // post-order traversal. Since we have a linked list, the best we // can do is a recursion. - p.formatRecursive(err, true /* isOutermost */, true /* withDetail */) + p.formatRecursive( + err, + true, /* isOutermost */ + true, /* withDetail */ + false, /* withDepth */ + 0, /* depth */ + ) // We now have all the data, we can render the result. p.formatEntries(err) @@ -146,7 +152,13 @@ func formatErrorInternal(err error, s fmt.State, verb rune, redactableOutput boo // by calling FormatError(), in which case we'd get an infinite // recursion. So we have no choice but to peel the data // and then assemble the pieces ourselves. - p.formatRecursive(err, true /* isOutermost */, false /* withDetail */) + p.formatRecursive( + err, + true, /* isOutermost */ + false, /* withDetail */ + false, /* withDepth */ + 0, /* depth */ + ) p.formatSingleLineOutput() p.finishDisplay(verb) @@ -195,7 +207,19 @@ func (s *state) formatEntries(err error) { // Wraps: (N)
// for i, j := len(s.entries)-2, 2; i >= 0; i, j = i-1, j+1 { - fmt.Fprintf(&s.finalBuf, "\nWraps: (%d)", j) + s.finalBuf.WriteByte('\n') + // Extra indentation starts at depth==2 because the direct + // children of the root error area already printed on separate + // newlines. + for m := 0; m < s.entries[i].depth-1; m += 1 { + if m == s.entries[i].depth-2 { + s.finalBuf.WriteString("└─ ") + } else { + s.finalBuf.WriteByte(' ') + s.finalBuf.WriteByte(' ') + } + } + fmt.Fprintf(&s.finalBuf, "Wraps: (%d)", j) entry := s.entries[i] s.printEntry(entry) } @@ -330,12 +354,34 @@ func (s *state) formatSingleLineOutput() { // s.finalBuf is untouched. The conversion of s.entries // to s.finalBuf is done by formatSingleLineOutput() and/or // formatEntries(). -func (s *state) formatRecursive(err error, isOutermost, withDetail bool) { +// +// `withDepth` and `depth` are used to tag subtrees of multi-cause +// errors for added indentation during printing. Once a multi-cause +// error is encountered, all subsequent calls with set `withDepth` to +// true, and increment `depth` during recursion. This information is +// persisted into the generated entries and used later to display the +// error with increased indentation based in the depth. +func (s *state) formatRecursive(err error, isOutermost, withDetail, withDepth bool, depth int) int { cause := UnwrapOnce(err) + numChildren := 0 if cause != nil { - // Recurse first. - s.formatRecursive(cause, false /*isOutermost*/, withDetail) + // Recurse first, which populates entries list starting from innermost + // entry. If we've previously seen a multi-cause wrapper, `withDepth` + // will be true, and we'll record the depth below ensuring that extra + // indentation is applied to this inner cause during printing. + // Otherwise, we maintain "straight" vertical formatting by keeping the + // parent callers `withDepth` value of `false` by default. + numChildren += s.formatRecursive(cause, false, withDetail, withDepth, depth+1) + } + + causes := UnwrapMulti(err) + for _, c := range causes { + // Override `withDepth` to true for all child entries ensuring they have + // indentation applied during formatting to distinguish them from + // parents. + numChildren += s.formatRecursive(c, false, withDetail, true, depth+1) } + // inserted := len(s.entries) - 1 - startChildren // Reinitialize the state for this stage of wrapping. s.wantDetail = withDetail @@ -355,9 +401,11 @@ func (s *state) formatRecursive(err error, isOutermost, withDetail bool) { bufIsRedactable = true desiredShortening := v.SafeFormatError((*safePrinter)(s)) if desiredShortening == nil { - // The error wants to elide the short messages from inner - // causes. Do it. - s.elideFurtherCauseMsgs() + // The error wants to elide the short messages from inner causes. + // Read backwards through list of entries up to the number of new + // entries created "under" this one amount and mark `elideShort` + // true. + s.elideShortChildren(numChildren) } case Formatter: @@ -365,7 +413,7 @@ func (s *state) formatRecursive(err error, isOutermost, withDetail bool) { if desiredShortening == nil { // The error wants to elide the short messages from inner // causes. Do it. - s.elideFurtherCauseMsgs() + s.elideShortChildren(numChildren) } case fmt.Formatter: @@ -389,7 +437,7 @@ func (s *state) formatRecursive(err error, isOutermost, withDetail bool) { if elideCauseMsg := s.formatSimple(err, cause); elideCauseMsg { // The error wants to elide the short messages from inner // causes. Do it. - s.elideFurtherCauseMsgs() + s.elideShortChildren(numChildren) } } @@ -412,7 +460,7 @@ func (s *state) formatRecursive(err error, isOutermost, withDetail bool) { if desiredShortening == nil { // The error wants to elide the short messages from inner // causes. Do it. - s.elideFurtherCauseMsgs() + s.elideShortChildren(numChildren) } break } @@ -421,16 +469,21 @@ func (s *state) formatRecursive(err error, isOutermost, withDetail bool) { // If the error did not implement errors.Formatter nor // fmt.Formatter, but it is a wrapper, still attempt best effort: // print what we can at this level. - if elideCauseMsg := s.formatSimple(err, cause); elideCauseMsg { + elideChildren := s.formatSimple(err, cause) + // always elideChildren when dealing with multi-cause errors. + if len(causes) > 0 { + elideChildren = true + } + if elideChildren { // The error wants to elide the short messages from inner // causes. Do it. - s.elideFurtherCauseMsgs() + s.elideShortChildren(numChildren) } } } // Collect the result. - entry := s.collectEntry(err, bufIsRedactable) + entry := s.collectEntry(err, bufIsRedactable, withDepth, depth) // If there's an embedded stack trace, also collect it. // This will get either a stack from pkg/errors, or ours. @@ -444,21 +497,19 @@ func (s *state) formatRecursive(err error, isOutermost, withDetail bool) { // Remember the entry for later rendering. s.entries = append(s.entries, entry) s.buf = bytes.Buffer{} + + return numChildren + 1 } -// elideFurtherCauseMsgs sets the `elideShort` field -// on all entries added so far to `true`. Because these -// entries are added recursively from the innermost -// cause outward, we can iterate through all entries -// without bound because the caller is guaranteed not -// to see entries that it is the causer of. -func (s *state) elideFurtherCauseMsgs() { - for i := range s.entries { - s.entries[i].elideShort = true +// elideShortChildren takes a number of entries to set `elideShort` to +// false. The reason a number of entries is needed is because +func (s *state) elideShortChildren(newEntries int) { + for i := 0; i < newEntries; i++ { + s.entries[len(s.entries)-1-i].elideShort = true } } -func (s *state) collectEntry(err error, bufIsRedactable bool) formatEntry { +func (s *state) collectEntry(err error, bufIsRedactable bool, withDepth bool, depth int) formatEntry { entry := formatEntry{err: err} if s.wantDetail { // The buffer has been populated as a result of formatting with @@ -495,6 +546,10 @@ func (s *state) collectEntry(err error, bufIsRedactable bool) formatEntry { } } + if withDepth { + entry.depth = depth + } + return entry } @@ -712,6 +767,11 @@ type formatEntry struct { // truncated to avoid duplication of entries. This is used to // display a truncation indicator during verbose rendering. elidedStackTrace bool + + // depth, if positive, represents a nesting depth of this error as + // a causer of others. This is used with verbose printing to + // illustrate the nesting depth for multi-cause error wrappers. + depth int } // String is used for debugging only. @@ -733,6 +793,12 @@ func (s *state) Write(b []byte) (n int, err error) { for i, c := range b { if c == '\n' { + //if s.needNewline > 0 { + // for i := 0; i < s.needNewline-1; i++ { + // s.buf.Write(detailSep[:len(sep)-1]) + // } + // s.needNewline = 0 + //} // Flush all the bytes seen so far. s.buf.Write(b[k:i]) // Don't print the newline itself; instead, prepare the state so @@ -762,6 +828,11 @@ func (s *state) Write(b []byte) (n int, err error) { s.notEmpty = true } } + //if s.needNewline > 0 { + // for i := 0; i < s.needNewline-1; i++ { + // s.buf.Write(detailSep[:len(sep)-1]) + // } + //} s.buf.Write(b[k:]) return len(b), nil } @@ -788,6 +859,9 @@ func (p *state) switchOver() { p.buf = bytes.Buffer{} p.notEmpty = false p.hasDetail = true + + // One of the newlines is accounted for in the switch over. + // p.needNewline -= 1 } func (s *printer) Detail() bool { diff --git a/errbase/format_error_internal_test.go b/errbase/format_error_internal_test.go index 0e4f93e..be00290 100644 --- a/errbase/format_error_internal_test.go +++ b/errbase/format_error_internal_test.go @@ -15,11 +15,292 @@ package errbase import ( + goErr "errors" + "fmt" + "strings" "testing" "github.com/cockroachdb/redact" ) +type wrapMini struct { + msg string + cause error +} + +func (e *wrapMini) Error() string { + return e.msg +} + +func (e *wrapMini) Unwrap() error { + return e.cause +} + +type wrapElideCauses struct { + override string + causes []error +} + +func NewWrapElideCauses(override string, errors ...error) error { + return &wrapElideCauses{ + override: override, + causes: errors, + } +} + +func (e *wrapElideCauses) Unwrap() []error { + return e.causes +} + +func (e *wrapElideCauses) SafeFormatError(p Printer) (next error) { + p.Print(e.override) + // Returning nil elides errors from remaining causal chain in the + // implementation of `formatErrorInternal`. + return nil +} + +var _ SafeFormatter = &wrapElideCauses{} + +func (e *wrapElideCauses) Error() string { + b := strings.Builder{} + b.WriteString(e.override) + b.WriteString(": ") + for i, ee := range e.causes { + b.WriteString(ee.Error()) + if i < len(e.causes)-1 { + b.WriteByte(' ') + } + } + return b.String() +} + +type wrapNoElideCauses struct { + prefix string + causes []error +} + +func NewWrapNoElideCauses(prefix string, errors ...error) error { + return &wrapNoElideCauses{ + prefix: prefix, + causes: errors, + } +} + +func (e *wrapNoElideCauses) Unwrap() []error { + return e.causes +} + +func (e *wrapNoElideCauses) SafeFormatError(p Printer) (next error) { + p.Print(e.prefix) + return e.causes[0] +} + +var _ SafeFormatter = &wrapNoElideCauses{} + +func (e *wrapNoElideCauses) Error() string { + b := strings.Builder{} + b.WriteString(e.prefix) + b.WriteString(": ") + for i, ee := range e.causes { + b.WriteString(ee.Error()) + if i < len(e.causes)-1 { + b.WriteByte(' ') + } + } + return b.String() +} + +// TestFormatErrorInternal attempts to highlight some idiosyncrasies of +// the error formatting especially when used with multi-cause error +// structures. Comments on specific cases below outline some gaps that +// still require formatting tweaks. +func TestFormatErrorInternal(t *testing.T) { + tests := []struct { + name string + err error + expectedSimple string + expectedVerbose string + }{ + { + name: "single wrapper", + err: fmt.Errorf("%w", fmt.Errorf("a%w", goErr.New("b"))), + expectedSimple: "ab", + expectedVerbose: `ab +(1) +Wraps: (2) ab +Wraps: (3) b +Error types: (1) *fmt.wrapError (2) *fmt.wrapError (3) *errors.errorString`, + }, + { + name: "simple multi-wrapper", + err: goErr.Join(goErr.New("a"), goErr.New("b")), + expectedSimple: "a\nb", + // TODO(davidh): verbose test case should have line break + // between `a` and `b` on second line. + expectedVerbose: `a +(1) ab +Wraps: (2) b +Wraps: (3) a +Error types: (1) *errors.joinError (2) *errors.errorString (3) *errors.errorString`, + }, + { + name: "multi-wrapper with custom formatter and partial elide", + err: NewWrapNoElideCauses("A", + NewWrapNoElideCauses("C", goErr.New("3"), goErr.New("4")), + NewWrapElideCauses("B", goErr.New("1"), goErr.New("2")), + ), + expectedSimple: `A: B: C: 4: 3`, // 1 and 2 omitted because they are elided. + expectedVerbose: `A: B: C: 4: 3 +(1) A +Wraps: (2) B +└─ Wraps: (3) 2 +└─ Wraps: (4) 1 +Wraps: (5) C +└─ Wraps: (6) 4 +└─ Wraps: (7) 3 +Error types: (1) *errbase.wrapNoElideCauses (2) *errbase.wrapElideCauses (3) *errors.errorString (4) *errors.errorString (5) *errbase.wrapNoElideCauses (6) *errors.errorString (7) *errors.errorString`, + }, + { + name: "multi-wrapper with custom formatter and no elide", + // All errors in this example omit eliding their children. + err: NewWrapNoElideCauses("A", + NewWrapNoElideCauses("B", goErr.New("1"), goErr.New("2")), + NewWrapNoElideCauses("C", goErr.New("3"), goErr.New("4")), + ), + expectedSimple: `A: C: 4: 3: B: 2: 1`, + expectedVerbose: `A: C: 4: 3: B: 2: 1 +(1) A +Wraps: (2) C +└─ Wraps: (3) 4 +└─ Wraps: (4) 3 +Wraps: (5) B +└─ Wraps: (6) 2 +└─ Wraps: (7) 1 +Error types: (1) *errbase.wrapNoElideCauses (2) *errbase.wrapNoElideCauses (3) *errors.errorString (4) *errors.errorString (5) *errbase.wrapNoElideCauses (6) *errors.errorString (7) *errors.errorString`, + }, + { + name: "simple multi-line error", + err: goErr.New("a\nb\nc\nd"), + expectedSimple: "a\nb\nc\nd", + // TODO(davidh): verbose test case should preserve all 3 + // linebreaks in original error. + expectedVerbose: `a +(1) ab + | + | c + | d +Error types: (1) *errors.errorString`, + }, + { + name: "two-level multi-wrapper", + err: goErr.Join( + goErr.Join(goErr.New("a"), goErr.New("b")), + goErr.Join(goErr.New("c"), goErr.New("d")), + ), + expectedSimple: "a\nb\nc\nd", + // TODO(davidh): verbose output should preserve line breaks after (1) + // and also after (2) and (5) in `c\nd` and `a\nb`. + expectedVerbose: `a +(1) ab + | + | c + | d +Wraps: (2) cd +└─ Wraps: (3) d +└─ Wraps: (4) c +Wraps: (5) ab +└─ Wraps: (6) b +└─ Wraps: (7) a +Error types: (1) *errors.joinError (2) *errors.joinError (3) *errors.errorString (4) *errors.errorString (5) *errors.joinError (6) *errors.errorString (7) *errors.errorString`, + }, + { + name: "simple multi-wrapper with single-cause chains inside", + err: goErr.Join( + fmt.Errorf("a%w", goErr.New("b")), + fmt.Errorf("c%w", goErr.New("d")), + ), + expectedSimple: "ab\ncd", + expectedVerbose: `ab +(1) ab + | cd +Wraps: (2) cd +└─ Wraps: (3) d +Wraps: (4) ab +└─ Wraps: (5) b +Error types: (1) *errors.joinError (2) *fmt.wrapError (3) *errors.errorString (4) *fmt.wrapError (5) *errors.errorString`, + }, + { + name: "multi-cause wrapper with single-cause chains inside", + err: goErr.Join( + fmt.Errorf("a%w", fmt.Errorf("b%w", fmt.Errorf("c%w", goErr.New("d")))), + fmt.Errorf("e%w", fmt.Errorf("f%w", fmt.Errorf("g%w", goErr.New("h")))), + ), + expectedSimple: `abcd +efgh`, + expectedVerbose: `abcd +(1) abcd + | efgh +Wraps: (2) efgh +└─ Wraps: (3) fgh + └─ Wraps: (4) gh + └─ Wraps: (5) h +Wraps: (6) abcd +└─ Wraps: (7) bcd + └─ Wraps: (8) cd + └─ Wraps: (9) d +Error types: (1) *errors.joinError (2) *fmt.wrapError (3) *fmt.wrapError (4) *fmt.wrapError (5) *errors.errorString (6) *fmt.wrapError (7) *fmt.wrapError (8) *fmt.wrapError (9) *errors.errorString`}, + { + name: "single cause chain with multi-cause wrapper inside with single-cause chains inside", + err: fmt.Errorf( + "prefix1: %w", + fmt.Errorf( + "prefix2: %w", + goErr.Join( + fmt.Errorf("a%w", fmt.Errorf("b%w", fmt.Errorf("c%w", goErr.New("d")))), + fmt.Errorf("e%w", fmt.Errorf("f%w", fmt.Errorf("g%w", goErr.New("h")))), + ))), + expectedSimple: `prefix1: prefix2: abcd +efgh`, + expectedVerbose: `prefix1: prefix2: abcd +(1) prefix1 +Wraps: (2) prefix2 +Wraps: (3) abcd + | efgh + └─ Wraps: (4) efgh + └─ Wraps: (5) fgh + └─ Wraps: (6) gh + └─ Wraps: (7) h + └─ Wraps: (8) abcd + └─ Wraps: (9) bcd + └─ Wraps: (10) cd + └─ Wraps: (11) d +Error types: (1) *fmt.wrapError (2) *fmt.wrapError (3) *errors.joinError (4) *fmt.wrapError (5) *fmt.wrapError (6) *fmt.wrapError (7) *errors.errorString (8) *fmt.wrapError (9) *fmt.wrapError (10) *fmt.wrapError (11) *errors.errorString`, + }, + { + name: "test wrapMini elides cause error string", + err: &wrapMini{"whoa: d", goErr.New("d")}, + expectedSimple: "whoa: d", + expectedVerbose: `whoa: d +(1) whoa +Wraps: (2) d +Error types: (1) *errbase.wrapMini (2) *errors.errorString`, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + fe := Formattable(tt.err) + s := fmt.Sprintf("%s", fe) + if s != tt.expectedSimple { + t.Errorf("\nexpected: \n%s\nbut got:\n%s\n", tt.expectedSimple, s) + } + s = fmt.Sprintf("%+v", fe) + if s != tt.expectedVerbose { + t.Errorf("\nexpected: \n%s\nbut got:\n%s\n", tt.expectedVerbose, s) + } + }) + } +} + func TestPrintEntry(t *testing.T) { b := func(s string) []byte { return []byte(s) } diff --git a/fmttests/testdata/format/wrap-fmt b/fmttests/testdata/format/wrap-fmt index 91f1008..1911862 100644 --- a/fmttests/testdata/format/wrap-fmt +++ b/fmttests/testdata/format/wrap-fmt @@ -1658,7 +1658,37 @@ outerthree (1) outerthree | outerfour - innerone | innertwo sibling error in wrapper -Error types: (1) *fmt.wrapErrors +Wraps: (2) sibling error in wrapper + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *fmttests.errFmt ===== ===== redactable formats ===== @@ -1676,7 +1706,37 @@ Error types: (1) *fmt.wrapErrors (1) ‹outerthree› ‹ | outerfour - innerone› ‹ | innertwo sibling error in wrapper› -Error types: (1) *fmt.wrapErrors +Wraps: (2) ‹sibling error in wrapper› +‹ | github.com/cockroachdb/errors/fmttests.glob..func23› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Wraps: (3) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *fmttests.errFmt ===== ===== Sentry reporting ===== @@ -1685,7 +1745,37 @@ Error types: (1) *fmt.wrapErrors (1) × × × -Error types: (1) *fmt.wrapErrors +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Wraps: (3) × +× +× +× +× +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *fmttests.errFmt -- report composition: *fmt.wrapErrors == Extra "error types" diff --git a/fmttests/testdata/format/wrap-fmt-via-network b/fmttests/testdata/format/wrap-fmt-via-network index c653d87..c152248 100644 --- a/fmttests/testdata/format/wrap-fmt-via-network +++ b/fmttests/testdata/format/wrap-fmt-via-network @@ -2165,7 +2165,42 @@ outerthree | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) sibling error in wrapper + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf == %#v via Formattable() = %#v, good == %v via Formattable() = Error(), good == %s via Formattable() = %v via Formattable(), good @@ -2191,7 +2226,42 @@ Error types: (1) *errbase.opaqueLeafCauses | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) ‹sibling error in wrapper› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf ===== ===== Sentry reporting ===== @@ -2203,7 +2273,42 @@ Error types: (1) *errbase.opaqueLeafCauses | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf -- report composition: *fmt.wrapErrors == Extra "error types" diff --git a/fmttests/testdata/format/wrap-goerr b/fmttests/testdata/format/wrap-goerr index e3594ef..fd97e94 100644 --- a/fmttests/testdata/format/wrap-goerr +++ b/fmttests/testdata/format/wrap-goerr @@ -1513,7 +1513,34 @@ outerthree (1) outerthree | outerfour - innerone | innertwo sibling error in wrapper -Error types: (1) *fmt.wrapErrors +Wraps: (2) sibling error in wrapper + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *errors.errorString ===== ===== redactable formats ===== @@ -1531,7 +1558,34 @@ Error types: (1) *fmt.wrapErrors (1) ‹outerthree› ‹ | outerfour - innerone› ‹ | innertwo sibling error in wrapper› -Error types: (1) *fmt.wrapErrors +Wraps: (2) ‹sibling error in wrapper› +‹ | github.com/cockroachdb/errors/fmttests.glob..func23› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Wraps: (3) ‹innerone› +‹ | innertwo› +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *errors.errorString ===== ===== Sentry reporting ===== @@ -1540,7 +1594,34 @@ Error types: (1) *fmt.wrapErrors (1) × × × -Error types: (1) *fmt.wrapErrors +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Wraps: (3) × +× +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *errors.errorString -- report composition: *fmt.wrapErrors == Extra "error types" diff --git a/fmttests/testdata/format/wrap-goerr-via-network b/fmttests/testdata/format/wrap-goerr-via-network index 159524e..05a8e43 100644 --- a/fmttests/testdata/format/wrap-goerr-via-network +++ b/fmttests/testdata/format/wrap-goerr-via-network @@ -1774,7 +1774,39 @@ outerthree | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) sibling error in wrapper + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errors.errorString == %#v via Formattable() = %#v, good == %v via Formattable() = Error(), good == %s via Formattable() = %v via Formattable(), good @@ -1800,7 +1832,39 @@ Error types: (1) *errbase.opaqueLeafCauses | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) ‹sibling error in wrapper› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errors.errorString ===== ===== Sentry reporting ===== @@ -1812,7 +1876,39 @@ Error types: (1) *errbase.opaqueLeafCauses | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × +× +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errors.errorString -- report composition: *fmt.wrapErrors == Extra "error types" diff --git a/fmttests/testdata/format/wrap-newf b/fmttests/testdata/format/wrap-newf index 6567b1c..823f653 100644 --- a/fmttests/testdata/format/wrap-newf +++ b/fmttests/testdata/format/wrap-newf @@ -3135,7 +3135,60 @@ outerthree (1) outerthree | outerfour - new-style innerone | innertwo sibling error in wrapper -Error types: (1) *fmt.wrapErrors +Wraps: (2) sibling error in wrapper + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (4) new-style innerone + | innertwo +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *withstack.withStack (4) *errutil.leafError ===== ===== redactable formats ===== @@ -3153,7 +3206,60 @@ Error types: (1) *fmt.wrapErrors (1) ‹outerthree› ‹ | outerfour - new-style innerone› ‹ | innertwo sibling error in wrapper› -Error types: (1) *fmt.wrapErrors +Wraps: (2) ‹sibling error in wrapper› +‹ | github.com/cockroachdb/errors/fmttests.glob..func23› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (4) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *withstack.withStack (4) *errutil.leafError ===== ===== Sentry reporting ===== @@ -3162,7 +3268,60 @@ Error types: (1) *fmt.wrapErrors (1) × × × -Error types: (1) *fmt.wrapErrors +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (4) new-style × + | × +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *withstack.withStack (4) *errutil.leafError -- report composition: *fmt.wrapErrors == Extra "error types" diff --git a/fmttests/testdata/format/wrap-newf-via-network b/fmttests/testdata/format/wrap-newf-via-network index df5e711..57ebc9a 100644 --- a/fmttests/testdata/format/wrap-newf-via-network +++ b/fmttests/testdata/format/wrap-newf-via-network @@ -3699,7 +3699,68 @@ outerthree | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) sibling error in wrapper + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (4) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueWrapper (4) *errutil.leafError == %#v via Formattable() = %#v, good == %v via Formattable() = Error(), good == %s via Formattable() = %v via Formattable(), good @@ -3725,7 +3786,68 @@ Error types: (1) *errbase.opaqueLeafCauses | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) ‹sibling error in wrapper› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (4) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueWrapper (4) *errutil.leafError ===== ===== Sentry reporting ===== @@ -3737,7 +3859,68 @@ Error types: (1) *errbase.opaqueLeafCauses | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (4) new-style × + | × +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueWrapper (4) *errutil.leafError -- report composition: *fmt.wrapErrors == Extra "error types" diff --git a/fmttests/testdata/format/wrap-nofmt b/fmttests/testdata/format/wrap-nofmt index 666d4e9..c643809 100644 --- a/fmttests/testdata/format/wrap-nofmt +++ b/fmttests/testdata/format/wrap-nofmt @@ -1513,7 +1513,34 @@ outerthree (1) outerthree | outerfour - innerone | innertwo sibling error in wrapper -Error types: (1) *fmt.wrapErrors +Wraps: (2) sibling error in wrapper + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *fmttests.errNoFmt ===== ===== redactable formats ===== @@ -1531,7 +1558,34 @@ Error types: (1) *fmt.wrapErrors (1) ‹outerthree› ‹ | outerfour - innerone› ‹ | innertwo sibling error in wrapper› -Error types: (1) *fmt.wrapErrors +Wraps: (2) ‹sibling error in wrapper› +‹ | github.com/cockroachdb/errors/fmttests.glob..func23› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Wraps: (3) ‹innerone› +‹ | innertwo› +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *fmttests.errNoFmt ===== ===== Sentry reporting ===== @@ -1540,7 +1594,34 @@ Error types: (1) *fmt.wrapErrors (1) × × × -Error types: (1) *fmt.wrapErrors +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Wraps: (3) × +× +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *fmttests.errNoFmt -- report composition: *fmt.wrapErrors == Extra "error types" diff --git a/fmttests/testdata/format/wrap-nofmt-via-network b/fmttests/testdata/format/wrap-nofmt-via-network index 71fc4b2..e9e84c5 100644 --- a/fmttests/testdata/format/wrap-nofmt-via-network +++ b/fmttests/testdata/format/wrap-nofmt-via-network @@ -2165,7 +2165,42 @@ outerthree | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) sibling error in wrapper + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf == %#v via Formattable() = %#v, good == %v via Formattable() = Error(), good == %s via Formattable() = %v via Formattable(), good @@ -2191,7 +2226,42 @@ Error types: (1) *errbase.opaqueLeafCauses | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) ‹sibling error in wrapper› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf ===== ===== Sentry reporting ===== @@ -2203,7 +2273,42 @@ Error types: (1) *errbase.opaqueLeafCauses | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf -- report composition: *fmt.wrapErrors == Extra "error types" diff --git a/fmttests/testdata/format/wrap-pkgerr b/fmttests/testdata/format/wrap-pkgerr index 3bfc433..3a351ff 100644 --- a/fmttests/testdata/format/wrap-pkgerr +++ b/fmttests/testdata/format/wrap-pkgerr @@ -3022,7 +3022,58 @@ outerthree (1) outerthree | outerfour - innerone | innertwo sibling error in wrapper -Error types: (1) *fmt.wrapErrors +Wraps: (2) sibling error in wrapper + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *errors.fundamental ===== ===== redactable formats ===== @@ -3040,7 +3091,58 @@ Error types: (1) *fmt.wrapErrors (1) ‹outerthree› ‹ | outerfour - innerone› ‹ | innertwo sibling error in wrapper› -Error types: (1) *fmt.wrapErrors +Wraps: (2) ‹sibling error in wrapper› +‹ | github.com/cockroachdb/errors/fmttests.glob..func23› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Wraps: (3) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.glob..func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *errors.fundamental ===== ===== Sentry reporting ===== @@ -3049,7 +3151,58 @@ Error types: (1) *fmt.wrapErrors (1) × × × -Error types: (1) *fmt.wrapErrors +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Wraps: (3) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *errors.fundamental -- report composition: *fmt.wrapErrors == Extra "error types" diff --git a/fmttests/testdata/format/wrap-pkgerr-via-network b/fmttests/testdata/format/wrap-pkgerr-via-network index d9376e1..5a4cae3 100644 --- a/fmttests/testdata/format/wrap-pkgerr-via-network +++ b/fmttests/testdata/format/wrap-pkgerr-via-network @@ -3611,7 +3611,68 @@ outerthree | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) sibling error in wrapper + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf == %#v via Formattable() = %#v, good == %v via Formattable() = Error(), good == %s via Formattable() = %v via Formattable(), good @@ -3637,7 +3698,68 @@ Error types: (1) *errbase.opaqueLeafCauses | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) ‹sibling error in wrapper› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf ===== ===== Sentry reporting ===== @@ -3649,7 +3771,68 @@ Error types: (1) *errbase.opaqueLeafCauses | | (opaque error leaf) | type name: fmt/*fmt.wrapErrors -Error types: (1) *errbase.opaqueLeafCauses +Wraps: (2) × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf -- report composition: *fmt.wrapErrors == Extra "error types" diff --git a/report/report.go b/report/report.go index 0211722..cba95b0 100644 --- a/report/report.go +++ b/report/report.go @@ -34,7 +34,7 @@ import ( // // A Sentry report is displayed visually in the Sentry UI as follows: // -//////////////// +// ////////////// // Title: (1) some prefix in bold (2) one line for a stack trace // (3) a single-line subtitle // @@ -44,21 +44,24 @@ import ( // (5) a "message" // // (6) zero or more "exceptions", each composed of: -// (7) a bold title -// (8) some freeform text -// (9) a stack trace +// +// (7) a bold title +// (8) some freeform text +// (9) a stack trace // // (10) metadata fields: environment, arch, etc // // (11) "Additional data" fields // // (12) SDK version -///////////////// +// /////////////// // // These visual items map to the Sentry Event object as follows: // // (1) the Type field of the 1st Exception object, if any -// otherwise the Message field +// +// otherwise the Message field +// // (2) the topmost entry from the Stacktrace field of the 1st Exception object, if any // (3) the Value field of the 1st Exception object, if any, unwrapped as a single line // (4) the Tags field @@ -78,7 +81,9 @@ import ( // (3)/(8): first line of verbose error printout // (4): not populated in this function, caller is to manage this // (5): detailed structure of the entire error object, with references to -// additional "exception" objects +// +// additional "exception" objects +// // (9): generated from innermost stack trace // (6): every exception object after the 1st reports additional stack trace contexts // (11): the detailed error types and their error mark. @@ -92,7 +97,6 @@ import ( // is included in the Sentry report. This does not affect error types // provided by the library, but could impact error types defined by // 3rd parties. This limitation may be lifted in a later version. -// func BuildSentryReport(err error) (event *sentry.Event, extraDetails map[string]interface{}) { if err == nil { // No error: do nothing. From 6adb34fbb2ccc70bb80d9f529fbdd7a2cfa9234d Mon Sep 17 00:00:00 2001 From: David Hartunian Date: Mon, 21 Aug 2023 17:24:21 -0400 Subject: [PATCH 4/8] Implement custom encode/decode for multi-cause errors Previous support for multi-cause encode/decode functionality, did not include support for custom encoder and decoder logic. This commits adds the ability to register encoders and decoders for multi-cause errors to encode custom types unknown to this library. --- errbase/decode.go | 30 + errbase/encode.go | 22 + errbase/format_error.go | 5 +- errbase_api.go | 32 +- fmttests/datadriven_test.go | 14 + fmttests/format_error_test.go | 52 + fmttests/testdata/format/wrap-fmt | 640 ++++++++++ fmttests/testdata/format/wrap-fmt-via-network | 950 ++++++++++++++ fmttests/testdata/format/wrap-goerr | 622 +++++++++ .../testdata/format/wrap-goerr-via-network | 900 +++++++++++++ fmttests/testdata/format/wrap-newf | 778 ++++++++++++ .../testdata/format/wrap-newf-via-network | 1114 +++++++++++++++++ fmttests/testdata/format/wrap-nofmt | 622 +++++++++ .../testdata/format/wrap-nofmt-via-network | 950 ++++++++++++++ fmttests/testdata/format/wrap-pkgerr | 766 ++++++++++++ .../testdata/format/wrap-pkgerr-via-network | 1106 ++++++++++++++++ 16 files changed, 8601 insertions(+), 2 deletions(-) diff --git a/errbase/decode.go b/errbase/decode.go index 2de4a30..59af230 100644 --- a/errbase/decode.go +++ b/errbase/decode.go @@ -57,6 +57,15 @@ func decodeLeaf(ctx context.Context, enc *errorspb.EncodedErrorLeaf) error { return genErr } // Decoding failed, we'll drop through to opaqueLeaf{} below. + } else if decoder, ok := multiCauseDecoders[typeKey]; ok { + causes := make([]error, len(enc.MultierrorCauses)) + for i, e := range enc.MultierrorCauses { + causes[i] = DecodeError(ctx, *e) + } + genErr := decoder(ctx, causes, enc.Message, enc.Details.ReportablePayload, payload) + if genErr != nil { + return genErr + } } else { // Shortcut for non-registered proto-encodable error types: // if it already implements `error`, it's good to go. @@ -174,3 +183,24 @@ type WrapperDecoder = func(ctx context.Context, cause error, msgPrefix string, s // registry for RegisterWrapperType. var decoders = map[TypeKey]WrapperDecoder{} + +// MultiCauseDecoder is to be provided (via RegisterMultiCauseDecoder +// above) by additional multi-cause wrapper types not yet known by the +// library. A nil return indicates that decoding was not successful. +type MultiCauseDecoder = func(ctx context.Context, causes []error, msgPrefix string, safeDetails []string, payload proto.Message) error + +// registry for RegisterMultiCauseDecoder. +var multiCauseDecoders = map[TypeKey]MultiCauseDecoder{} + +// RegisterMultiCauseDecoder can be used to register new multi-cause +// wrapper types to the library. Registered wrappers will be decoded +// using their own Go type when an error is decoded. Multi-cause +// wrappers that have not been registered will be decoded using the +// opaqueWrapper type. +func RegisterMultiCauseDecoder(theType TypeKey, decoder MultiCauseDecoder) { + if decoder == nil { + delete(multiCauseDecoders, theType) + } else { + multiCauseDecoders[theType] = decoder + } +} diff --git a/errbase/encode.go b/errbase/encode.go index 80d4799..418cc50 100644 --- a/errbase/encode.go +++ b/errbase/encode.go @@ -328,6 +328,28 @@ type LeafEncoder = func(ctx context.Context, err error) (msg string, safeDetails // registry for RegisterLeafEncoder. var leafEncoders = map[TypeKey]LeafEncoder{} +// RegisterMultiCauseEncoder can be used to register new multi-cause +// error types to the library. Registered types will be encoded using +// their own Go type when an error is encoded. Multi-cause wrappers +// that have not been registered will be encoded using the +// opaqueWrapper type. +func RegisterMultiCauseEncoder(theType TypeKey, encoder MultiCauseEncoder) { + // This implementation is a simple wrapper around `LeafEncoder` + // because we implemented multi-cause error wrapper encoding into a + // `Leaf` instead of a `Wrapper` for smoother backwards + // compatibility support. Exposing this detail to consumers of the + // API is confusing and hence avoided. The causes of the error are + // encoded separately regardless of this encoder's implementation. + RegisterLeafEncoder(theType, encoder) +} + +// MultiCauseEncoder is to be provided (via RegisterMultiCauseEncoder +// above) by additional multi-cause wrapper types not yet known to this +// library. The encoder will automatically extract and encode the +// causes of this error by calling `Unwrap()` and expecting a slice of +// errors. +type MultiCauseEncoder = func(ctx context.Context, err error) (msg string, safeDetails []string, payload proto.Message) + // RegisterWrapperEncoder can be used to register new wrapper types to // the library. Registered wrappers will be encoded using their own // Go type when an error is encoded. Wrappers that have not been diff --git a/errbase/format_error.go b/errbase/format_error.go index 406a513..ada144b 100644 --- a/errbase/format_error.go +++ b/errbase/format_error.go @@ -502,7 +502,10 @@ func (s *state) formatRecursive(err error, isOutermost, withDetail, withDepth bo } // elideShortChildren takes a number of entries to set `elideShort` to -// false. The reason a number of entries is needed is because +// false. The reason a number of entries is needed is that we may be +// eliding a subtree of causes in the case of a multi-cause error. In +// the multi-cause case, we need to know how many of the prior errors +// in the list of entries is a child of this subtree. func (s *state) elideShortChildren(newEntries int) { for i := 0; i < newEntries; i++ { s.entries[len(s.entries)-1-i].elideShort = true diff --git a/errbase_api.go b/errbase_api.go index b33f896..da410f9 100644 --- a/errbase_api.go +++ b/errbase_api.go @@ -86,6 +86,20 @@ func GetTypeKey(err error) TypeKey { return errbase.GetTypeKey(err) } // A nil return indicates that decoding was not successful. type LeafDecoder = errbase.LeafDecoder +// MultiCauseDecoder is to be provided (via RegisterMultiCauseDecoder +// above) by additional multi-cause wrapper types not yet known by the +// library. A nil return indicates that decoding was not successful. +type MultiCauseDecoder = errbase.MultiCauseDecoder + +// RegisterMultiCauseDecoder can be used to register new multi-cause +// wrapper types to the library. Registered wrappers will be decoded +// using their own Go type when an error is decoded. Multi-cause +// wrappers that have not been registered will be decoded using the +// opaqueWrapper type. +func RegisterMultiCauseDecoder(theType TypeKey, decoder MultiCauseDecoder) { + errbase.RegisterMultiCauseDecoder(theType, decoder) +} + // RegisterWrapperDecoder can be used to register new wrapper types to // the library. Registered wrappers will be decoded using their own // Go type when an error is decoded. Wrappers that have not been @@ -145,7 +159,7 @@ type WrapperEncoder = errbase.WrapperEncoder // Note: if the error type has been migrated from a previous location // or a different type, ensure that RegisterTypeMigration() was called // prior to RegisterWrapperEncoder(). -func RegisterWrapperEncoderWithMessageType(typeName TypeKey, encoder errbase.WrapperEncoderWithMessageType) { +func RegisterWrapperEncoderWithMessageType(typeName TypeKey, encoder WrapperEncoderWithMessageType) { errbase.RegisterWrapperEncoderWithMessageType(typeName, encoder) } @@ -154,6 +168,22 @@ func RegisterWrapperEncoderWithMessageType(typeName TypeKey, encoder errbase.Wra // types not yet known to this library. type WrapperEncoderWithMessageType = errbase.WrapperEncoderWithMessageType +// RegisterMultiCauseEncoder can be used to register new multi-cause +// error types to the library. Registered types will be encoded using +// their own Go type when an error is encoded. Multi-cause wrappers +// that have not been registered will be encoded using the +// opaqueWrapper type. +func RegisterMultiCauseEncoder(typeName TypeKey, encoder MultiCauseEncoder) { + errbase.RegisterMultiCauseEncoder(typeName, encoder) +} + +// MultiCauseEncoder is to be provided (via RegisterMultiCauseEncoder +// above) by additional multi-cause wrapper types not yet known to this +// library. The encoder will automatically extract and encode the +// causes of this error by calling `Unwrap()` and expecting a slice of +// errors. +type MultiCauseEncoder = errbase.MultiCauseEncoder + // SetWarningFn enables configuration of the warning function. func SetWarningFn(fn func(context.Context, string, ...interface{})) { errbase.SetWarningFn(fn) } diff --git a/fmttests/datadriven_test.go b/fmttests/datadriven_test.go index 90aafd1..c1eb9fa 100644 --- a/fmttests/datadriven_test.go +++ b/fmttests/datadriven_test.go @@ -207,6 +207,20 @@ var wrapCommands = map[string]commandFn{ // werrWithElidedClause overrides its cause's Error() from its own // short message. "elided-cause": func(err error, args []arg) error { return &werrWithElidedCause{err, strfy(args)} }, + "multi-cause": func(err error, args []arg) error { + return newMultiCause("A", false, /* elide */ + newMultiCause("C", false /* elide */, err, errutil.New(strfy(args))), + newMultiCause("B", false /* elide */, errutil.New("included 1"), errutil.New("included 2")), + ) + }, + // This iteration elides the causes in the second child error, + // which omits them from the format string. + "multi-elided-cause": func(err error, args []arg) error { + return newMultiCause("A", false, /* elide */ + newMultiCause("C", false /* elide */, err, errutil.New(strfy(args))), + newMultiCause("B", true /* elide */, errutil.New("elided 1"), errutil.New("elided 2")), + ) + }, // stack attaches a simple stack trace. "stack": func(err error, _ []arg) error { return withstack.WithStack(err) }, diff --git a/fmttests/format_error_test.go b/fmttests/format_error_test.go index 44e5cdb..db8e1a3 100644 --- a/fmttests/format_error_test.go +++ b/fmttests/format_error_test.go @@ -733,3 +733,55 @@ func (w *werrSafeFormat) SafeFormatError(p errbase.Printer) (next error) { p.Printf("safe %s", w.msg) return w.cause } + +type errMultiCause struct { + causes []error + msg string + elide bool +} + +func newMultiCause(msg string, elide bool, causes ...error) *errMultiCause { + return &errMultiCause{ + causes: causes, + msg: msg, + elide: elide, + } +} + +func (e *errMultiCause) Error() string { return fmt.Sprint(e) } +func (e *errMultiCause) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } +func (e *errMultiCause) SafeFormatError(p errbase.Printer) (next error) { + p.Printf("%s", e.msg) + if e.elide { + return nil + } else { + return e.causes[0] + } +} +func (e *errMultiCause) Unwrap() []error { return e.causes } + +func init() { + errbase.RegisterMultiCauseEncoder(errbase.GetTypeKey(&errMultiCause{}), encodeWithMultiCause) + errbase.RegisterMultiCauseDecoder(errbase.GetTypeKey(&errMultiCause{}), decodeWithMultiCause) +} + +func encodeWithMultiCause( + _ context.Context, err error, +) (string, []string, proto.Message) { + m := err.(*errMultiCause) + if m.elide { + return m.msg, []string{"elide"}, nil + } else { + return m.msg, nil, nil + } +} + +func decodeWithMultiCause( + _ context.Context, causes []error, msg string, details []string, _ proto.Message, +) error { + elide := false + if len(details) == 1 && details[0] == "elide" { + elide = true + } + return &errMultiCause{causes, msg, elide} +} diff --git a/fmttests/testdata/format/wrap-fmt b/fmttests/testdata/format/wrap-fmt index 1911862..1625ad0 100644 --- a/fmttests/testdata/format/wrap-fmt +++ b/fmttests/testdata/format/wrap-fmt @@ -2420,6 +2420,646 @@ Type: "*fmttests.errFmt" Title: "outerthree: ×" (NO STACKTRACE) +run +fmt innerone innertwo +multi-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +× +× +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errFmt +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: included 2: included 1: ×: outerthree: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +multi-elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +× +× +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errFmt +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: ×: outerthree: ×" +(NO STACKTRACE) + run fmt innerone innertwo newfw outerthree outerfour diff --git a/fmttests/testdata/format/wrap-fmt-via-network b/fmttests/testdata/format/wrap-fmt-via-network index c152248..4ca1890 100644 --- a/fmttests/testdata/format/wrap-fmt-via-network +++ b/fmttests/testdata/format/wrap-fmt-via-network @@ -3138,6 +3138,956 @@ Type: "*fmttests.errFmt" Title: "outerthree: ×" (NO STACKTRACE) +run +fmt innerone innertwo +multi-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: included 2: included 1: ×: outerthree: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +multi-elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: ×: outerthree: ×" +(NO STACKTRACE) + run fmt innerone innertwo newfw outerthree outerfour diff --git a/fmttests/testdata/format/wrap-goerr b/fmttests/testdata/format/wrap-goerr index fd97e94..1e5fb5f 100644 --- a/fmttests/testdata/format/wrap-goerr +++ b/fmttests/testdata/format/wrap-goerr @@ -2203,6 +2203,628 @@ Type: "*errors.errorString" Title: "outerthree: ×" (NO STACKTRACE) +run +goerr innerone innertwo +multi-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.errorString +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: included 2: included 1: ×: outerthree: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +multi-elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.errorString +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: ×: outerthree: ×" +(NO STACKTRACE) + run goerr innerone innertwo newfw outerthree outerfour diff --git a/fmttests/testdata/format/wrap-goerr-via-network b/fmttests/testdata/format/wrap-goerr-via-network index 05a8e43..77c7cf6 100644 --- a/fmttests/testdata/format/wrap-goerr-via-network +++ b/fmttests/testdata/format/wrap-goerr-via-network @@ -2563,6 +2563,906 @@ Type: "*errors.errorString" Title: "outerthree: ×" (NO STACKTRACE) +run +goerr innerone innertwo +multi-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errors.errorString +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: included 2: included 1: ×: outerthree: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +multi-elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errors.errorString +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: ×: outerthree: ×" +(NO STACKTRACE) + run goerr innerone innertwo newfw outerthree outerfour diff --git a/fmttests/testdata/format/wrap-newf b/fmttests/testdata/format/wrap-newf index 823f653..0737c0f 100644 --- a/fmttests/testdata/format/wrap-newf +++ b/fmttests/testdata/format/wrap-newf @@ -4641,6 +4641,784 @@ Title: "*errutil.leafError: outerthree: new-style ×\nvia *withstack.withStack" :: (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +run +newf innerone innertwo +multi-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: new-style innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *withstack.withStack (11) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: new-style ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *withstack.withStack (11) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: new-style × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style × + | × +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *withstack.withStack (11) *errutil.leafError +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: included 2: included 1: ×: outerthree: new-style ×" +(NO STACKTRACE) + +run +newf innerone innertwo +multi-elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: new-style innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *withstack.withStack (11) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: new-style ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *withstack.withStack (11) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: new-style × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style × + | × +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *withstack.withStack (11) *errutil.leafError +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: ×: outerthree: new-style ×" +(NO STACKTRACE) + run newf innerone innertwo newfw outerthree outerfour diff --git a/fmttests/testdata/format/wrap-newf-via-network b/fmttests/testdata/format/wrap-newf-via-network index 57ebc9a..4c2ef5d 100644 --- a/fmttests/testdata/format/wrap-newf-via-network +++ b/fmttests/testdata/format/wrap-newf-via-network @@ -5474,6 +5474,1120 @@ Title: "*errutil.leafError: outerthree: new-style ×\nvia *withstack.withStack" :: (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +run +newf innerone innertwo +multi-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: new-style innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueWrapper (11) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: new-style ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueWrapper (11) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: new-style × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style × + | × +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueWrapper (11) *errutil.leafError +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: included 2: included 1: ×: outerthree: new-style ×" +(NO STACKTRACE) + +run +newf innerone innertwo +multi-elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: new-style innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueWrapper (11) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: new-style ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueWrapper (11) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: new-style × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style × + | × +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueWrapper (11) *errutil.leafError +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: ×: outerthree: new-style ×" +(NO STACKTRACE) + run newf innerone innertwo newfw outerthree outerfour diff --git a/fmttests/testdata/format/wrap-nofmt b/fmttests/testdata/format/wrap-nofmt index c643809..863af37 100644 --- a/fmttests/testdata/format/wrap-nofmt +++ b/fmttests/testdata/format/wrap-nofmt @@ -2203,6 +2203,628 @@ Type: "*fmttests.errNoFmt" Title: "outerthree: ×" (NO STACKTRACE) +run +nofmt innerone innertwo +multi-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errNoFmt +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: included 2: included 1: ×: outerthree: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +multi-elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errNoFmt +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: ×: outerthree: ×" +(NO STACKTRACE) + run nofmt innerone innertwo newfw outerthree outerfour diff --git a/fmttests/testdata/format/wrap-nofmt-via-network b/fmttests/testdata/format/wrap-nofmt-via-network index e9e84c5..6227508 100644 --- a/fmttests/testdata/format/wrap-nofmt-via-network +++ b/fmttests/testdata/format/wrap-nofmt-via-network @@ -3138,6 +3138,956 @@ Type: "*fmttests.errNoFmt" Title: "outerthree: ×" (NO STACKTRACE) +run +nofmt innerone innertwo +multi-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: included 2: included 1: ×: outerthree: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +multi-elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: ×: outerthree: ×" +(NO STACKTRACE) + run nofmt innerone innertwo newfw outerthree outerfour diff --git a/fmttests/testdata/format/wrap-pkgerr b/fmttests/testdata/format/wrap-pkgerr index 3a351ff..9ca8b90 100644 --- a/fmttests/testdata/format/wrap-pkgerr +++ b/fmttests/testdata/format/wrap-pkgerr @@ -4471,6 +4471,772 @@ Title: "*errors.fundamental: outerthree: ×" :: (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +run +pkgerr innerone innertwo +multi-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.glob..func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.fundamental +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: included 2: included 1: ×: outerthree: ×" +(NO STACKTRACE) + +run +pkgerr innerone innertwo +multi-elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.glob..func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.fundamental +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: ×: outerthree: ×" +(NO STACKTRACE) + run pkgerr innerone innertwo newfw outerthree outerfour diff --git a/fmttests/testdata/format/wrap-pkgerr-via-network b/fmttests/testdata/format/wrap-pkgerr-via-network index 5a4cae3..7af01eb 100644 --- a/fmttests/testdata/format/wrap-pkgerr-via-network +++ b/fmttests/testdata/format/wrap-pkgerr-via-network @@ -5346,6 +5346,1112 @@ Title: "*errors.fundamental: outerthree: ×" :: (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +run +pkgerr innerone innertwo +multi-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: included 2: included 1: ×: outerthree: ×" +(NO STACKTRACE) + +run +pkgerr innerone innertwo +multi-elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +-- report composition: +*fmttests.errMultiCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errMultiCause" +Title: "×: ×: ×: outerthree: ×" +(NO STACKTRACE) + run pkgerr innerone innertwo newfw outerthree outerfour From 89c9f9e9a334522c24aa82b4397b803637b5ac6a Mon Sep 17 00:00:00 2001 From: Steve Coffman Date: Sun, 12 Mar 2023 17:50:50 -0400 Subject: [PATCH 5/8] Add Go 1.20 errors.Join support This commit introduces a drop-in replacement of the go errors lib `Join` method which constructs a simple multi-cause error object. Some simple unit tests are added and `Join` wrappers are also integrated into the datadriven formatting test. Our existing format code for multi-cause errors is compatible with this new type which allows us to remove the custom formatter from the implementation. The public Join API contains wrappers that automatically attach stacktraces to the join errors. Signed-off-by: Steve Coffman --- errutil/utilities.go | 8 + errutil_api.go | 16 + errutil_api_test.go | 12 + fmttests/datadriven_test.go | 6 + fmttests/testdata/format/wrap-fmt | 191 +++++++++++ fmttests/testdata/format/wrap-fmt-via-network | 231 +++++++++++++ fmttests/testdata/format/wrap-goerr | 182 ++++++++++ .../testdata/format/wrap-goerr-via-network | 206 ++++++++++++ fmttests/testdata/format/wrap-newf | 203 ++++++++++++ .../testdata/format/wrap-newf-via-network | 313 ++++++++++++++++++ fmttests/testdata/format/wrap-nofmt | 182 ++++++++++ .../testdata/format/wrap-nofmt-via-network | 231 +++++++++++++ fmttests/testdata/format/wrap-pkgerr | 197 +++++++++++ .../testdata/format/wrap-pkgerr-via-network | 309 +++++++++++++++++ join/join.go | 105 ++++++ join/join_test.go | 57 ++++ 16 files changed, 2449 insertions(+) create mode 100644 join/join.go create mode 100644 join/join_test.go diff --git a/errutil/utilities.go b/errutil/utilities.go index 2fd126d..78e4d20 100644 --- a/errutil/utilities.go +++ b/errutil/utilities.go @@ -15,6 +15,7 @@ package errutil import ( + "github.com/cockroachdb/errors/join" "github.com/cockroachdb/errors/secondary" "github.com/cockroachdb/errors/withstack" "github.com/cockroachdb/redact" @@ -158,3 +159,10 @@ func WrapWithDepthf(depth int, err error, format string, args ...interface{}) er err = withstack.WithStackDepth(err, depth+1) return err } + +// JoinWithDepth constructs a Join error with the provided list of +// errors as arguments, and wraps it in a `WithStackDepth` to capture a +// stacktrace alongside. +func JoinWithDepth(depth int, errs ...error) error { + return withstack.WithStackDepth(join.Join(errs...), depth+1) +} diff --git a/errutil_api.go b/errutil_api.go index 512bded..166eee1 100644 --- a/errutil_api.go +++ b/errutil_api.go @@ -192,3 +192,19 @@ func HandleAsAssertionFailureDepth(depth int, origErr error) error { // - it also supports recursing through causes with Cause(). // - if it detects an API use error, its panic object is a valid error. func As(err error, target interface{}) bool { return errutil.As(err, target) } + +// Join returns an error that wraps the given errors. +// Any nil error values are discarded. +// Join returns nil if errs contains no non-nil values. +// The error formats as the concatenation of the strings obtained +// by calling the Error method of each element of errs, with a newline +// between each string. A stack trace is also retained. +func Join(errs ...error) error { + return errutil.JoinWithDepth(1, errs...) +} + +// JoinWithDepth is like Join but the depth at which the call stack is +// captured can be specified. +func JoinWithDepth(depth int, errs ...error) error { + return errutil.JoinWithDepth(depth+1, errs...) +} diff --git a/errutil_api_test.go b/errutil_api_test.go index cd3fa34..a70c2b7 100644 --- a/errutil_api_test.go +++ b/errutil_api_test.go @@ -2,6 +2,7 @@ package errors_test import ( "fmt" + "strings" "testing" "github.com/cockroachdb/errors" @@ -17,3 +18,14 @@ func TestUnwrap(t *testing.T) { // (per API documentation) tt.Check(errors.Unwrap(e) == nil) } + +// More detailed testing of Join is in datadriven_test.go. Here we make +// sure that the public API includes the stacktrace wrapper. +func TestJoin(t *testing.T) { + e := errors.Join(errors.New("abc123"), errors.New("def456")) + printed := fmt.Sprintf("%+v", e) + expected := `Error types: (1) *withstack.withStack (2) *join.joinError (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError` + if !strings.Contains(printed, expected) { + t.Errorf("Expected: %s to contain: %s", printed, expected) + } +} diff --git a/fmttests/datadriven_test.go b/fmttests/datadriven_test.go index c1eb9fa..f724ffe 100644 --- a/fmttests/datadriven_test.go +++ b/fmttests/datadriven_test.go @@ -37,6 +37,7 @@ import ( "github.com/cockroachdb/errors/errutil" "github.com/cockroachdb/errors/hintdetail" "github.com/cockroachdb/errors/issuelink" + "github.com/cockroachdb/errors/join" "github.com/cockroachdb/errors/report" "github.com/cockroachdb/errors/safedetails" "github.com/cockroachdb/errors/secondary" @@ -276,6 +277,9 @@ var wrapCommands = map[string]commandFn{ ctx = logtags.AddTag(ctx, "safe", redact.Safe(456)) return contexttags.WithContextTags(err, ctx) }, + "join": func(err error, args []arg) error { + return join.Join(err, errutil.New(strfy(args))) + }, } var noPrefixWrappers = map[string]bool{ @@ -300,6 +304,7 @@ var noPrefixWrappers = map[string]bool{ "stack": true, "tags": true, "telemetry": true, + "join": true, } var wrapOnlyExceptions = map[string]string{} @@ -329,6 +334,7 @@ func init() { // means they don't match. "nofmt", "errorf", + "join", } { wrapOnlyExceptions[v] = ` accept %\+v via Formattable.*IRREGULAR: not same as %\+v diff --git a/fmttests/testdata/format/wrap-fmt b/fmttests/testdata/format/wrap-fmt index 1625ad0..e02fa87 100644 --- a/fmttests/testdata/format/wrap-fmt +++ b/fmttests/testdata/format/wrap-fmt @@ -2251,6 +2251,197 @@ Type: "*fmttests.errFmt" Title: "×" (NO STACKTRACE) +run +fmt innerone innertwo +join outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&join.joinError{ + errs: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × +× +× +× +× +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *fmttests.errFmt +-- report composition: +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*join.joinError" +Title: "×" +(NO STACKTRACE) + run fmt innerone innertwo migrated outerthree outerfour diff --git a/fmttests/testdata/format/wrap-fmt-via-network b/fmttests/testdata/format/wrap-fmt-via-network index 4ca1890..91ff2a1 100644 --- a/fmttests/testdata/format/wrap-fmt-via-network +++ b/fmttests/testdata/format/wrap-fmt-via-network @@ -2913,6 +2913,237 @@ Type: "*fmttests.errFmt" Title: "×" (NO STACKTRACE) +run +fmt innerone innertwo +join outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&join.joinError{ + errs: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +-- report composition: +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*join.joinError" +Title: "×" +(NO STACKTRACE) + run fmt innerone innertwo migrated outerthree outerfour diff --git a/fmttests/testdata/format/wrap-goerr b/fmttests/testdata/format/wrap-goerr index 1e5fb5f..1380a7b 100644 --- a/fmttests/testdata/format/wrap-goerr +++ b/fmttests/testdata/format/wrap-goerr @@ -2052,6 +2052,188 @@ Type: "*errors.errorString" Title: "×" (NO STACKTRACE) +run +goerr innerone innertwo +join outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&join.joinError{ + errs: { + &errors.errorString{s:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &errors.errorString{s:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × +× +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *errors.errorString +-- report composition: +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*join.joinError" +Title: "×" +(NO STACKTRACE) + run goerr innerone innertwo migrated outerthree outerfour diff --git a/fmttests/testdata/format/wrap-goerr-via-network b/fmttests/testdata/format/wrap-goerr-via-network index 77c7cf6..c097698 100644 --- a/fmttests/testdata/format/wrap-goerr-via-network +++ b/fmttests/testdata/format/wrap-goerr-via-network @@ -2388,6 +2388,212 @@ Type: "*errors.errorString" Title: "×" (NO STACKTRACE) +run +goerr innerone innertwo +join outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&join.joinError{ + errs: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × +× +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errors.errorString +-- report composition: +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*join.joinError" +Title: "×" +(NO STACKTRACE) + run goerr innerone innertwo migrated outerthree outerfour diff --git a/fmttests/testdata/format/wrap-newf b/fmttests/testdata/format/wrap-newf index 0737c0f..6793c56 100644 --- a/fmttests/testdata/format/wrap-newf +++ b/fmttests/testdata/format/wrap-newf @@ -4272,6 +4272,209 @@ Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" :: (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +run +newf innerone innertwo +join outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&join.joinError{ + errs: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +== Error() +new-style innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) new-style innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (5) new-style innerone + | innertwo +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *withstack.withStack (5) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) new-style ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (5) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *withstack.withStack (5) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +new-style × +(1) new-style × + | × + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (5) new-style × + | × +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *withstack.withStack (5) *errutil.leafError +-- report composition: +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*join.joinError" +Title: "new-style ×" +(NO STACKTRACE) + run newf innerone innertwo migrated outerthree outerfour diff --git a/fmttests/testdata/format/wrap-newf-via-network b/fmttests/testdata/format/wrap-newf-via-network index 4c2ef5d..4a1b87a 100644 --- a/fmttests/testdata/format/wrap-newf-via-network +++ b/fmttests/testdata/format/wrap-newf-via-network @@ -5035,6 +5035,319 @@ Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" :: (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +run +newf innerone innertwo +join outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&join.joinError{ + errs: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +== Error() +new-style innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) new-style innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (5) new-style innerone + | innertwo +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueWrapper (5) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) new-style ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (5) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueWrapper (5) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +new-style × +(1) new-style × + | × + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (5) new-style × + | × +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueWrapper (5) *errutil.leafError +-- report composition: +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*join.joinError" +Title: "new-style ×" +(NO STACKTRACE) + run newf innerone innertwo migrated outerthree outerfour diff --git a/fmttests/testdata/format/wrap-nofmt b/fmttests/testdata/format/wrap-nofmt index 863af37..da0421b 100644 --- a/fmttests/testdata/format/wrap-nofmt +++ b/fmttests/testdata/format/wrap-nofmt @@ -2052,6 +2052,188 @@ Type: "*fmttests.errNoFmt" Title: "×" (NO STACKTRACE) +run +nofmt innerone innertwo +join outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&join.joinError{ + errs: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × +× +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *fmttests.errNoFmt +-- report composition: +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*join.joinError" +Title: "×" +(NO STACKTRACE) + run nofmt innerone innertwo migrated outerthree outerfour diff --git a/fmttests/testdata/format/wrap-nofmt-via-network b/fmttests/testdata/format/wrap-nofmt-via-network index 6227508..9ffca03 100644 --- a/fmttests/testdata/format/wrap-nofmt-via-network +++ b/fmttests/testdata/format/wrap-nofmt-via-network @@ -2913,6 +2913,237 @@ Type: "*fmttests.errNoFmt" Title: "×" (NO STACKTRACE) +run +nofmt innerone innertwo +join outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&join.joinError{ + errs: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +-- report composition: +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*join.joinError" +Title: "×" +(NO STACKTRACE) + run nofmt innerone innertwo migrated outerthree outerfour diff --git a/fmttests/testdata/format/wrap-pkgerr b/fmttests/testdata/format/wrap-pkgerr index 9ca8b90..105e5fd 100644 --- a/fmttests/testdata/format/wrap-pkgerr +++ b/fmttests/testdata/format/wrap-pkgerr @@ -4118,6 +4118,203 @@ Title: "*errors.fundamental: ×" :: (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +run +pkgerr innerone innertwo +join outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&join.joinError{ + errs: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.glob..func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | [...repeated from below...] +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *errors.fundamental +-- report composition: +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*join.joinError" +Title: "×" +(NO STACKTRACE) + run pkgerr innerone innertwo migrated outerthree outerfour diff --git a/fmttests/testdata/format/wrap-pkgerr-via-network b/fmttests/testdata/format/wrap-pkgerr-via-network index 7af01eb..5c9cfc1 100644 --- a/fmttests/testdata/format/wrap-pkgerr-via-network +++ b/fmttests/testdata/format/wrap-pkgerr-via-network @@ -4919,6 +4919,315 @@ Title: "*errors.fundamental: ×" :: (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +run +pkgerr innerone innertwo +join outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&join.joinError{ + errs: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.glob...funcNN...\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.glob...funcNN... + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +-- report composition: +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*join.joinError" +Title: "×" +(NO STACKTRACE) + run pkgerr innerone innertwo migrated outerthree outerfour diff --git a/join/join.go b/join/join.go new file mode 100644 index 0000000..7ca5fcd --- /dev/null +++ b/join/join.go @@ -0,0 +1,105 @@ +// Copyright 2019 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package join + +import ( + "context" + "fmt" + + "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/redact" + "github.com/gogo/protobuf/proto" +) + +// Join returns an error that wraps the given errors. +// Any nil error values are discarded. +// Join returns nil if errs contains no non-nil values. +// The error formats as the concatenation of the strings obtained +// by calling the Error method of each element of errs, with a newline +// between each string. +func Join(errs ...error) error { + n := 0 + for _, err := range errs { + if err != nil { + n++ + } + } + if n == 0 { + return nil + } + e := &joinError{ + errs: make([]error, 0, n), + } + for _, err := range errs { + if err != nil { + e.errs = append(e.errs, err) + } + } + return e +} + +type joinError struct { + errs []error +} + +var _ error = (*joinError)(nil) +var _ fmt.Formatter = (*joinError)(nil) +var _ errbase.SafeFormatter = (*joinError)(nil) + +func (e *joinError) Error() string { + return redact.Sprint(e).StripMarkers() +} + +func (e *joinError) Unwrap() []error { + return e.errs +} + +func (e *joinError) SafeFormatError(p errbase.Printer) error { + for i, err := range e.errs { + if i > 0 { + p.Print("\n") + } + p.Print(err) + } + return nil +} + +func (e *joinError) Format(s fmt.State, verb rune) { + errbase.FormatError(e, s, verb) +} + +func init() { + errbase.RegisterMultiCauseEncoder( + errbase.GetTypeKey(&joinError{}), + func( + ctx context.Context, + err error, + ) (msg string, safeDetails []string, payload proto.Message) { + return "", nil, nil + }, + ) + errbase.RegisterMultiCauseDecoder( + errbase.GetTypeKey(&joinError{}), + func( + ctx context.Context, + causes []error, + msgPrefix string, + safeDetails []string, + payload proto.Message, + ) error { + return Join(causes...) + }, + ) +} diff --git a/join/join_test.go b/join/join_test.go new file mode 100644 index 0000000..aaf4b70 --- /dev/null +++ b/join/join_test.go @@ -0,0 +1,57 @@ +// Copyright 2019 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package join + +import ( + "errors" + "testing" + + "github.com/cockroachdb/errors/safedetails" + "github.com/cockroachdb/redact" +) + +func TestJoin(t *testing.T) { + e := Join(errors.New("abc123"), errors.New("def456")) + expected := "abc123\ndef456" + if e.Error() != expected { + t.Errorf("Expected: %s; Got: %s", expected, e.Error()) + } + + e = Join(errors.New("abc123"), nil, errors.New("def456"), nil) + if e.Error() != expected { + t.Errorf("Expected: %s; Got: %s", expected, e.Error()) + } + + e = Join(nil, nil, nil) + if e != nil { + t.Errorf("expected nil error") + } + + e = Join( + errors.New("information"), + safedetails.WithSafeDetails(errors.New("detailed error"), "trace_id: %d", redact.Safe(1234)), + ) + printed := redact.Sprintf("%+v", e) + expectedR := redact.RedactableString(`‹information› +(1) ‹information› + | ‹detailed error› +Wraps: (2) trace_id: 1234 +└─ Wraps: (3) ‹detailed error› +Wraps: (4) ‹information› +Error types: (1) *join.joinError (2) *safedetails.withSafeDetails (3) *errors.errorString (4) *errors.errorString`) + if printed != expectedR { + t.Errorf("Expected: %s; Got: %s", expectedR, printed) + } +} From f4eaeb89bc4728c86b31280c795fab2481d8e35f Mon Sep 17 00:00:00 2001 From: David Hartunian Date: Wed, 16 Aug 2023 21:38:13 -0400 Subject: [PATCH 6/8] Add multi-cause unwrap into Sentry reporting This commit modifies the causal detail collection code in `report.go` to recurse through both the single-cause chain and the multi-cause chain if applicable when collecting information for the Sentry report. --- fmttests/testdata/format/wrap-fmt | 272 +++++++++++- fmttests/testdata/format/wrap-fmt-via-network | 272 +++++++++++- fmttests/testdata/format/wrap-goerr | 272 +++++++++++- .../testdata/format/wrap-goerr-via-network | 272 +++++++++++- fmttests/testdata/format/wrap-newf | 390 +++++++++++++++++- .../testdata/format/wrap-newf-via-network | 390 +++++++++++++++++- fmttests/testdata/format/wrap-nofmt | 272 +++++++++++- .../testdata/format/wrap-nofmt-via-network | 272 +++++++++++- fmttests/testdata/format/wrap-pkgerr | 382 ++++++++++++++++- .../testdata/format/wrap-pkgerr-via-network | 382 ++++++++++++++++- report/report.go | 14 +- 11 files changed, 3068 insertions(+), 122 deletions(-) diff --git a/fmttests/testdata/format/wrap-fmt b/fmttests/testdata/format/wrap-fmt index e02fa87..39f127f 100644 --- a/fmttests/testdata/format/wrap-fmt +++ b/fmttests/testdata/format/wrap-fmt @@ -1777,13 +1777,40 @@ Wraps: (3) × × Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *fmttests.errFmt -- report composition: +:: *errors.fundamental (top exception) +*fmttests.errFmt *fmt.wrapErrors == Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) fmt/*fmt.wrapErrors (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmt.wrapErrors" -Title: "×" -(NO STACKTRACE) +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run fmt innerone innertwo @@ -2434,13 +2461,42 @@ Wraps: (4) × × Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *fmttests.errFmt -- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*fmttests.errFmt *join.joinError == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) github.com/cockroachdb/errors/join/*join.joinError (*::) == Exception 1 (Module: "error domain: ") -Type: "*join.joinError" -Title: "×" -(NO STACKTRACE) +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run fmt innerone innertwo @@ -2923,13 +2979,109 @@ Wraps: (7) × × Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errFmt -- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) *fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errFmt +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: included 2: included 1: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run fmt innerone innertwo @@ -3243,13 +3395,109 @@ Wraps: (7) × × Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errFmt -- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errFmt *fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run fmt innerone innertwo diff --git a/fmttests/testdata/format/wrap-fmt-via-network b/fmttests/testdata/format/wrap-fmt-via-network index 91ff2a1..9dffe40 100644 --- a/fmttests/testdata/format/wrap-fmt-via-network +++ b/fmttests/testdata/format/wrap-fmt-via-network @@ -2310,13 +2310,40 @@ Wraps: (3) × | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf -- report composition: +:: *errors.fundamental (top exception) +*fmttests.errFmt *fmt.wrapErrors == Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) fmt/*fmt.wrapErrors (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmt.wrapErrors" -Title: "×" -(NO STACKTRACE) +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run fmt innerone innertwo @@ -3136,13 +3163,42 @@ Wraps: (4) × | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf -- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*fmttests.errFmt *join.joinError == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) github.com/cockroachdb/errors/join/*join.joinError (*::) == Exception 1 (Module: "error domain: ") -Type: "*join.joinError" -Title: "×" -(NO STACKTRACE) +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run fmt innerone innertwo @@ -3836,13 +3892,109 @@ Wraps: (7) × | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf -- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) *fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errFmt +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: included 2: included 1: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run fmt innerone innertwo @@ -4311,13 +4463,109 @@ Wraps: (7) × | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf -- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errFmt *fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run fmt innerone innertwo diff --git a/fmttests/testdata/format/wrap-goerr b/fmttests/testdata/format/wrap-goerr index 1380a7b..bbf21bb 100644 --- a/fmttests/testdata/format/wrap-goerr +++ b/fmttests/testdata/format/wrap-goerr @@ -1623,13 +1623,40 @@ Wraps: (3) × × Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *errors.errorString -- report composition: +:: *errors.fundamental (top exception) +*errors.errorString *fmt.wrapErrors == Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +errors/*errors.errorString (*::) fmt/*fmt.wrapErrors (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmt.wrapErrors" -Title: "×" -(NO STACKTRACE) +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run goerr innerone innertwo @@ -2226,13 +2253,42 @@ Wraps: (4) × × Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *errors.errorString -- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*errors.errorString *join.joinError == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +errors/*errors.errorString (*::) github.com/cockroachdb/errors/join/*join.joinError (*::) == Exception 1 (Module: "error domain: ") -Type: "*join.joinError" -Title: "×" -(NO STACKTRACE) +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run goerr innerone innertwo @@ -2688,13 +2744,109 @@ Wraps: (7) × × Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.errorString -- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) *fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errors.errorString +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: included 2: included 1: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run goerr innerone innertwo @@ -2999,13 +3151,109 @@ Wraps: (7) × × Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.errorString -- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errors.errorString *fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run goerr innerone innertwo diff --git a/fmttests/testdata/format/wrap-goerr-via-network b/fmttests/testdata/format/wrap-goerr-via-network index c097698..a47f632 100644 --- a/fmttests/testdata/format/wrap-goerr-via-network +++ b/fmttests/testdata/format/wrap-goerr-via-network @@ -1910,13 +1910,40 @@ Wraps: (3) × × Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errors.errorString -- report composition: +:: *errors.fundamental (top exception) +*errors.errorString *fmt.wrapErrors == Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +errors/*errors.errorString (*::) fmt/*fmt.wrapErrors (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmt.wrapErrors" -Title: "×" -(NO STACKTRACE) +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run goerr innerone innertwo @@ -2586,13 +2613,42 @@ Wraps: (4) × × Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errors.errorString -- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*errors.errorString *join.joinError == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +errors/*errors.errorString (*::) github.com/cockroachdb/errors/join/*join.joinError (*::) == Exception 1 (Module: "error domain: ") -Type: "*join.joinError" -Title: "×" -(NO STACKTRACE) +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run goerr innerone innertwo @@ -3211,13 +3267,109 @@ Wraps: (7) × × Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errors.errorString -- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) *fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errors.errorString +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: included 2: included 1: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run goerr innerone innertwo @@ -3661,13 +3813,109 @@ Wraps: (7) × × Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errors.errorString -- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errors.errorString *fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run goerr innerone innertwo diff --git a/fmttests/testdata/format/wrap-newf b/fmttests/testdata/format/wrap-newf index 6793c56..84e5c6d 100644 --- a/fmttests/testdata/format/wrap-newf +++ b/fmttests/testdata/format/wrap-newf @@ -3323,13 +3323,70 @@ Wraps: (3) attached stack trace | × Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *withstack.withStack (4) *errutil.leafError -- report composition: +:: *errors.fundamental (top exception) +*errutil.leafError: new-style × +:: *withstack.withStack (1) *fmt.wrapErrors +(check the extra data payloads) == Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) fmt/*fmt.wrapErrors (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmt.wrapErrors" -Title: "×" -(NO STACKTRACE) +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run newf innerone innertwo @@ -4467,13 +4524,72 @@ Wraps: (4) attached stack trace | × Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *withstack.withStack (5) *errutil.leafError -- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*errutil.leafError: new-style × +:: *withstack.withStack (1) *join.joinError +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) github.com/cockroachdb/errors/join/*join.joinError (*::) == Exception 1 (Module: "error domain: ") -Type: "*join.joinError" -Title: "new-style ×" -(NO STACKTRACE) +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run newf innerone innertwo @@ -5225,13 +5341,138 @@ Wraps: (7) × | × Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *withstack.withStack (11) *errutil.leafError -- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errutil.leafError: new-style × +:: *withstack.withStack (3) +*fmttests.errMultiCause *fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: included 2: included 1: ×: outerthree: new-style ×" -(NO STACKTRACE) +Type: "(3) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run newf innerone innertwo @@ -5614,13 +5855,138 @@ Wraps: (7) × | × Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *withstack.withStack (11) *errutil.leafError -- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) *fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errutil.leafError: new-style × +:: *withstack.withStack (3) +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: ×: outerthree: new-style ×" -(NO STACKTRACE) +Type: "(3) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run newf innerone innertwo diff --git a/fmttests/testdata/format/wrap-newf-via-network b/fmttests/testdata/format/wrap-newf-via-network index 4a1b87a..dd9516d 100644 --- a/fmttests/testdata/format/wrap-newf-via-network +++ b/fmttests/testdata/format/wrap-newf-via-network @@ -3922,13 +3922,70 @@ Wraps: (3) | × Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueWrapper (4) *errutil.leafError -- report composition: +:: *errors.fundamental (top exception) +*errutil.leafError: new-style × +:: *withstack.withStack (1) *fmt.wrapErrors +(check the extra data payloads) == Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) fmt/*fmt.wrapErrors (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmt.wrapErrors" -Title: "×" -(NO STACKTRACE) +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run newf innerone innertwo @@ -5340,13 +5397,72 @@ Wraps: (4) | × Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueWrapper (5) *errutil.leafError -- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*errutil.leafError: new-style × +:: *withstack.withStack (1) *join.joinError +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) github.com/cockroachdb/errors/join/*join.joinError (*::) == Exception 1 (Module: "error domain: ") -Type: "*join.joinError" -Title: "new-style ×" -(NO STACKTRACE) +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run newf innerone innertwo @@ -6336,13 +6452,138 @@ Wraps: (7) × | × Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueWrapper (11) *errutil.leafError -- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errutil.leafError: new-style × +:: *withstack.withStack (3) +*fmttests.errMultiCause *fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: included 2: included 1: ×: outerthree: new-style ×" -(NO STACKTRACE) +Type: "(3) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run newf innerone innertwo @@ -6893,13 +7134,138 @@ Wraps: (7) × | × Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueWrapper (11) *errutil.leafError -- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) *fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errutil.leafError: new-style × +:: *withstack.withStack (3) +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: ×: outerthree: new-style ×" -(NO STACKTRACE) +Type: "(3) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run newf innerone innertwo diff --git a/fmttests/testdata/format/wrap-nofmt b/fmttests/testdata/format/wrap-nofmt index da0421b..b7a6bb0 100644 --- a/fmttests/testdata/format/wrap-nofmt +++ b/fmttests/testdata/format/wrap-nofmt @@ -1623,13 +1623,40 @@ Wraps: (3) × × Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *fmttests.errNoFmt -- report composition: +:: *errors.fundamental (top exception) +*fmttests.errNoFmt *fmt.wrapErrors == Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) fmt/*fmt.wrapErrors (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmt.wrapErrors" -Title: "×" -(NO STACKTRACE) +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run nofmt innerone innertwo @@ -2226,13 +2253,42 @@ Wraps: (4) × × Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *fmttests.errNoFmt -- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*fmttests.errNoFmt *join.joinError == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) github.com/cockroachdb/errors/join/*join.joinError (*::) == Exception 1 (Module: "error domain: ") -Type: "*join.joinError" -Title: "×" -(NO STACKTRACE) +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run nofmt innerone innertwo @@ -2688,13 +2744,109 @@ Wraps: (7) × × Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errNoFmt -- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) *fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errNoFmt +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: included 2: included 1: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run nofmt innerone innertwo @@ -2999,13 +3151,109 @@ Wraps: (7) × × Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errNoFmt -- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errNoFmt *fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run nofmt innerone innertwo diff --git a/fmttests/testdata/format/wrap-nofmt-via-network b/fmttests/testdata/format/wrap-nofmt-via-network index 9ffca03..5c6d019 100644 --- a/fmttests/testdata/format/wrap-nofmt-via-network +++ b/fmttests/testdata/format/wrap-nofmt-via-network @@ -2310,13 +2310,40 @@ Wraps: (3) × | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf -- report composition: +:: *errors.fundamental (top exception) +*fmttests.errNoFmt *fmt.wrapErrors == Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) fmt/*fmt.wrapErrors (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmt.wrapErrors" -Title: "×" -(NO STACKTRACE) +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run nofmt innerone innertwo @@ -3136,13 +3163,42 @@ Wraps: (4) × | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf -- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*fmttests.errNoFmt *join.joinError == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) github.com/cockroachdb/errors/join/*join.joinError (*::) == Exception 1 (Module: "error domain: ") -Type: "*join.joinError" -Title: "×" -(NO STACKTRACE) +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run nofmt innerone innertwo @@ -3836,13 +3892,109 @@ Wraps: (7) × | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf -- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) *fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errNoFmt +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: included 2: included 1: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run nofmt innerone innertwo @@ -4311,13 +4463,109 @@ Wraps: (7) × | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf -- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errNoFmt *fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run nofmt innerone innertwo diff --git a/fmttests/testdata/format/wrap-pkgerr b/fmttests/testdata/format/wrap-pkgerr index 105e5fd..fb44a0a 100644 --- a/fmttests/testdata/format/wrap-pkgerr +++ b/fmttests/testdata/format/wrap-pkgerr @@ -3204,13 +3204,68 @@ Wraps: (3) × × Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *errors.fundamental -- report composition: +:: *errors.fundamental (top exception) +:: *errors.fundamental (1) *fmt.wrapErrors +(check the extra data payloads) == Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/pkg/errors/*errors.fundamental (*::) fmt/*fmt.wrapErrors (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmt.wrapErrors" -Title: "×" -(NO STACKTRACE) +Type: "(1) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run pkgerr innerone innertwo @@ -4307,13 +4362,70 @@ Wraps: (4) × × Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *errors.fundamental -- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +:: *errors.fundamental (1) *join.joinError +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.fundamental (*::) github.com/cockroachdb/errors/join/*join.joinError (*::) == Exception 1 (Module: "error domain: ") -Type: "*join.joinError" -Title: "×" -(NO STACKTRACE) +Type: "(1) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run pkgerr innerone innertwo @@ -5043,13 +5155,136 @@ Wraps: (7) × × Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.fundamental -- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +:: *errors.fundamental (3) +*fmttests.errMultiCause *fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: included 2: included 1: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(3) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run pkgerr innerone innertwo @@ -5426,13 +5661,136 @@ Wraps: (7) × × Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.fundamental -- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) *fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +:: *errors.fundamental (3) +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(3) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run pkgerr innerone innertwo diff --git a/fmttests/testdata/format/wrap-pkgerr-via-network b/fmttests/testdata/format/wrap-pkgerr-via-network index 5c9cfc1..9a98a3f 100644 --- a/fmttests/testdata/format/wrap-pkgerr-via-network +++ b/fmttests/testdata/format/wrap-pkgerr-via-network @@ -3834,13 +3834,68 @@ Wraps: (3) × | : Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf -- report composition: +:: *errors.fundamental (top exception) +:: *errors.fundamental (1) *fmt.wrapErrors +(check the extra data payloads) == Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/pkg/errors/*errors.fundamental (*::) fmt/*fmt.wrapErrors (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmt.wrapErrors" -Title: "×" -(NO STACKTRACE) +Type: "(1) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run pkgerr innerone innertwo @@ -5220,13 +5275,70 @@ Wraps: (4) × | : Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf -- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +:: *errors.fundamental (1) *join.joinError +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.fundamental (*::) github.com/cockroachdb/errors/join/*join.joinError (*::) == Exception 1 (Module: "error domain: ") -Type: "*join.joinError" -Title: "×" -(NO STACKTRACE) +Type: "(1) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run pkgerr innerone innertwo @@ -6200,13 +6312,136 @@ Wraps: (7) × | : Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf -- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +:: *errors.fundamental (3) +*fmttests.errMultiCause *fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: included 2: included 1: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(3) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run pkgerr innerone innertwo @@ -6753,13 +6988,136 @@ Wraps: (7) × | : Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf -- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) *fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +:: *errors.fundamental (3) +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) == Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) == Exception 1 (Module: "error domain: ") -Type: "*fmttests.errMultiCause" -Title: "×: ×: ×: outerthree: ×" -(NO STACKTRACE) +Type: "(3) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.glob.)...funcNN... run pkgerr innerone innertwo diff --git a/report/report.go b/report/report.go index cba95b0..c76d65f 100644 --- a/report/report.go +++ b/report/report.go @@ -106,13 +106,13 @@ func BuildSentryReport(err error) (event *sentry.Event, extraDetails map[string] // First step is to collect the details. var stacks []*withstack.ReportableStackTrace var details []errbase.SafeDetailPayload - for c := err; c != nil; c = errbase.UnwrapOnce(c) { + visitAllMulti(err, func(c error) { st := withstack.GetReportableStackTrace(c) stacks = append(stacks, st) sd := errbase.GetSafeDetails(c) details = append(details, sd) - } + }) module := string(domains.GetDomain(err)) // firstDetailLine is the first detail string encountered. @@ -401,3 +401,13 @@ func reverseExceptionOrder(ex []sentry.Exception) { ex[i], ex[len(ex)-i-1] = ex[len(ex)-i-1], ex[i] } } + +func visitAllMulti(err error, f func(error)) { + f(err) + if e := errbase.UnwrapOnce(err); e != nil { + visitAllMulti(e, f) + } + for _, e := range errbase.UnwrapMulti(err) { + visitAllMulti(e, f) + } +} From e6b2ba79f3283704b2e5077038916cd81fe325ee Mon Sep 17 00:00:00 2001 From: David Hartunian Date: Wed, 23 Aug 2023 11:28:45 -0400 Subject: [PATCH 7/8] update README with new public API changes --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c6411f5..db53c70 100644 --- a/README.md +++ b/README.md @@ -536,7 +536,8 @@ Example use: | `WrapWithDepthf` | `WithMessagef` + `WithStackDepth` | | `AssertionFailedWithDepthf` | `NewWithDepthf` + `WithAssertionFailure` | | `NewAssertionErrorWithWrappedErrf` | `HandledWithMessagef` (barrier) + `WrapWithDepthf` + `WithAssertionFailure` | - +| `Join` | `JoinWithDepth` (see below) | +| `JoinWithDepth` | multi-cause wrapper + `WithStackDepth` | ## API (not constructing error objects) The following is a summary of the non-constructor API functions, grouped by category. @@ -574,11 +575,15 @@ func RegisterLeafEncoder(typeName TypeKey, encoder LeafEncoder) func RegisterWrapperDecoder(typeName TypeKey, decoder WrapperDecoder) func RegisterWrapperEncoder(typeName TypeKey, encoder WrapperEncoder) func RegisterWrapperEncoderWithMessageOverride (typeName TypeKey, encoder WrapperEncoderWithMessageOverride) +func RegisterMultiCauseEncoder(theType TypeKey, encoder MultiCauseEncoder) +func RegisterMultiCauseDecoder(theType TypeKey, decoder MultiCauseDecoder) type LeafEncoder = func(ctx context.Context, err error) (msg string, safeDetails []string, payload proto.Message) type LeafDecoder = func(ctx context.Context, msg string, safeDetails []string, payload proto.Message) error type WrapperEncoder = func(ctx context.Context, err error) (msgPrefix string, safeDetails []string, payload proto.Message) type WrapperEncoderWithMessageOverride = func(ctx context.Context, err error) (msgPrefix string, safeDetails []string, payload proto.Message, overrideError bool) type WrapperDecoder = func(ctx context.Context, cause error, msgPrefix string, safeDetails []string, payload proto.Message) error +type MultiCauseEncoder = func(ctx context.Context, err error) (msg string, safeDetails []string, payload proto.Message) +type MultiCauseDecoder = func(ctx context.Context, causes []error, msgPrefix string, safeDetails []string, payload proto.Message) error // Registering package renames for custom error types. func RegisterTypeMigration(previousPkgPath, previousTypeName string, newType error) From 3a3abaca5af3ce3b3bb8afa16308bcd79641f607 Mon Sep 17 00:00:00 2001 From: David Hartunian Date: Wed, 23 Aug 2023 12:05:06 -0400 Subject: [PATCH 8/8] remove feature branch from github ci --- .github/workflows/ci.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e60ecd5..eda89fa 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -2,9 +2,9 @@ name: Go on: push: - branches: [ master, go-1.20-upgrade ] + branches: [ master ] pull_request: - branches: [ master, go-1.20-upgrade ] + branches: [ master ] jobs: