mirror of
https://github.com/octoleo/restic.git
synced 2024-11-22 21:05:10 +00:00
Don't require self-update --output
placeholder file
This removes the requirement on `restic self-update --output` to point to a path of an existing file, to overwrite. In case the specified path does exist we still want to verify that it's a regular file, rather than a directory or a device, which gets overwritten. We also want to verify that a path to a new file exists within an existing directory. The alternative being running into that issue after the actual download, etc has completed. While at it I also replace `errors.Errorf` with the more appropriately verbose `errors.Fatalf`. Resolves #2491
This commit is contained in:
parent
429f97b887
commit
ce14df303b
9
changelog/unreleased/issue-2491
Normal file
9
changelog/unreleased/issue-2491
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
Bugfix: Don't require `self-update --output` placeholder file
|
||||||
|
|
||||||
|
`restic self-update --output /path/to/new-restic` used to require that
|
||||||
|
new-restic was an existing file, to be overwritten. Now it's possible
|
||||||
|
to download an updated restic binary to a new path, without first
|
||||||
|
having to create a placeholder file.
|
||||||
|
|
||||||
|
https://github.com/restic/restic/issues/2491
|
||||||
|
https://github.com/restic/restic/pull/2937
|
@ -4,6 +4,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/restic/restic/internal/errors"
|
"github.com/restic/restic/internal/errors"
|
||||||
"github.com/restic/restic/internal/selfupdate"
|
"github.com/restic/restic/internal/selfupdate"
|
||||||
@ -56,11 +57,18 @@ func runSelfUpdate(opts SelfUpdateOptions, gopts GlobalOptions, args []string) e
|
|||||||
|
|
||||||
fi, err := os.Lstat(opts.Output)
|
fi, err := os.Lstat(opts.Output)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
dirname := filepath.Dir(opts.Output)
|
||||||
}
|
di, err := os.Lstat(dirname)
|
||||||
|
if err != nil {
|
||||||
if !fi.Mode().IsRegular() {
|
return err
|
||||||
return errors.Errorf("output file %v is not a normal file, use --output to specify a different file", opts.Output)
|
}
|
||||||
|
if !di.Mode().IsDir() {
|
||||||
|
return errors.Fatalf("output parent path %v is not a directory, use --output to specify a different file path", dirname)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if !fi.Mode().IsRegular() {
|
||||||
|
return errors.Fatalf("output path %v is not a normal file, use --output to specify a different file path", opts.Output)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Printf("writing restic to %v\n", opts.Output)
|
Printf("writing restic to %v\n", opts.Output)
|
||||||
|
Loading…
Reference in New Issue
Block a user