feat: Add --dry-run to backup command (#438)

Restic supports --dry-run for backups since 0.13.0 [1] and this adds
support for that.

[1] bc97a3d1f9
This commit is contained in:
Duru Can Celasun 2025-03-22 18:10:51 +00:00 committed by GitHub
parent bd36bbe429
commit 39f4f87ce3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 13 additions and 4 deletions

View File

@ -18,9 +18,11 @@ var backupCmd = &cobra.Command{
err := lock.Lock()
CheckErr(err)
defer lock.Unlock()
dry, _ := cmd.Flags().GetBool("dry-run")
selected, err := internal.GetAllOrSelected(cmd, false)
CheckErr(err)
errors := 0
for _, name := range selected {
var splitted = strings.Split(name, "@")
@ -29,7 +31,7 @@ var backupCmd = &cobra.Command{
specificBackend = splitted[1]
}
location, _ := internal.GetLocation(splitted[0])
errs := location.Backup(false, specificBackend)
errs := location.Backup(false, dry, specificBackend)
for _, err := range errs {
colors.Error.Printf("%s\n\n", err)
errors++
@ -44,4 +46,5 @@ var backupCmd = &cobra.Command{
func init() {
rootCmd.AddCommand(backupCmd)
internal.AddFlagsToCommand(backupCmd, false)
backupCmd.Flags().Bool("dry-run", false, "do not write changes, show what would be affected")
}

View File

@ -1,11 +1,14 @@
# Backup
```bash
autorestic backup [-l, --location] [-a, --all]
autorestic backup [-l, --location] [-a, --all] [--dry-run]
```
Performs a backup of all locations if the `-a` flag is passed. To only backup some locations pass one or more `-l` or `--location` flags.
The `--dry-run` flag will do a dry run showing what would have been deleted, but won't touch the actual data.
```bash
# All
autorestic backup -a

View File

@ -168,7 +168,7 @@ func (l Location) getLocationTags() string {
return buildTag("location", l.name)
}
func (l Location) Backup(cron bool, specificBackend string) []error {
func (l Location) Backup(cron bool, dry bool, specificBackend string) []error {
var errors []error
var backends []string
colors.PrimaryPrint(" Backing up location \"%s\" ", l.name)
@ -228,6 +228,9 @@ func (l Location) Backup(cron bool, specificBackend string) []error {
if cron {
cmd = append(cmd, "--tag", buildTag("cron"))
}
if dry {
cmd = append(cmd, "--dry-run")
}
cmd = append(cmd, "--tag", l.getLocationTags())
backupOptions := ExecuteOptions{
Envs: env,
@ -447,7 +450,7 @@ func (l Location) RunCron() error {
now := time.Now()
if now.After(next) {
lock.SetCron(l.name, now.Unix())
errs := l.Backup(true, "")
errs := l.Backup(true, false, "")
if len(errs) > 0 {
return fmt.Errorf("Failed to backup location \"%s\":\n%w", l.name, errors.Join(errs...))
}