Skip to content

Commit 4cf80eb

Browse files
authored
Merge pull request #523 from shutter-network/feat/config-overwrite
Feat: Allow generate-config and dump-config commands to overwrite via flag
2 parents d857e30 + 668425f commit 4cf80eb

File tree

5 files changed

+23
-9
lines changed

5 files changed

+23
-9
lines changed

rolling-shutter/medley/configuration/command/command.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,16 @@ func Build[T configuration.Config](
117117
if err != nil {
118118
return err
119119
}
120-
return WriteConfig(builder.filesystem, cfg, outPath)
120+
overwrite, err := cmd.Flags().GetBool("force")
121+
if err != nil {
122+
return err
123+
}
124+
return WriteConfig(builder.filesystem, cfg, outPath, overwrite)
121125
},
122126
}
123127
genConfigCmd.PersistentFlags().String("output", "", "output file")
124128
genConfigCmd.MarkPersistentFlagRequired("output")
129+
genConfigCmd.PersistentFlags().BoolP("force", "f", false, "overwrite existing file")
125130
cb.cobraCommand.AddCommand(genConfigCmd)
126131
}
127132
if builder.dumpConfig {
@@ -145,13 +150,18 @@ func Build[T configuration.Config](
145150
log.Debug().
146151
Interface("config", cfg).
147152
Msg("dumping config")
148-
return WriteConfig(builder.filesystem, cfg, outPath)
153+
overwrite, err := cmd.Flags().GetBool("force")
154+
if err != nil {
155+
return err
156+
}
157+
return WriteConfig(builder.filesystem, cfg, outPath, overwrite)
149158
},
150159
}
151160
dumpConfigCmd.PersistentFlags().String("output", "", "output file")
152161
dumpConfigCmd.MarkPersistentFlagRequired("output")
153162
dumpConfigCmd.PersistentFlags().String("config", "", "config file")
154163
dumpConfigCmd.MarkPersistentFlagFilename("config")
164+
dumpConfigCmd.PersistentFlags().BoolP("force", "f", false, "overwrite existing file")
155165
cb.cobraCommand.AddCommand(dumpConfigCmd)
156166
}
157167
return cb

rolling-shutter/medley/configuration/command/parse.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ func CommandAddConfigFileFlag(cmd *cobra.Command) {
2424
cmd.MarkPersistentFlagFilename("config")
2525
}
2626

27-
func WriteConfig(fs afero.Fs, config configuration.Config, outPath string) error {
27+
func WriteConfig(fs afero.Fs, config configuration.Config, outPath string, overwrite bool) error {
2828
buf := &bytes.Buffer{}
2929
if err := configuration.WriteTOML(buf, config); err != nil {
3030
return errors.Wrap(err, "failed to write config file")
3131
}
32-
return medley.SecureSpit(fs, outPath, buf.Bytes())
32+
return medley.SecureSpit(fs, outPath, buf.Bytes(), overwrite)
3333
}
3434

3535
// ParseCLI reads in the CLI argument context from the

rolling-shutter/medley/configuration/test/config_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func TestConfiguration(t *testing.T) {
4545
err = afs.MkdirAll(dirPath, os.ModeDir)
4646
assert.NilError(t, err)
4747

48-
err = command.WriteConfig(afs, config, configFile)
48+
err = command.WriteConfig(afs, config, configFile, false)
4949
assert.NilError(t, err)
5050

5151
file, err := afero.ReadFile(afs, configFile)

rolling-shutter/medley/configuration/test/helper.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func RoundtripParseConfig[T configuration.Config](
2828
err := afs.MkdirAll(dirPath, os.ModeDir)
2929
assert.NilError(t, err)
3030

31-
err = command.WriteConfig(afs, config, configFile)
31+
err = command.WriteConfig(afs, config, configFile, false)
3232
assert.NilError(t, err)
3333

3434
var parsedConfig T

rolling-shutter/medley/spit.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@ import (
77
)
88

99
// SecureSpit creates a new file with the given path and writes the given content to it. The file
10-
// is created with with mode 0600. SecureSpit will not overwrite an existing file.
11-
func SecureSpit(fs afero.Fs, path string, content []byte) error {
10+
// is created with with mode 0600. SecureSpit will not overwrite an existing file unless asked.
11+
func SecureSpit(fs afero.Fs, path string, content []byte, overwrite bool) error {
1212
var err error
13-
file, err := fs.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0o600)
13+
flags := os.O_RDWR | os.O_CREATE
14+
if !overwrite {
15+
flags |= os.O_EXCL
16+
}
17+
file, err := fs.OpenFile(path, flags, 0o600)
1418
if err != nil {
1519
return err
1620
}

0 commit comments

Comments
 (0)