Merge pull request #18429 from containers/renovate/github.com-onsi-ginkgo-v2-2.x
fix(deps): update module github.com/onsi/ginkgo/v2 to v2.9.3
This commit is contained in:
		
						commit
						0d9b5f6f6e
					
				
							
								
								
									
										8
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										8
									
								
								go.mod
								
								
								
								
							| 
						 | 
				
			
			@ -42,7 +42,7 @@ require (
 | 
			
		|||
	github.com/mattn/go-sqlite3 v1.14.16
 | 
			
		||||
	github.com/moby/term v0.5.0
 | 
			
		||||
	github.com/nxadm/tail v1.4.8
 | 
			
		||||
	github.com/onsi/ginkgo/v2 v2.9.2
 | 
			
		||||
	github.com/onsi/ginkgo/v2 v2.9.3
 | 
			
		||||
	github.com/onsi/gomega v1.27.6
 | 
			
		||||
	github.com/opencontainers/go-digest v1.0.0
 | 
			
		||||
	github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +94,7 @@ require (
 | 
			
		|||
	github.com/felixge/httpsnoop v1.0.3 // indirect
 | 
			
		||||
	github.com/fsouza/go-dockerclient v1.9.7 // indirect
 | 
			
		||||
	github.com/go-jose/go-jose/v3 v3.0.0 // indirect
 | 
			
		||||
	github.com/go-logr/logr v1.2.3 // indirect
 | 
			
		||||
	github.com/go-logr/logr v1.2.4 // indirect
 | 
			
		||||
	github.com/go-logr/stdr v1.2.2 // indirect
 | 
			
		||||
	github.com/go-ole/go-ole v1.2.6 // indirect
 | 
			
		||||
	github.com/go-openapi/analysis v0.21.4 // indirect
 | 
			
		||||
| 
						 | 
				
			
			@ -171,9 +171,9 @@ require (
 | 
			
		|||
	go.opentelemetry.io/otel/trace v1.14.0 // indirect
 | 
			
		||||
	golang.org/x/crypto v0.8.0 // indirect
 | 
			
		||||
	golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
 | 
			
		||||
	golang.org/x/mod v0.9.0 // indirect
 | 
			
		||||
	golang.org/x/mod v0.10.0 // indirect
 | 
			
		||||
	golang.org/x/oauth2 v0.6.0 // indirect
 | 
			
		||||
	golang.org/x/tools v0.7.0 // indirect
 | 
			
		||||
	golang.org/x/tools v0.8.0 // indirect
 | 
			
		||||
	google.golang.org/appengine v1.6.7 // indirect
 | 
			
		||||
	google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect
 | 
			
		||||
	google.golang.org/grpc v1.54.0 // indirect
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										16
									
								
								go.sum
								
								
								
								
							| 
						 | 
				
			
			@ -384,8 +384,8 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V
 | 
			
		|||
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
 | 
			
		||||
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
 | 
			
		||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 | 
			
		||||
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
 | 
			
		||||
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 | 
			
		||||
github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
 | 
			
		||||
github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 | 
			
		||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 | 
			
		||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
 | 
			
		||||
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
 | 
			
		||||
| 
						 | 
				
			
			@ -770,8 +770,8 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108
 | 
			
		|||
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
 | 
			
		||||
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
 | 
			
		||||
github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
 | 
			
		||||
github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU=
 | 
			
		||||
github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts=
 | 
			
		||||
github.com/onsi/ginkgo/v2 v2.9.3 h1:5X2vl/isiKqkrOYjiaGgp3JQOcLV59g5o5SuTMqCcxU=
 | 
			
		||||
github.com/onsi/ginkgo/v2 v2.9.3/go.mod h1:gCQYp2Q+kSoIj7ykSVb9nskRSsR6PUj4AiLywzIhbKM=
 | 
			
		||||
github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
 | 
			
		||||
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
 | 
			
		||||
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 | 
			
		||||
| 
						 | 
				
			
			@ -1113,8 +1113,8 @@ 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.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 | 
			
		||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
 | 
			
		||||
golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs=
 | 
			
		||||
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 | 
			
		||||
golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=
 | 
			
		||||
golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 | 
			
		||||
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=
 | 
			
		||||
| 
						 | 
				
			
			@ -1351,8 +1351,8 @@ golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4f
 | 
			
		|||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 | 
			
		||||
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 | 
			
		||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
 | 
			
		||||
golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4=
 | 
			
		||||
golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
 | 
			
		||||
golang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y=
 | 
			
		||||
golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
 | 
			
		||||
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=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@ go 1.18
 | 
			
		|||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/cpuguy83/go-md2man/v2 v2.0.2
 | 
			
		||||
	github.com/onsi/ginkgo/v2 v2.9.2
 | 
			
		||||
	github.com/onsi/ginkgo/v2 v2.9.3
 | 
			
		||||
	github.com/vbatts/git-validation v1.2.0
 | 
			
		||||
	golang.org/x/tools v0.8.0
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -17,5 +17,4 @@ require (
 | 
			
		|||
	github.com/sirupsen/logrus v1.8.1 // indirect
 | 
			
		||||
	golang.org/x/mod v0.10.0 // indirect
 | 
			
		||||
	golang.org/x/sys v0.7.0 // indirect
 | 
			
		||||
	golang.org/x/text v0.9.0 // indirect
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t
 | 
			
		|||
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/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
 | 
			
		||||
github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
 | 
			
		||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
 | 
			
		||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
 | 
			
		||||
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
 | 
			
		||||
| 
						 | 
				
			
			@ -17,9 +17,9 @@ github.com/hashicorp/go-version v1.3.0 h1:McDWVJIU/y+u1BRV06dPaLfLCaT7fUTJLp5r04
 | 
			
		|||
github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
 | 
			
		||||
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
 | 
			
		||||
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 | 
			
		||||
github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU=
 | 
			
		||||
github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts=
 | 
			
		||||
github.com/onsi/gomega v1.27.4 h1:Z2AnStgsdSayCMDiCU42qIz+HLqEPcgiOCXjAU/w+8E=
 | 
			
		||||
github.com/onsi/ginkgo/v2 v2.9.3 h1:5X2vl/isiKqkrOYjiaGgp3JQOcLV59g5o5SuTMqCcxU=
 | 
			
		||||
github.com/onsi/ginkgo/v2 v2.9.3/go.mod h1:gCQYp2Q+kSoIj7ykSVb9nskRSsR6PUj4AiLywzIhbKM=
 | 
			
		||||
github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE=
 | 
			
		||||
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/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +42,6 @@ golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBc
 | 
			
		|||
golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
 | 
			
		||||
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
			
		||||
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
 | 
			
		||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 | 
			
		||||
golang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y=
 | 
			
		||||
golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
 | 
			
		||||
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -344,8 +344,12 @@ func failureDescriptionForUnstructuredReporters(spec types.SpecReport) string {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func systemErrForUnstructuredReporters(spec types.SpecReport) string {
 | 
			
		||||
	return RenderTimeline(spec, true)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func RenderTimeline(spec types.SpecReport, noColor bool) string {
 | 
			
		||||
	out := &strings.Builder{}
 | 
			
		||||
	NewDefaultReporter(types.ReporterConfig{NoColor: true, VeryVerbose: true}, out).emitTimeline(0, spec, spec.Timeline())
 | 
			
		||||
	NewDefaultReporter(types.ReporterConfig{NoColor: noColor, VeryVerbose: true}, out).emitTimeline(0, spec, spec.Timeline())
 | 
			
		||||
	return out.String()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ func (d deprecations) Async() Deprecation {
 | 
			
		|||
 | 
			
		||||
func (d deprecations) Measure() Deprecation {
 | 
			
		||||
	return Deprecation{
 | 
			
		||||
		Message: "Measure is deprecated and will be removed in Ginkgo V2.  Please migrate to gomega/gmeasure.",
 | 
			
		||||
		Message: "Measure is deprecated and has been removed from Ginkgo V2.  Any Measure tests in your spec will not run.  Please migrate to gomega/gmeasure.",
 | 
			
		||||
		DocLink: "removed-measure",
 | 
			
		||||
		Version: "1.16.3",
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
package types
 | 
			
		||||
 | 
			
		||||
const VERSION = "2.9.2"
 | 
			
		||||
const VERSION = "2.9.3"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@ github.com/google/pprof/profile
 | 
			
		|||
# github.com/hashicorp/go-version v1.3.0
 | 
			
		||||
## explicit
 | 
			
		||||
github.com/hashicorp/go-version
 | 
			
		||||
# github.com/onsi/ginkgo/v2 v2.9.2
 | 
			
		||||
# github.com/onsi/ginkgo/v2 v2.9.3
 | 
			
		||||
## explicit; go 1.18
 | 
			
		||||
github.com/onsi/ginkgo/v2/config
 | 
			
		||||
github.com/onsi/ginkgo/v2/formatter
 | 
			
		||||
| 
						 | 
				
			
			@ -55,8 +55,6 @@ golang.org/x/sys/execabs
 | 
			
		|||
golang.org/x/sys/internal/unsafeheader
 | 
			
		||||
golang.org/x/sys/unix
 | 
			
		||||
golang.org/x/sys/windows
 | 
			
		||||
# golang.org/x/text v0.9.0
 | 
			
		||||
## explicit; go 1.17
 | 
			
		||||
# golang.org/x/tools v0.8.0
 | 
			
		||||
## explicit; go 1.18
 | 
			
		||||
golang.org/x/tools/cmd/goimports
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,6 @@ linters:
 | 
			
		|||
  disable-all: true
 | 
			
		||||
  enable:
 | 
			
		||||
    - asciicheck
 | 
			
		||||
    - deadcode
 | 
			
		||||
    - errcheck
 | 
			
		||||
    - forcetypeassert
 | 
			
		||||
    - gocritic
 | 
			
		||||
| 
						 | 
				
			
			@ -18,10 +17,8 @@ linters:
 | 
			
		|||
    - misspell
 | 
			
		||||
    - revive
 | 
			
		||||
    - staticcheck
 | 
			
		||||
    - structcheck
 | 
			
		||||
    - typecheck
 | 
			
		||||
    - unused
 | 
			
		||||
    - varcheck
 | 
			
		||||
 | 
			
		||||
issues:
 | 
			
		||||
  exclude-use-default: false
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,35 +20,5 @@ package logr
 | 
			
		|||
// used whenever the caller is not interested in the logs.  Logger instances
 | 
			
		||||
// produced by this function always compare as equal.
 | 
			
		||||
func Discard() Logger {
 | 
			
		||||
	return Logger{
 | 
			
		||||
		level: 0,
 | 
			
		||||
		sink:  discardLogSink{},
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// discardLogSink is a LogSink that discards all messages.
 | 
			
		||||
type discardLogSink struct{}
 | 
			
		||||
 | 
			
		||||
// Verify that it actually implements the interface
 | 
			
		||||
var _ LogSink = discardLogSink{}
 | 
			
		||||
 | 
			
		||||
func (l discardLogSink) Init(RuntimeInfo) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l discardLogSink) Enabled(int) bool {
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l discardLogSink) Info(int, string, ...interface{}) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l discardLogSink) Error(error, string, ...interface{}) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l discardLogSink) WithValues(...interface{}) LogSink {
 | 
			
		||||
	return l
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l discardLogSink) WithName(string) LogSink {
 | 
			
		||||
	return l
 | 
			
		||||
	return New(nil)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,13 +21,13 @@ limitations under the License.
 | 
			
		|||
// github.com/go-logr/logr.LogSink with output through an arbitrary
 | 
			
		||||
// "write" function.  See New and NewJSON for details.
 | 
			
		||||
//
 | 
			
		||||
// Custom LogSinks
 | 
			
		||||
// # Custom LogSinks
 | 
			
		||||
//
 | 
			
		||||
// For users who need more control, a funcr.Formatter can be embedded inside
 | 
			
		||||
// your own custom LogSink implementation. This is useful when the LogSink
 | 
			
		||||
// needs to implement additional methods, for example.
 | 
			
		||||
//
 | 
			
		||||
// Formatting
 | 
			
		||||
// # Formatting
 | 
			
		||||
//
 | 
			
		||||
// This will respect logr.Marshaler, fmt.Stringer, and error interfaces for
 | 
			
		||||
// values which are being logged.  When rendering a struct, funcr will use Go's
 | 
			
		||||
| 
						 | 
				
			
			@ -37,6 +37,7 @@ package funcr
 | 
			
		|||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"encoding"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"reflect"
 | 
			
		||||
| 
						 | 
				
			
			@ -217,7 +218,7 @@ func newFormatter(opts Options, outfmt outputFormat) Formatter {
 | 
			
		|||
		prefix:       "",
 | 
			
		||||
		values:       nil,
 | 
			
		||||
		depth:        0,
 | 
			
		||||
		opts:         opts,
 | 
			
		||||
		opts:         &opts,
 | 
			
		||||
	}
 | 
			
		||||
	return f
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -231,7 +232,7 @@ type Formatter struct {
 | 
			
		|||
	values       []interface{}
 | 
			
		||||
	valuesStr    string
 | 
			
		||||
	depth        int
 | 
			
		||||
	opts         Options
 | 
			
		||||
	opts         *Options
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// outputFormat indicates which outputFormat to use.
 | 
			
		||||
| 
						 | 
				
			
			@ -447,6 +448,7 @@ func (f Formatter) prettyWithFlags(value interface{}, flags uint32, depth int) s
 | 
			
		|||
		if flags&flagRawStruct == 0 {
 | 
			
		||||
			buf.WriteByte('{')
 | 
			
		||||
		}
 | 
			
		||||
		printComma := false // testing i>0 is not enough because of JSON omitted fields
 | 
			
		||||
		for i := 0; i < t.NumField(); i++ {
 | 
			
		||||
			fld := t.Field(i)
 | 
			
		||||
			if fld.PkgPath != "" {
 | 
			
		||||
| 
						 | 
				
			
			@ -478,9 +480,10 @@ func (f Formatter) prettyWithFlags(value interface{}, flags uint32, depth int) s
 | 
			
		|||
			if omitempty && isEmpty(v.Field(i)) {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			if i > 0 {
 | 
			
		||||
			if printComma {
 | 
			
		||||
				buf.WriteByte(',')
 | 
			
		||||
			}
 | 
			
		||||
			printComma = true // if we got here, we are rendering a field
 | 
			
		||||
			if fld.Anonymous && fld.Type.Kind() == reflect.Struct && name == "" {
 | 
			
		||||
				buf.WriteString(f.prettyWithFlags(v.Field(i).Interface(), flags|flagRawStruct, depth+1))
 | 
			
		||||
				continue
 | 
			
		||||
| 
						 | 
				
			
			@ -500,6 +503,20 @@ func (f Formatter) prettyWithFlags(value interface{}, flags uint32, depth int) s
 | 
			
		|||
		}
 | 
			
		||||
		return buf.String()
 | 
			
		||||
	case reflect.Slice, reflect.Array:
 | 
			
		||||
		// If this is outputing as JSON make sure this isn't really a json.RawMessage.
 | 
			
		||||
		// If so just emit "as-is" and don't pretty it as that will just print
 | 
			
		||||
		// it as [X,Y,Z,...] which isn't terribly useful vs the string form you really want.
 | 
			
		||||
		if f.outputFormat == outputJSON {
 | 
			
		||||
			if rm, ok := value.(json.RawMessage); ok {
 | 
			
		||||
				// If it's empty make sure we emit an empty value as the array style would below.
 | 
			
		||||
				if len(rm) > 0 {
 | 
			
		||||
					buf.Write(rm)
 | 
			
		||||
				} else {
 | 
			
		||||
					buf.WriteString("null")
 | 
			
		||||
				}
 | 
			
		||||
				return buf.String()
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		buf.WriteByte('[')
 | 
			
		||||
		for i := 0; i < v.Len(); i++ {
 | 
			
		||||
			if i > 0 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,7 +21,7 @@ limitations under the License.
 | 
			
		|||
// to back that API.  Packages in the Go ecosystem can depend on this package,
 | 
			
		||||
// while callers can implement logging with whatever backend is appropriate.
 | 
			
		||||
//
 | 
			
		||||
// Usage
 | 
			
		||||
// # Usage
 | 
			
		||||
//
 | 
			
		||||
// Logging is done using a Logger instance.  Logger is a concrete type with
 | 
			
		||||
// methods, which defers the actual logging to a LogSink interface.  The main
 | 
			
		||||
| 
						 | 
				
			
			@ -30,16 +30,20 @@ limitations under the License.
 | 
			
		|||
// "structured logging".
 | 
			
		||||
//
 | 
			
		||||
// With Go's standard log package, we might write:
 | 
			
		||||
//   log.Printf("setting target value %s", targetValue)
 | 
			
		||||
//
 | 
			
		||||
//	log.Printf("setting target value %s", targetValue)
 | 
			
		||||
//
 | 
			
		||||
// With logr's structured logging, we'd write:
 | 
			
		||||
//   logger.Info("setting target", "value", targetValue)
 | 
			
		||||
//
 | 
			
		||||
//	logger.Info("setting target", "value", targetValue)
 | 
			
		||||
//
 | 
			
		||||
// Errors are much the same.  Instead of:
 | 
			
		||||
//   log.Printf("failed to open the pod bay door for user %s: %v", user, err)
 | 
			
		||||
//
 | 
			
		||||
//	log.Printf("failed to open the pod bay door for user %s: %v", user, err)
 | 
			
		||||
//
 | 
			
		||||
// We'd write:
 | 
			
		||||
//   logger.Error(err, "failed to open the pod bay door", "user", user)
 | 
			
		||||
//
 | 
			
		||||
//	logger.Error(err, "failed to open the pod bay door", "user", user)
 | 
			
		||||
//
 | 
			
		||||
// Info() and Error() are very similar, but they are separate methods so that
 | 
			
		||||
// LogSink implementations can choose to do things like attach additional
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +51,7 @@ limitations under the License.
 | 
			
		|||
// always logged, regardless of the current verbosity.  If there is no error
 | 
			
		||||
// instance available, passing nil is valid.
 | 
			
		||||
//
 | 
			
		||||
// Verbosity
 | 
			
		||||
// # Verbosity
 | 
			
		||||
//
 | 
			
		||||
// Often we want to log information only when the application in "verbose
 | 
			
		||||
// mode".  To write log lines that are more verbose, Logger has a V() method.
 | 
			
		||||
| 
						 | 
				
			
			@ -58,20 +62,22 @@ limitations under the License.
 | 
			
		|||
// Error messages do not have a verbosity level and are always logged.
 | 
			
		||||
//
 | 
			
		||||
// Where we might have written:
 | 
			
		||||
//   if flVerbose >= 2 {
 | 
			
		||||
//       log.Printf("an unusual thing happened")
 | 
			
		||||
//   }
 | 
			
		||||
//
 | 
			
		||||
//	if flVerbose >= 2 {
 | 
			
		||||
//	    log.Printf("an unusual thing happened")
 | 
			
		||||
//	}
 | 
			
		||||
//
 | 
			
		||||
// We can write:
 | 
			
		||||
//   logger.V(2).Info("an unusual thing happened")
 | 
			
		||||
//
 | 
			
		||||
// Logger Names
 | 
			
		||||
//	logger.V(2).Info("an unusual thing happened")
 | 
			
		||||
//
 | 
			
		||||
// # Logger Names
 | 
			
		||||
//
 | 
			
		||||
// Logger instances can have name strings so that all messages logged through
 | 
			
		||||
// that instance have additional context.  For example, you might want to add
 | 
			
		||||
// a subsystem name:
 | 
			
		||||
//
 | 
			
		||||
//   logger.WithName("compactor").Info("started", "time", time.Now())
 | 
			
		||||
//	logger.WithName("compactor").Info("started", "time", time.Now())
 | 
			
		||||
//
 | 
			
		||||
// The WithName() method returns a new Logger, which can be passed to
 | 
			
		||||
// constructors or other functions for further use.  Repeated use of WithName()
 | 
			
		||||
| 
						 | 
				
			
			@ -82,25 +88,27 @@ limitations under the License.
 | 
			
		|||
// joining operation (e.g. whitespace, commas, periods, slashes, brackets,
 | 
			
		||||
// quotes, etc).
 | 
			
		||||
//
 | 
			
		||||
// Saved Values
 | 
			
		||||
// # Saved Values
 | 
			
		||||
//
 | 
			
		||||
// Logger instances can store any number of key/value pairs, which will be
 | 
			
		||||
// logged alongside all messages logged through that instance.  For example,
 | 
			
		||||
// you might want to create a Logger instance per managed object:
 | 
			
		||||
//
 | 
			
		||||
// With the standard log package, we might write:
 | 
			
		||||
//   log.Printf("decided to set field foo to value %q for object %s/%s",
 | 
			
		||||
//       targetValue, object.Namespace, object.Name)
 | 
			
		||||
//
 | 
			
		||||
//	log.Printf("decided to set field foo to value %q for object %s/%s",
 | 
			
		||||
//	    targetValue, object.Namespace, object.Name)
 | 
			
		||||
//
 | 
			
		||||
// With logr we'd write:
 | 
			
		||||
//   // Elsewhere: set up the logger to log the object name.
 | 
			
		||||
//   obj.logger = mainLogger.WithValues(
 | 
			
		||||
//       "name", obj.name, "namespace", obj.namespace)
 | 
			
		||||
//
 | 
			
		||||
//   // later on...
 | 
			
		||||
//   obj.logger.Info("setting foo", "value", targetValue)
 | 
			
		||||
//	// Elsewhere: set up the logger to log the object name.
 | 
			
		||||
//	obj.logger = mainLogger.WithValues(
 | 
			
		||||
//	    "name", obj.name, "namespace", obj.namespace)
 | 
			
		||||
//
 | 
			
		||||
// Best Practices
 | 
			
		||||
//	// later on...
 | 
			
		||||
//	obj.logger.Info("setting foo", "value", targetValue)
 | 
			
		||||
//
 | 
			
		||||
// # Best Practices
 | 
			
		||||
//
 | 
			
		||||
// Logger has very few hard rules, with the goal that LogSink implementations
 | 
			
		||||
// might have a lot of freedom to differentiate.  There are, however, some
 | 
			
		||||
| 
						 | 
				
			
			@ -124,15 +132,15 @@ limitations under the License.
 | 
			
		|||
// around. For cases where passing a logger is optional, a pointer to Logger
 | 
			
		||||
// should be used.
 | 
			
		||||
//
 | 
			
		||||
// Key Naming Conventions
 | 
			
		||||
// # Key Naming Conventions
 | 
			
		||||
//
 | 
			
		||||
// Keys are not strictly required to conform to any specification or regex, but
 | 
			
		||||
// it is recommended that they:
 | 
			
		||||
//   * be human-readable and meaningful (not auto-generated or simple ordinals)
 | 
			
		||||
//   * be constant (not dependent on input data)
 | 
			
		||||
//   * contain only printable characters
 | 
			
		||||
//   * not contain whitespace or punctuation
 | 
			
		||||
//   * use lower case for simple keys and lowerCamelCase for more complex ones
 | 
			
		||||
//   - be human-readable and meaningful (not auto-generated or simple ordinals)
 | 
			
		||||
//   - be constant (not dependent on input data)
 | 
			
		||||
//   - contain only printable characters
 | 
			
		||||
//   - not contain whitespace or punctuation
 | 
			
		||||
//   - use lower case for simple keys and lowerCamelCase for more complex ones
 | 
			
		||||
//
 | 
			
		||||
// These guidelines help ensure that log data is processed properly regardless
 | 
			
		||||
// of the log implementation.  For example, log implementations will try to
 | 
			
		||||
| 
						 | 
				
			
			@ -141,51 +149,54 @@ limitations under the License.
 | 
			
		|||
// While users are generally free to use key names of their choice, it's
 | 
			
		||||
// generally best to avoid using the following keys, as they're frequently used
 | 
			
		||||
// by implementations:
 | 
			
		||||
//   * "caller": the calling information (file/line) of a particular log line
 | 
			
		||||
//   * "error": the underlying error value in the `Error` method
 | 
			
		||||
//   * "level": the log level
 | 
			
		||||
//   * "logger": the name of the associated logger
 | 
			
		||||
//   * "msg": the log message
 | 
			
		||||
//   * "stacktrace": the stack trace associated with a particular log line or
 | 
			
		||||
//                   error (often from the `Error` message)
 | 
			
		||||
//   * "ts": the timestamp for a log line
 | 
			
		||||
//   - "caller": the calling information (file/line) of a particular log line
 | 
			
		||||
//   - "error": the underlying error value in the `Error` method
 | 
			
		||||
//   - "level": the log level
 | 
			
		||||
//   - "logger": the name of the associated logger
 | 
			
		||||
//   - "msg": the log message
 | 
			
		||||
//   - "stacktrace": the stack trace associated with a particular log line or
 | 
			
		||||
//     error (often from the `Error` message)
 | 
			
		||||
//   - "ts": the timestamp for a log line
 | 
			
		||||
//
 | 
			
		||||
// Implementations are encouraged to make use of these keys to represent the
 | 
			
		||||
// above concepts, when necessary (for example, in a pure-JSON output form, it
 | 
			
		||||
// would be necessary to represent at least message and timestamp as ordinary
 | 
			
		||||
// named values).
 | 
			
		||||
//
 | 
			
		||||
// Break Glass
 | 
			
		||||
// # Break Glass
 | 
			
		||||
//
 | 
			
		||||
// Implementations may choose to give callers access to the underlying
 | 
			
		||||
// logging implementation.  The recommended pattern for this is:
 | 
			
		||||
//   // Underlier exposes access to the underlying logging implementation.
 | 
			
		||||
//   // Since callers only have a logr.Logger, they have to know which
 | 
			
		||||
//   // implementation is in use, so this interface is less of an abstraction
 | 
			
		||||
//   // and more of way to test type conversion.
 | 
			
		||||
//   type Underlier interface {
 | 
			
		||||
//       GetUnderlying() <underlying-type>
 | 
			
		||||
//   }
 | 
			
		||||
//
 | 
			
		||||
//	// Underlier exposes access to the underlying logging implementation.
 | 
			
		||||
//	// Since callers only have a logr.Logger, they have to know which
 | 
			
		||||
//	// implementation is in use, so this interface is less of an abstraction
 | 
			
		||||
//	// and more of way to test type conversion.
 | 
			
		||||
//	type Underlier interface {
 | 
			
		||||
//	    GetUnderlying() <underlying-type>
 | 
			
		||||
//	}
 | 
			
		||||
//
 | 
			
		||||
// Logger grants access to the sink to enable type assertions like this:
 | 
			
		||||
//   func DoSomethingWithImpl(log logr.Logger) {
 | 
			
		||||
//       if underlier, ok := log.GetSink()(impl.Underlier) {
 | 
			
		||||
//          implLogger := underlier.GetUnderlying()
 | 
			
		||||
//          ...
 | 
			
		||||
//       }
 | 
			
		||||
//   }
 | 
			
		||||
//
 | 
			
		||||
//	func DoSomethingWithImpl(log logr.Logger) {
 | 
			
		||||
//	    if underlier, ok := log.GetSink().(impl.Underlier); ok {
 | 
			
		||||
//	       implLogger := underlier.GetUnderlying()
 | 
			
		||||
//	       ...
 | 
			
		||||
//	    }
 | 
			
		||||
//	}
 | 
			
		||||
//
 | 
			
		||||
// Custom `With*` functions can be implemented by copying the complete
 | 
			
		||||
// Logger struct and replacing the sink in the copy:
 | 
			
		||||
//   // WithFooBar changes the foobar parameter in the log sink and returns a
 | 
			
		||||
//   // new logger with that modified sink.  It does nothing for loggers where
 | 
			
		||||
//   // the sink doesn't support that parameter.
 | 
			
		||||
//   func WithFoobar(log logr.Logger, foobar int) logr.Logger {
 | 
			
		||||
//      if foobarLogSink, ok := log.GetSink()(FoobarSink); ok {
 | 
			
		||||
//         log = log.WithSink(foobarLogSink.WithFooBar(foobar))
 | 
			
		||||
//      }
 | 
			
		||||
//      return log
 | 
			
		||||
//   }
 | 
			
		||||
//
 | 
			
		||||
//	// WithFooBar changes the foobar parameter in the log sink and returns a
 | 
			
		||||
//	// new logger with that modified sink.  It does nothing for loggers where
 | 
			
		||||
//	// the sink doesn't support that parameter.
 | 
			
		||||
//	func WithFoobar(log logr.Logger, foobar int) logr.Logger {
 | 
			
		||||
//	   if foobarLogSink, ok := log.GetSink().(FoobarSink); ok {
 | 
			
		||||
//	      log = log.WithSink(foobarLogSink.WithFooBar(foobar))
 | 
			
		||||
//	   }
 | 
			
		||||
//	   return log
 | 
			
		||||
//	}
 | 
			
		||||
//
 | 
			
		||||
// Don't use New to construct a new Logger with a LogSink retrieved from an
 | 
			
		||||
// existing Logger. Source code attribution might not work correctly and
 | 
			
		||||
| 
						 | 
				
			
			@ -201,11 +212,14 @@ import (
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
// New returns a new Logger instance.  This is primarily used by libraries
 | 
			
		||||
// implementing LogSink, rather than end users.
 | 
			
		||||
// implementing LogSink, rather than end users.  Passing a nil sink will create
 | 
			
		||||
// a Logger which discards all log lines.
 | 
			
		||||
func New(sink LogSink) Logger {
 | 
			
		||||
	logger := Logger{}
 | 
			
		||||
	logger.setSink(sink)
 | 
			
		||||
	sink.Init(runtimeInfo)
 | 
			
		||||
	if sink != nil {
 | 
			
		||||
		sink.Init(runtimeInfo)
 | 
			
		||||
	}
 | 
			
		||||
	return logger
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -244,7 +258,7 @@ type Logger struct {
 | 
			
		|||
// Enabled tests whether this Logger is enabled.  For example, commandline
 | 
			
		||||
// flags might be used to set the logging verbosity and disable some info logs.
 | 
			
		||||
func (l Logger) Enabled() bool {
 | 
			
		||||
	return l.sink.Enabled(l.level)
 | 
			
		||||
	return l.sink != nil && l.sink.Enabled(l.level)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Info logs a non-error message with the given key/value pairs as context.
 | 
			
		||||
| 
						 | 
				
			
			@ -254,6 +268,9 @@ func (l Logger) Enabled() bool {
 | 
			
		|||
// information.  The key/value pairs must alternate string keys and arbitrary
 | 
			
		||||
// values.
 | 
			
		||||
func (l Logger) Info(msg string, keysAndValues ...interface{}) {
 | 
			
		||||
	if l.sink == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if l.Enabled() {
 | 
			
		||||
		if withHelper, ok := l.sink.(CallStackHelperLogSink); ok {
 | 
			
		||||
			withHelper.GetCallStackHelper()()
 | 
			
		||||
| 
						 | 
				
			
			@ -273,6 +290,9 @@ func (l Logger) Info(msg string, keysAndValues ...interface{}) {
 | 
			
		|||
// triggered this log line, if present. The err parameter is optional
 | 
			
		||||
// and nil may be passed instead of an error instance.
 | 
			
		||||
func (l Logger) Error(err error, msg string, keysAndValues ...interface{}) {
 | 
			
		||||
	if l.sink == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if withHelper, ok := l.sink.(CallStackHelperLogSink); ok {
 | 
			
		||||
		withHelper.GetCallStackHelper()()
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -284,6 +304,9 @@ func (l Logger) Error(err error, msg string, keysAndValues ...interface{}) {
 | 
			
		|||
// level means a log message is less important.  Negative V-levels are treated
 | 
			
		||||
// as 0.
 | 
			
		||||
func (l Logger) V(level int) Logger {
 | 
			
		||||
	if l.sink == nil {
 | 
			
		||||
		return l
 | 
			
		||||
	}
 | 
			
		||||
	if level < 0 {
 | 
			
		||||
		level = 0
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -294,6 +317,9 @@ func (l Logger) V(level int) Logger {
 | 
			
		|||
// WithValues returns a new Logger instance with additional key/value pairs.
 | 
			
		||||
// See Info for documentation on how key/value pairs work.
 | 
			
		||||
func (l Logger) WithValues(keysAndValues ...interface{}) Logger {
 | 
			
		||||
	if l.sink == nil {
 | 
			
		||||
		return l
 | 
			
		||||
	}
 | 
			
		||||
	l.setSink(l.sink.WithValues(keysAndValues...))
 | 
			
		||||
	return l
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -304,6 +330,9 @@ func (l Logger) WithValues(keysAndValues ...interface{}) Logger {
 | 
			
		|||
// contain only letters, digits, and hyphens (see the package documentation for
 | 
			
		||||
// more information).
 | 
			
		||||
func (l Logger) WithName(name string) Logger {
 | 
			
		||||
	if l.sink == nil {
 | 
			
		||||
		return l
 | 
			
		||||
	}
 | 
			
		||||
	l.setSink(l.sink.WithName(name))
 | 
			
		||||
	return l
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -324,6 +353,9 @@ func (l Logger) WithName(name string) Logger {
 | 
			
		|||
// WithCallDepth(1) because it works with implementions that support the
 | 
			
		||||
// CallDepthLogSink and/or CallStackHelperLogSink interfaces.
 | 
			
		||||
func (l Logger) WithCallDepth(depth int) Logger {
 | 
			
		||||
	if l.sink == nil {
 | 
			
		||||
		return l
 | 
			
		||||
	}
 | 
			
		||||
	if withCallDepth, ok := l.sink.(CallDepthLogSink); ok {
 | 
			
		||||
		l.setSink(withCallDepth.WithCallDepth(depth))
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -345,6 +377,9 @@ func (l Logger) WithCallDepth(depth int) Logger {
 | 
			
		|||
// implementation does not support either of these, the original Logger will be
 | 
			
		||||
// returned.
 | 
			
		||||
func (l Logger) WithCallStackHelper() (func(), Logger) {
 | 
			
		||||
	if l.sink == nil {
 | 
			
		||||
		return func() {}, l
 | 
			
		||||
	}
 | 
			
		||||
	var helper func()
 | 
			
		||||
	if withCallDepth, ok := l.sink.(CallDepthLogSink); ok {
 | 
			
		||||
		l.setSink(withCallDepth.WithCallDepth(1))
 | 
			
		||||
| 
						 | 
				
			
			@ -357,6 +392,11 @@ func (l Logger) WithCallStackHelper() (func(), Logger) {
 | 
			
		|||
	return helper, l
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsZero returns true if this logger is an uninitialized zero value
 | 
			
		||||
func (l Logger) IsZero() bool {
 | 
			
		||||
	return l.sink == nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// contextKey is how we find Loggers in a context.Context.
 | 
			
		||||
type contextKey struct{}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -442,7 +482,7 @@ type LogSink interface {
 | 
			
		|||
	WithName(name string) LogSink
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CallDepthLogSink represents a Logger that knows how to climb the call stack
 | 
			
		||||
// CallDepthLogSink represents a LogSink that knows how to climb the call stack
 | 
			
		||||
// to identify the original call site and can offset the depth by a specified
 | 
			
		||||
// number of frames.  This is useful for users who have helper functions
 | 
			
		||||
// between the "real" call site and the actual calls to Logger methods.
 | 
			
		||||
| 
						 | 
				
			
			@ -467,7 +507,7 @@ type CallDepthLogSink interface {
 | 
			
		|||
	WithCallDepth(depth int) LogSink
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CallStackHelperLogSink represents a Logger that knows how to climb
 | 
			
		||||
// CallStackHelperLogSink represents a LogSink that knows how to climb
 | 
			
		||||
// the call stack to identify the original call site and can skip
 | 
			
		||||
// intermediate helper functions if they mark themselves as
 | 
			
		||||
// helper. Go's testing package uses that approach.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,21 @@
 | 
			
		|||
## 2.9.3
 | 
			
		||||
 | 
			
		||||
### Features
 | 
			
		||||
- Add RenderTimeline to GinkgoT() [c0c77b6]
 | 
			
		||||
 | 
			
		||||
### Fixes
 | 
			
		||||
- update Measure deprecation message. fixes #1176 [227c662]
 | 
			
		||||
- add newlines to GinkgoLogr (#1170) (#1171) [0de0e7c]
 | 
			
		||||
 | 
			
		||||
### Maintenance
 | 
			
		||||
- Bump commonmarker from 0.23.8 to 0.23.9 in /docs (#1183) [8b925ab]
 | 
			
		||||
- Bump nokogiri from 1.14.1 to 1.14.3 in /docs (#1184) [e3795a4]
 | 
			
		||||
- Bump golang.org/x/tools from 0.7.0 to 0.8.0 (#1182) [b453793]
 | 
			
		||||
- Bump actions/setup-go from 3 to 4 (#1164) [73ed75b]
 | 
			
		||||
- Bump github.com/onsi/gomega from 1.27.4 to 1.27.6 (#1173) [0a2bc64]
 | 
			
		||||
- Bump github.com/go-logr/logr from 1.2.3 to 1.2.4 (#1174) [f41c557]
 | 
			
		||||
- Bump golang.org/x/sys from 0.6.0 to 0.7.0 (#1179) [8e423e5]
 | 
			
		||||
 | 
			
		||||
## 2.9.2
 | 
			
		||||
 | 
			
		||||
### Maintenance
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,6 +80,9 @@ type FullGinkgoTInterface interface {
 | 
			
		|||
	Fi(indentation uint, format string, args ...any) string
 | 
			
		||||
	Fiw(indentation uint, maxWidth uint, format string, args ...any) string
 | 
			
		||||
 | 
			
		||||
	//Generates a formatted string version of the current spec's timeline
 | 
			
		||||
	RenderTimeline() string
 | 
			
		||||
 | 
			
		||||
	GinkgoRecover()
 | 
			
		||||
	DeferCleanup(args ...any)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/onsi/ginkgo/v2/formatter"
 | 
			
		||||
	"github.com/onsi/ginkgo/v2/internal"
 | 
			
		||||
	"github.com/onsi/ginkgo/v2/reporters"
 | 
			
		||||
	"github.com/onsi/ginkgo/v2/types"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -185,6 +186,9 @@ func (t *ginkgoTestingTProxy) Fi(indentation uint, format string, args ...any) s
 | 
			
		|||
func (t *ginkgoTestingTProxy) Fiw(indentation uint, maxWidth uint, format string, args ...any) string {
 | 
			
		||||
	return t.f.Fiw(indentation, maxWidth, format, args...)
 | 
			
		||||
}
 | 
			
		||||
func (t *ginkgoTestingTProxy) RenderTimeline() string {
 | 
			
		||||
	return reporters.RenderTimeline(t.report(), false)
 | 
			
		||||
}
 | 
			
		||||
func (t *ginkgoTestingTProxy) GinkgoRecover() {
 | 
			
		||||
	t.ginkgoRecover()
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -135,6 +135,6 @@ func (w *Writer) Println(a ...interface{}) {
 | 
			
		|||
 | 
			
		||||
func GinkgoLogrFunc(writer *Writer) logr.Logger {
 | 
			
		||||
	return funcr.New(func(prefix, args string) {
 | 
			
		||||
		writer.Printf("%s", args)
 | 
			
		||||
		writer.Printf("%s\n", args)
 | 
			
		||||
	}, funcr.Options{})
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -344,8 +344,12 @@ func failureDescriptionForUnstructuredReporters(spec types.SpecReport) string {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func systemErrForUnstructuredReporters(spec types.SpecReport) string {
 | 
			
		||||
	return RenderTimeline(spec, true)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func RenderTimeline(spec types.SpecReport, noColor bool) string {
 | 
			
		||||
	out := &strings.Builder{}
 | 
			
		||||
	NewDefaultReporter(types.ReporterConfig{NoColor: true, VeryVerbose: true}, out).emitTimeline(0, spec, spec.Timeline())
 | 
			
		||||
	NewDefaultReporter(types.ReporterConfig{NoColor: noColor, VeryVerbose: true}, out).emitTimeline(0, spec, spec.Timeline())
 | 
			
		||||
	return out.String()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ func (d deprecations) Async() Deprecation {
 | 
			
		|||
 | 
			
		||||
func (d deprecations) Measure() Deprecation {
 | 
			
		||||
	return Deprecation{
 | 
			
		||||
		Message: "Measure is deprecated and will be removed in Ginkgo V2.  Please migrate to gomega/gmeasure.",
 | 
			
		||||
		Message: "Measure is deprecated and has been removed from Ginkgo V2.  Any Measure tests in your spec will not run.  Please migrate to gomega/gmeasure.",
 | 
			
		||||
		DocLink: "removed-measure",
 | 
			
		||||
		Version: "1.16.3",
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
package types
 | 
			
		||||
 | 
			
		||||
const VERSION = "2.9.2"
 | 
			
		||||
const VERSION = "2.9.3"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,12 +44,12 @@ func IExportShallow(fset *token.FileSet, pkg *types.Package) ([]byte, error) {
 | 
			
		|||
	return out.Bytes(), err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IImportShallow decodes "shallow" types.Package data encoded by IExportShallow
 | 
			
		||||
// in the same executable. This function cannot import data from
 | 
			
		||||
// IImportShallow decodes "shallow" types.Package data encoded by
 | 
			
		||||
// IExportShallow in the same executable. This function cannot import data from
 | 
			
		||||
// cmd/compile or gcexportdata.Write.
 | 
			
		||||
func IImportShallow(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string, insert InsertType) (*types.Package, error) {
 | 
			
		||||
func IImportShallow(fset *token.FileSet, getPackage GetPackageFunc, data []byte, path string, insert InsertType) (*types.Package, error) {
 | 
			
		||||
	const bundle = false
 | 
			
		||||
	pkgs, err := iimportCommon(fset, imports, data, bundle, path, insert)
 | 
			
		||||
	pkgs, err := iimportCommon(fset, getPackage, data, bundle, path, insert)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,7 +85,7 @@ const (
 | 
			
		|||
// If the export data version is not recognized or the format is otherwise
 | 
			
		||||
// compromised, an error is returned.
 | 
			
		||||
func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (int, *types.Package, error) {
 | 
			
		||||
	pkgs, err := iimportCommon(fset, imports, data, false, path, nil)
 | 
			
		||||
	pkgs, err := iimportCommon(fset, GetPackageFromMap(imports), data, false, path, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return 0, nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -94,10 +94,33 @@ func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []
 | 
			
		|||
 | 
			
		||||
// IImportBundle imports a set of packages from the serialized package bundle.
 | 
			
		||||
func IImportBundle(fset *token.FileSet, imports map[string]*types.Package, data []byte) ([]*types.Package, error) {
 | 
			
		||||
	return iimportCommon(fset, imports, data, true, "", nil)
 | 
			
		||||
	return iimportCommon(fset, GetPackageFromMap(imports), data, true, "", nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data []byte, bundle bool, path string, insert InsertType) (pkgs []*types.Package, err error) {
 | 
			
		||||
// A GetPackageFunc is a function that gets the package with the given path
 | 
			
		||||
// from the importer state, creating it (with the specified name) if necessary.
 | 
			
		||||
// It is an abstraction of the map historically used to memoize package creation.
 | 
			
		||||
//
 | 
			
		||||
// Two calls with the same path must return the same package.
 | 
			
		||||
//
 | 
			
		||||
// If the given getPackage func returns nil, the import will fail.
 | 
			
		||||
type GetPackageFunc = func(path, name string) *types.Package
 | 
			
		||||
 | 
			
		||||
// GetPackageFromMap returns a GetPackageFunc that retrieves packages from the
 | 
			
		||||
// given map of package path -> package.
 | 
			
		||||
//
 | 
			
		||||
// The resulting func may mutate m: if a requested package is not found, a new
 | 
			
		||||
// package will be inserted into m.
 | 
			
		||||
func GetPackageFromMap(m map[string]*types.Package) GetPackageFunc {
 | 
			
		||||
	return func(path, name string) *types.Package {
 | 
			
		||||
		if _, ok := m[path]; !ok {
 | 
			
		||||
			m[path] = types.NewPackage(path, name)
 | 
			
		||||
		}
 | 
			
		||||
		return m[path]
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func iimportCommon(fset *token.FileSet, getPackage GetPackageFunc, data []byte, bundle bool, path string, insert InsertType) (pkgs []*types.Package, err error) {
 | 
			
		||||
	const currentVersion = iexportVersionCurrent
 | 
			
		||||
	version := int64(-1)
 | 
			
		||||
	if !debug {
 | 
			
		||||
| 
						 | 
				
			
			@ -195,10 +218,9 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data
 | 
			
		|||
		if pkgPath == "" {
 | 
			
		||||
			pkgPath = path
 | 
			
		||||
		}
 | 
			
		||||
		pkg := imports[pkgPath]
 | 
			
		||||
		pkg := getPackage(pkgPath, pkgName)
 | 
			
		||||
		if pkg == nil {
 | 
			
		||||
			pkg = types.NewPackage(pkgPath, pkgName)
 | 
			
		||||
			imports[pkgPath] = pkg
 | 
			
		||||
			errorf("internal error: getPackage returned nil package for %s", pkgPath)
 | 
			
		||||
		} else if pkg.Name() != pkgName {
 | 
			
		||||
			errorf("conflicting names %s and %s for package %q", pkg.Name(), pkgName, path)
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,9 @@
 | 
			
		|||
package tokeninternal
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"go/token"
 | 
			
		||||
	"sort"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -57,3 +59,93 @@ func GetLines(file *token.File) []int {
 | 
			
		|||
		panic("unexpected token.File size")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AddExistingFiles adds the specified files to the FileSet if they
 | 
			
		||||
// are not already present. It panics if any pair of files in the
 | 
			
		||||
// resulting FileSet would overlap.
 | 
			
		||||
func AddExistingFiles(fset *token.FileSet, files []*token.File) {
 | 
			
		||||
	// Punch through the FileSet encapsulation.
 | 
			
		||||
	type tokenFileSet struct {
 | 
			
		||||
		// This type remained essentially consistent from go1.16 to go1.21.
 | 
			
		||||
		mutex sync.RWMutex
 | 
			
		||||
		base  int
 | 
			
		||||
		files []*token.File
 | 
			
		||||
		_     *token.File // changed to atomic.Pointer[token.File] in go1.19
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// If the size of token.FileSet changes, this will fail to compile.
 | 
			
		||||
	const delta = int64(unsafe.Sizeof(tokenFileSet{})) - int64(unsafe.Sizeof(token.FileSet{}))
 | 
			
		||||
	var _ [-delta * delta]int
 | 
			
		||||
 | 
			
		||||
	type uP = unsafe.Pointer
 | 
			
		||||
	var ptr *tokenFileSet
 | 
			
		||||
	*(*uP)(uP(&ptr)) = uP(fset)
 | 
			
		||||
	ptr.mutex.Lock()
 | 
			
		||||
	defer ptr.mutex.Unlock()
 | 
			
		||||
 | 
			
		||||
	// Merge and sort.
 | 
			
		||||
	newFiles := append(ptr.files, files...)
 | 
			
		||||
	sort.Slice(newFiles, func(i, j int) bool {
 | 
			
		||||
		return newFiles[i].Base() < newFiles[j].Base()
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	// Reject overlapping files.
 | 
			
		||||
	// Discard adjacent identical files.
 | 
			
		||||
	out := newFiles[:0]
 | 
			
		||||
	for i, file := range newFiles {
 | 
			
		||||
		if i > 0 {
 | 
			
		||||
			prev := newFiles[i-1]
 | 
			
		||||
			if file == prev {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			if prev.Base()+prev.Size()+1 > file.Base() {
 | 
			
		||||
				panic(fmt.Sprintf("file %s (%d-%d) overlaps with file %s (%d-%d)",
 | 
			
		||||
					prev.Name(), prev.Base(), prev.Base()+prev.Size(),
 | 
			
		||||
					file.Name(), file.Base(), file.Base()+file.Size()))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		out = append(out, file)
 | 
			
		||||
	}
 | 
			
		||||
	newFiles = out
 | 
			
		||||
 | 
			
		||||
	ptr.files = newFiles
 | 
			
		||||
 | 
			
		||||
	// Advance FileSet.Base().
 | 
			
		||||
	if len(newFiles) > 0 {
 | 
			
		||||
		last := newFiles[len(newFiles)-1]
 | 
			
		||||
		newBase := last.Base() + last.Size() + 1
 | 
			
		||||
		if ptr.base < newBase {
 | 
			
		||||
			ptr.base = newBase
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FileSetFor returns a new FileSet containing a sequence of new Files with
 | 
			
		||||
// the same base, size, and line as the input files, for use in APIs that
 | 
			
		||||
// require a FileSet.
 | 
			
		||||
//
 | 
			
		||||
// Precondition: the input files must be non-overlapping, and sorted in order
 | 
			
		||||
// of their Base.
 | 
			
		||||
func FileSetFor(files ...*token.File) *token.FileSet {
 | 
			
		||||
	fset := token.NewFileSet()
 | 
			
		||||
	for _, f := range files {
 | 
			
		||||
		f2 := fset.AddFile(f.Name(), f.Base(), f.Size())
 | 
			
		||||
		lines := GetLines(f)
 | 
			
		||||
		f2.SetLines(lines)
 | 
			
		||||
	}
 | 
			
		||||
	return fset
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CloneFileSet creates a new FileSet holding all files in fset. It does not
 | 
			
		||||
// create copies of the token.Files in fset: they are added to the resulting
 | 
			
		||||
// FileSet unmodified.
 | 
			
		||||
func CloneFileSet(fset *token.FileSet) *token.FileSet {
 | 
			
		||||
	var files []*token.File
 | 
			
		||||
	fset.Iterate(func(f *token.File) bool {
 | 
			
		||||
		files = append(files, f)
 | 
			
		||||
		return true
 | 
			
		||||
	})
 | 
			
		||||
	newFileSet := token.NewFileSet()
 | 
			
		||||
	AddExistingFiles(newFileSet, files)
 | 
			
		||||
	return newFileSet
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -445,7 +445,7 @@ github.com/fsouza/go-dockerclient
 | 
			
		|||
github.com/go-jose/go-jose/v3
 | 
			
		||||
github.com/go-jose/go-jose/v3/cipher
 | 
			
		||||
github.com/go-jose/go-jose/v3/json
 | 
			
		||||
# github.com/go-logr/logr v1.2.3
 | 
			
		||||
# github.com/go-logr/logr v1.2.4
 | 
			
		||||
## explicit; go 1.16
 | 
			
		||||
github.com/go-logr/logr
 | 
			
		||||
github.com/go-logr/logr/funcr
 | 
			
		||||
| 
						 | 
				
			
			@ -686,7 +686,7 @@ github.com/nxadm/tail/winfile
 | 
			
		|||
# github.com/oklog/ulid v1.3.1
 | 
			
		||||
## explicit
 | 
			
		||||
github.com/oklog/ulid
 | 
			
		||||
# github.com/onsi/ginkgo/v2 v2.9.2
 | 
			
		||||
# github.com/onsi/ginkgo/v2 v2.9.3
 | 
			
		||||
## explicit; go 1.18
 | 
			
		||||
github.com/onsi/ginkgo/v2
 | 
			
		||||
github.com/onsi/ginkgo/v2/config
 | 
			
		||||
| 
						 | 
				
			
			@ -959,7 +959,7 @@ golang.org/x/crypto/ssh/knownhosts
 | 
			
		|||
golang.org/x/exp/constraints
 | 
			
		||||
golang.org/x/exp/maps
 | 
			
		||||
golang.org/x/exp/slices
 | 
			
		||||
# golang.org/x/mod v0.9.0
 | 
			
		||||
# golang.org/x/mod v0.10.0
 | 
			
		||||
## explicit; go 1.17
 | 
			
		||||
golang.org/x/mod/semver
 | 
			
		||||
golang.org/x/mod/sumdb/note
 | 
			
		||||
| 
						 | 
				
			
			@ -1020,7 +1020,7 @@ golang.org/x/text/secure/bidirule
 | 
			
		|||
golang.org/x/text/transform
 | 
			
		||||
golang.org/x/text/unicode/bidi
 | 
			
		||||
golang.org/x/text/unicode/norm
 | 
			
		||||
# golang.org/x/tools v0.7.0
 | 
			
		||||
# golang.org/x/tools v0.8.0
 | 
			
		||||
## explicit; go 1.18
 | 
			
		||||
golang.org/x/tools/cmd/stringer
 | 
			
		||||
golang.org/x/tools/go/ast/inspector
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue