Skip to content

Commit 5127937

Browse files
committed
support malformed semi structured errors
1 parent fdba8e9 commit 5127937

File tree

3 files changed

+18
-5
lines changed

3 files changed

+18
-5
lines changed

errors/error_piece.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ type ErrorPiece struct {
4646

4747
ReorganizePiecesAroundCommas bool
4848
FormatPiecesAsList bool
49+
50+
closed bool
4951
}
5052

5153
func NewErrorPiecesFromString(str string) (*ErrorPiece, bool) {
@@ -70,6 +72,7 @@ func NewErrorPiecesFromString(str string) (*ErrorPiece, bool) {
7072
continue
7173

7274
case braketClose, curlyClose, parenClose:
75+
stack[len(stack)-1].closed = true
7376
stack = stack[:len(stack)-1]
7477
continue
7578
}
@@ -84,6 +87,7 @@ func NewErrorPiecesFromString(str string) (*ErrorPiece, bool) {
8487

8588
case checkBackward(str, i, rawClose):
8689
stack[len(stack)-1].AddStr(charStr)
90+
stack[len(stack)-1].closed = true
8791
stack = stack[:len(stack)-1]
8892

8993
default:
@@ -206,7 +210,9 @@ func (p *ErrorPiece) AsString() string {
206210
for _, piece := range p.Pieces {
207211
result += piece.AsString()
208212
}
209-
result += sepClosers[p.ContainerType]
213+
if p.closed {
214+
result += sepClosers[p.ContainerType]
215+
}
210216
}
211217

212218
return result

errors/multi_line_error.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,7 @@ func (e MultiLineError) Error() (result string) {
2828

2929
lines := strings.Split(e.err.Error(), "\n")
3030

31-
firstLineRootPiece, complete := NewErrorPiecesFromString(lines[0])
32-
if !complete {
33-
return e.err.Error() // cannot deconstruct error message, return original
34-
}
31+
firstLineRootPiece, _ := NewErrorPiecesFromString(lines[0])
3532

3633
for _, piece := range firstLineRootPiece.Pieces {
3734
// Do not split withing container pieces

errors/mutli_line_error_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,16 @@ Applying create deployment/frontend (apps/v1) namespace: default:
4141
- spec.template.spec.restartPolicy: Unsupported value: "Always": supported values: "OnFailure", "Never"
4242
4343
(reason: Invalid)
44+
`,
45+
},
46+
{
47+
// TODO may be deal with this better
48+
Description: "uneven bracing",
49+
Actual: `Applying create service/redis-master (v1) namespace: default: Creating resource service/redis-master (v1) namespace: default: Service in version "v1" cannot be handled as a Service: v1.Service.Spec: v1.ServiceSpec.Ports: []v1.ServicePort: decode slice: expect [ or n, but found ", error found in #10 byte of ...|{"ports":"foo","sele|..., bigger context ...|s-master","namespace":"default"},"spec":{"ports":"foo","selector":{"app":"redis","kapp.k14s.io/app":|... (reason: BadRequest)`,
50+
Expected: `
51+
Applying create service/redis-master (v1) namespace: default:
52+
Creating resource service/redis-master (v1) namespace: default:
53+
Service in version "v1" cannot be handled as a Service: v1.Service.Spec: v1.ServiceSpec.Ports: []v1.ServicePort: decode slice: expect [ or n, but found ", error found in #10 byte of ...|{"ports":"foo","sele|..., bigger context ...|s-master","namespace":"default"},"spec":{"ports":"foo","selector":{"app":"redis","kapp.k14s.io/app":|... (reason: BadRequest)
4454
`,
4555
},
4656
}

0 commit comments

Comments
 (0)