Skip to content

Commit aa39ba8

Browse files
authored
Merge pull request #452 from homeport/fix/panic
Fix panic when exit code does not have a cause
2 parents 362e750 + b1ec0fc commit aa39ba8

File tree

3 files changed

+54
-33
lines changed

3 files changed

+54
-33
lines changed

cmd/dyff/main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func main() {
4444

4545
} else {
4646
headline = "Error occurred"
47-
content = err.Cause().Error()
47+
content = err.Error()
4848
}
4949

5050
fmt.Fprint(
@@ -59,7 +59,7 @@ func main() {
5959

6060
os.Exit(err.Value())
6161

62-
default: // fail safe for somehow an non exit code error slips through
62+
default: // fail safe for when somehow a non exit-code error slips through
6363
fmt.Fprint(os.Stderr, err.Error())
6464
os.Exit(1)
6565
}

internal/cmd/exitcode.go

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// Copyright © 2025 The Homeport Team
2+
//
3+
// Permission is hereby granted, free of charge, to any person obtaining a copy
4+
// of this software and associated documentation files (the "Software"), to deal
5+
// in the Software without restriction, including without limitation the rights
6+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7+
// copies of the Software, and to permit persons to whom the Software is
8+
// furnished to do so, subject to the following conditions:
9+
//
10+
// The above copyright notice and this permission notice shall be included in
11+
// all copies or substantial portions of the Software.
12+
//
13+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19+
// THE SOFTWARE.
20+
21+
package cmd
22+
23+
// ExitCode is an error interface that has exit code (value) details
24+
type ExitCode interface {
25+
Value() int
26+
Cause() error
27+
Error() string
28+
}
29+
30+
// errorWithExitCode is just a way to transport the exit code to the main package
31+
type errorWithExitCode struct {
32+
value int
33+
cause error
34+
}
35+
36+
var _ ExitCode = errorWithExitCode{}
37+
38+
func (e errorWithExitCode) Value() int {
39+
return e.value
40+
}
41+
42+
func (e errorWithExitCode) Cause() error {
43+
return e.cause
44+
}
45+
46+
func (e errorWithExitCode) Error() string {
47+
if e.cause != nil {
48+
return e.cause.Error()
49+
}
50+
51+
return ""
52+
}

internal/cmd/root.go

-31
Original file line numberDiff line numberDiff line change
@@ -31,37 +31,6 @@ import (
3131
"github.com/spf13/cobra"
3232
)
3333

34-
// ExitCode is an error interface that has exit code (value) details
35-
type ExitCode interface {
36-
Value() int
37-
Cause() error
38-
Error() string
39-
}
40-
41-
// errorWithExitCode is just a way to transport the exit code to the main package
42-
type errorWithExitCode struct {
43-
value int
44-
cause error
45-
}
46-
47-
var _ ExitCode = errorWithExitCode{}
48-
49-
func (e errorWithExitCode) Value() int {
50-
return e.value
51-
}
52-
53-
func (e errorWithExitCode) Cause() error {
54-
return e.cause
55-
}
56-
57-
func (e errorWithExitCode) Error() string {
58-
if e.cause != nil {
59-
return e.cause.Error()
60-
}
61-
62-
return ""
63-
}
64-
6534
var name = func() string {
6635
ep, err := os.Executable()
6736
if err != nil {

0 commit comments

Comments
 (0)