Skip to content

Commit ae67779

Browse files
committed
fix: address PR review comments from copilot
- Remove unreachable --version flag check in local command - Fix prepareStdinValues to handle all stdin value files - Add proper error handling for os.Pipe and ReadFrom in tests - Handle errors in fake helm test helpers Signed-off-by: yxxhero <aiopsclub@163.com>
1 parent e47c4f8 commit ae67779

3 files changed

Lines changed: 67 additions & 37 deletions

File tree

cmd/local.go

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,8 @@ func localCmd() *cobra.Command {
6464
" helm diff local /path/to/chart-a /path/to/chart-b --set replicas=3",
6565
}, "\n"),
6666
RunE: func(cmd *cobra.Command, args []string) error {
67-
// Suppress the command usage on error. See #77 for more info
6867
cmd.SilenceUsage = true
6968

70-
if v, _ := cmd.Flags().GetBool("version"); v {
71-
fmt.Println(Version)
72-
return nil
73-
}
74-
7569
if err := checkArgsLength(len(args), "chart1 path", "chart2 path"); err != nil {
7670
return err
7771
}
@@ -154,32 +148,40 @@ func (l *local) run() error {
154148
}
155149

156150
func (l *local) prepareStdinValues() (func(), error) {
151+
var name string
152+
157153
for i, valueFile := range l.valueFiles {
158154
if strings.TrimSpace(valueFile) == "-" {
159-
data, err := io.ReadAll(os.Stdin)
160-
if err != nil {
161-
return nil, err
155+
if name == "" {
156+
data, err := io.ReadAll(os.Stdin)
157+
if err != nil {
158+
return nil, err
159+
}
160+
161+
tmpfile, err := os.CreateTemp("", "helm-diff-stdin-values")
162+
if err != nil {
163+
return nil, err
164+
}
165+
166+
if _, err := tmpfile.Write(data); err != nil {
167+
_ = tmpfile.Close()
168+
return nil, err
169+
}
170+
171+
if err := tmpfile.Close(); err != nil {
172+
return nil, err
173+
}
174+
175+
name = tmpfile.Name()
162176
}
163177

164-
tmpfile, err := os.CreateTemp("", "helm-diff-stdin-values")
165-
if err != nil {
166-
return nil, err
167-
}
168-
169-
if _, err := tmpfile.Write(data); err != nil {
170-
_ = tmpfile.Close()
171-
return nil, err
172-
}
173-
174-
if err := tmpfile.Close(); err != nil {
175-
return nil, err
176-
}
177-
178-
l.valueFiles[i] = tmpfile.Name()
179-
name := tmpfile.Name()
180-
return func() { _ = os.Remove(name) }, nil
178+
l.valueFiles[i] = name
181179
}
182180
}
181+
182+
if name != "" {
183+
return func() { _ = os.Remove(name) }, nil
184+
}
183185
return nil, nil
184186
}
185187

cmd/local_test.go

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,16 @@ data:
8787
chart2 := t.TempDir()
8888

8989
oldStdout := os.Stdout
90-
r, w, _ := os.Pipe()
90+
r, w, err := os.Pipe()
91+
if err != nil {
92+
t.Fatalf("Failed to create pipe: %v", err)
93+
}
9194
os.Stdout = w
9295

9396
cmd := localCmd()
9497
cmd.SetArgs([]string{chart1, chart2})
9598

96-
err := cmd.Execute()
99+
err = cmd.Execute()
97100
w.Close()
98101
os.Stdout = oldStdout
99102

@@ -102,7 +105,10 @@ data:
102105
}
103106

104107
var buf bytes.Buffer
105-
buf.ReadFrom(r)
108+
if _, err := buf.ReadFrom(r); err != nil {
109+
t.Fatalf("Failed to read from pipe: %v", err)
110+
}
111+
r.Close()
106112
if buf.String() != "" {
107113
t.Errorf("Expected no output when charts are identical, got: %q", buf.String())
108114
}
@@ -133,13 +139,16 @@ data:
133139
chart2 := t.TempDir()
134140

135141
oldStdout := os.Stdout
136-
r, w, _ := os.Pipe()
142+
r, w, err := os.Pipe()
143+
if err != nil {
144+
t.Fatalf("Failed to create pipe: %v", err)
145+
}
137146
os.Stdout = w
138147

139148
cmd := localCmd()
140149
cmd.SetArgs([]string{chart1, chart2})
141150

142-
err := cmd.Execute()
151+
err = cmd.Execute()
143152
w.Close()
144153
os.Stdout = oldStdout
145154

@@ -148,7 +157,10 @@ data:
148157
}
149158

