From 57eb1a4eeaa27cddc600bc62fe416a41b2d37c3b Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Mon, 6 Jul 2015 23:02:16 +0200 Subject: [PATCH] cmd_backup: filter non-existing target files/dirs --- cmd/restic/cmd_backup.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/cmd/restic/cmd_backup.go b/cmd/restic/cmd_backup.go index 32d486329..99c91aef3 100644 --- a/cmd/restic/cmd_backup.go +++ b/cmd/restic/cmd_backup.go @@ -1,6 +1,7 @@ package main import ( + "errors" "fmt" "os" "path/filepath" @@ -202,6 +203,25 @@ func findLatestSnapshot(repo *repository.Repository, targets []string) (backend. return latestID, nil } +// filterExisting returns a slice of all existing items, or an error if no +// items exist at all. +func filterExisting(items []string) (result []string, err error) { + for _, item := range items { + _, err := os.Lstat(item) + if err != nil && os.IsNotExist(err) { + continue + } + + result = append(result, item) + } + + if len(result) == 0 { + return nil, errors.New("all target directories/files do not exist") + } + + return +} + func (cmd CmdBackup) Execute(args []string) error { if len(args) == 0 { return fmt.Errorf("wrong number of parameters, Usage: %s", cmd.Usage()) @@ -215,6 +235,11 @@ func (cmd CmdBackup) Execute(args []string) error { target = append(target, d) } + target, err := filterExisting(target) + if err != nil { + return err + } + repo, err := cmd.global.OpenRepository() if err != nil { return err