mirror of
https://github.com/restic/restic.git
synced 2025-02-02 20:46:57 +00:00
backup: add group-by option
This commit is contained in:
parent
acb40d2b94
commit
2885db7902
1 changed files with 18 additions and 1 deletions
|
@ -89,6 +89,7 @@ type BackupOptions struct {
|
||||||
excludePatternOptions
|
excludePatternOptions
|
||||||
|
|
||||||
Parent string
|
Parent string
|
||||||
|
GroupBy restic.SnapshotGroupByOptions
|
||||||
Force bool
|
Force bool
|
||||||
ExcludeOtherFS bool
|
ExcludeOtherFS bool
|
||||||
ExcludeIfPresent []string
|
ExcludeIfPresent []string
|
||||||
|
@ -121,6 +122,8 @@ func init() {
|
||||||
|
|
||||||
f := cmdBackup.Flags()
|
f := cmdBackup.Flags()
|
||||||
f.StringVar(&backupOptions.Parent, "parent", "", "use this parent `snapshot` (default: last snapshot in the repository that has the same target files/directories, and is not newer than the snapshot time)")
|
f.StringVar(&backupOptions.Parent, "parent", "", "use this parent `snapshot` (default: last snapshot in the repository that has the same target files/directories, and is not newer than the snapshot time)")
|
||||||
|
backupOptions.GroupBy = restic.SnapshotGroupByOptions{Host: true, Path: true}
|
||||||
|
f.VarP(&backupOptions.GroupBy, "group-by", "g", "`group` snapshots by host, paths and/or tags, separated by comma (disable grouping with '')")
|
||||||
f.BoolVarP(&backupOptions.Force, "force", "f", false, `force re-reading the target files/directories (overrides the "parent" flag)`)
|
f.BoolVarP(&backupOptions.Force, "force", "f", false, `force re-reading the target files/directories (overrides the "parent" flag)`)
|
||||||
|
|
||||||
initExcludePatternOptions(f, &backupOptions.excludePatternOptions)
|
initExcludePatternOptions(f, &backupOptions.excludePatternOptions)
|
||||||
|
@ -439,7 +442,21 @@ func findParentSnapshot(ctx context.Context, repo restic.Repository, opts Backup
|
||||||
if snName == "" {
|
if snName == "" {
|
||||||
snName = "latest"
|
snName = "latest"
|
||||||
}
|
}
|
||||||
sn, err := restic.FindFilteredSnapshot(ctx, repo.Backend(), repo, []string{opts.Host}, []restic.TagList{}, targets, &timeStampLimit, snName)
|
|
||||||
|
var hosts []string
|
||||||
|
var paths []string
|
||||||
|
var tags []restic.TagList
|
||||||
|
if opts.GroupBy.Host {
|
||||||
|
hosts = []string{opts.Host}
|
||||||
|
}
|
||||||
|
if opts.GroupBy.Path {
|
||||||
|
paths = targets
|
||||||
|
}
|
||||||
|
if opts.GroupBy.Tag {
|
||||||
|
tags = []restic.TagList{opts.Tags.Flatten()}
|
||||||
|
}
|
||||||
|
|
||||||
|
sn, err := restic.FindFilteredSnapshot(ctx, repo.Backend(), repo, hosts, tags, paths, &timeStampLimit, snName)
|
||||||
// Snapshot not found is ok if no explicit parent was set
|
// Snapshot not found is ok if no explicit parent was set
|
||||||
if opts.Parent == "" && errors.Is(err, restic.ErrNoSnapshotFound) {
|
if opts.Parent == "" && errors.Is(err, restic.ErrNoSnapshotFound) {
|
||||||
err = nil
|
err = nil
|
||||||
|
|
Loading…
Reference in a new issue