Skip to content

Commit d64dc4f

Browse files
fix #41:
a message was sent to stderr when parameter initialize=true and repo exists
1 parent 02e6414 commit d64dc4f

File tree

3 files changed

+37
-10
lines changed

3 files changed

+37
-10
lines changed

examples/dev.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ self:
8080
inherit: default
8181
status-file: /Volumes/RAMDisk/status.json
8282
backup:
83-
extended-status: true
83+
extended-status: false
8484
check-before: false
8585
no-error-on-warning: true
8686
source: {{ .CurrentDir }}

shell/command.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,11 @@ func (c *Command) Run() (Summary, string, error) {
8484
} else {
8585
cmd.Stdout = c.Stdout
8686
}
87-
stderr, err = cmd.StderrPipe()
88-
if err != nil {
89-
cmd.Stderr = c.Stderr
87+
if c.Stderr != nil {
88+
stderr, err = cmd.StderrPipe()
89+
if err != nil {
90+
cmd.Stderr = c.Stderr
91+
}
9092
}
9193
cmd.Stdin = c.Stdin
9294

shell/command_test.go

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -279,11 +279,12 @@ func TestStderr(t *testing.T) {
279279
}
280280

281281
cmd := NewCommand("echo", []string{"error message", ">&2"})
282-
buffer := &bytes.Buffer{}
283-
cmd.Stdout = buffer
282+
bufferStdout, bufferStderr := &bytes.Buffer{}, &bytes.Buffer{}
283+
cmd.Stdout = bufferStdout
284+
cmd.Stderr = bufferStderr
284285
_, stderr, err := cmd.Run()
285286
require.NoError(t, err)
286-
assert.Empty(t, buffer.String())
287+
assert.Empty(t, bufferStdout.String())
287288
assert.Equal(t, expected, stderr)
288289
}
289290

@@ -295,14 +296,38 @@ func TestStderrSignalledCommand(t *testing.T) {
295296

296297
sigChan := make(chan os.Signal, 1)
297298
cmd := NewSignalledCommand("echo", []string{"error message", ">&2"}, sigChan)
298-
buffer := &bytes.Buffer{}
299-
cmd.Stdout = buffer
299+
bufferStdout, bufferStderr := &bytes.Buffer{}, &bytes.Buffer{}
300+
cmd.Stdout = bufferStdout
301+
cmd.Stderr = bufferStderr
300302
_, stderr, err := cmd.Run()
301303
require.NoError(t, err)
302-
assert.Empty(t, buffer.String())
304+
assert.Empty(t, bufferStdout.String())
303305
assert.Equal(t, expected, stderr)
304306
}
305307

308+
func TestStderrNotRedirected(t *testing.T) {
309+
cmd := NewCommand("echo", []string{"error message", ">&2"})
310+
bufferStdout := &bytes.Buffer{}
311+
cmd.Stdout = bufferStdout
312+
cmd.Stderr = nil
313+
_, stderr, err := cmd.Run()
314+
require.NoError(t, err)
315+
assert.Empty(t, bufferStdout.String())
316+
assert.Equal(t, "", stderr)
317+
}
318+
319+
func TestStderrNotRedirectedSignalledCommand(t *testing.T) {
320+
sigChan := make(chan os.Signal, 1)
321+
cmd := NewSignalledCommand("echo", []string{"error message", ">&2"}, sigChan)
322+
bufferStdout := &bytes.Buffer{}
323+
cmd.Stdout = bufferStdout
324+
cmd.Stderr = nil
325+
_, stderr, err := cmd.Run()
326+
require.NoError(t, err)
327+
assert.Empty(t, bufferStdout.String())
328+
assert.Equal(t, "", stderr)
329+
}
330+
306331
// Try to make a test to make sure restic is catching the signal properly
307332
func TestResticCanCatchInterruptSignal(t *testing.T) {
308333
// if runtime.GOOS == "windows" {

0 commit comments

Comments
 (0)