150159
var buf bytes.Buffer
151-
buf.ReadFrom(r)
160+
if _, err := buf.ReadFrom(r); err != nil {
161+
t.Fatalf("Failed to read from pipe: %v", err)
162+
}
163+
r.Close()
152164
output := buf.String()
153165

154166
if !strings.Contains(output, "value1") || !strings.Contains(output, "value2") {
@@ -244,7 +256,10 @@ data:
244256
t.Fatalf("Expected no error but got: %v", err)
245257
}
246258

247-
args1, _ := os.ReadFile(argsFile)
259+
args1, err := os.ReadFile(argsFile)
260+
if err != nil {
261+
t.Fatalf("Expected fake helm args file to be readable, but got: %v", err)
262+
}
248263
if !strings.Contains(string(args1), "--namespace myns") {
249264
t.Errorf("Expected --namespace myns in helm template args, got: %q", string(args1))
250265
}

cmd/main_test.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,23 @@ func TestMain(m *testing.M) {
1616
os.Exit(1)
1717
case "dual":
1818
countFile := os.Getenv("HELM_DIFF_FAKE_COUNT_FILE")
19-
data, _ := os.ReadFile(countFile)
19+
data, err := os.ReadFile(countFile)
20+
if err != nil && !os.IsNotExist(err) {
21+
fmt.Fprintf(os.Stderr, "failed to read count file %q: %v\n", countFile, err)
22+
os.Exit(1)
23+
}
2024
count := 0
2125
if len(data) > 0 {
22-
fmt.Sscanf(string(data), "%d", &count)
26+
if _, err := fmt.Sscanf(string(data), "%d", &count); err != nil {
27+
fmt.Fprintf(os.Stderr, "failed to parse count from %q: %v\n", string(data), err)
28+
os.Exit(1)
29+
}
2330
}
2431
count++
25-
os.WriteFile(countFile, []byte(fmt.Sprintf("%d", count)), 0644)
32+
if err := os.WriteFile(countFile, []byte(fmt.Sprintf("%d", count)), 0644); err != nil {
33+
fmt.Fprintf(os.Stderr, "failed to write count file %q: %v\n", countFile, err)
34+
os.Exit(1)
35+
}
2636
if count == 1 {
2737
fmt.Print(os.Getenv("HELM_DIFF_FAKE_OUTPUT_1"))
2838
} else {
@@ -31,7 +41,10 @@ func TestMain(m *testing.M) {
3141
case "capture_args":
3242
argsFile := os.Getenv("HELM_DIFF_FAKE_ARGS_FILE")
3343
if argsFile != "" {
34-
os.WriteFile(argsFile, []byte(strings.Join(os.Args[1:], " ")), 0644)
44+
if err := os.WriteFile(argsFile, []byte(strings.Join(os.Args[1:], " ")), 0644); err != nil {
45+
fmt.Fprintf(os.Stderr, "failed to write fake helm args file %q: %v\n", argsFile, err)
46+
os.Exit(1)
47+
}
3548
}
3649
fmt.Print(os.Getenv("HELM_DIFF_FAKE_OUTPUT"))
3750
default:

0 commit comments

Comments
 (0)