details and restore exit on missing backup (#2066)
## Description Ensures that the details and restore commands exit without attempting further processing if a backupID doesn't point to either a valid backup or backup details, and that the user is appropriately notified. ## Does this PR need a docs update or release note? - [x] ⛔ No ## Type of change - [x] 🧹 Tech Debt/Cleanup ## Issue(s) * #1877 ## Test Plan - [x] 💚 E2E
This commit is contained in:
parent
634780a189
commit
daaa258867
@ -508,11 +508,6 @@ func runDetailsExchangeCmd(
|
|||||||
sel := utils.IncludeExchangeRestoreDataSelectors(opts)
|
sel := utils.IncludeExchangeRestoreDataSelectors(opts)
|
||||||
utils.FilterExchangeRestoreInfoSelectors(sel, opts)
|
utils.FilterExchangeRestoreInfoSelectors(sel, opts)
|
||||||
|
|
||||||
// if no selector flags were specified, get all data in the service.
|
|
||||||
if len(sel.Scopes()) == 0 {
|
|
||||||
sel.Include(sel.AllData())
|
|
||||||
}
|
|
||||||
|
|
||||||
return sel.Reduce(ctx, d), nil
|
return sel.Reduce(ctx, d), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -399,11 +399,6 @@ func runDetailsOneDriveCmd(
|
|||||||
sel := utils.IncludeOneDriveRestoreDataSelectors(opts)
|
sel := utils.IncludeOneDriveRestoreDataSelectors(opts)
|
||||||
utils.FilterOneDriveRestoreInfoSelectors(sel, opts)
|
utils.FilterOneDriveRestoreInfoSelectors(sel, opts)
|
||||||
|
|
||||||
// if no selector flags were specified, get all data in the service.
|
|
||||||
if len(sel.Scopes()) == 0 {
|
|
||||||
sel.Include(sel.AllData())
|
|
||||||
}
|
|
||||||
|
|
||||||
return sel.Reduce(ctx, d), nil
|
return sel.Reduce(ctx, d), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -483,10 +483,5 @@ func runDetailsSharePointCmd(
|
|||||||
sel := utils.IncludeSharePointRestoreDataSelectors(opts)
|
sel := utils.IncludeSharePointRestoreDataSelectors(opts)
|
||||||
utils.FilterSharePointRestoreInfoSelectors(sel, opts)
|
utils.FilterSharePointRestoreInfoSelectors(sel, opts)
|
||||||
|
|
||||||
// if no selector flags were specified, get all data in the service.
|
|
||||||
if len(sel.Scopes()) == 0 {
|
|
||||||
sel.Include(sel.AllData())
|
|
||||||
}
|
|
||||||
|
|
||||||
return sel.Reduce(ctx, d), nil
|
return sel.Reduce(ctx, d), nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import (
|
|||||||
. "github.com/alcionai/corso/src/cli/print"
|
. "github.com/alcionai/corso/src/cli/print"
|
||||||
"github.com/alcionai/corso/src/cli/utils"
|
"github.com/alcionai/corso/src/cli/utils"
|
||||||
"github.com/alcionai/corso/src/internal/common"
|
"github.com/alcionai/corso/src/internal/common"
|
||||||
|
"github.com/alcionai/corso/src/internal/kopia"
|
||||||
"github.com/alcionai/corso/src/pkg/control"
|
"github.com/alcionai/corso/src/pkg/control"
|
||||||
"github.com/alcionai/corso/src/pkg/repository"
|
"github.com/alcionai/corso/src/pkg/repository"
|
||||||
)
|
)
|
||||||
@ -215,23 +216,22 @@ func restoreExchangeCmd(cmd *cobra.Command, args []string) error {
|
|||||||
|
|
||||||
defer utils.CloseRepo(ctx, r)
|
defer utils.CloseRepo(ctx, r)
|
||||||
|
|
||||||
|
dest := control.DefaultRestoreDestination(common.SimpleDateTime)
|
||||||
|
|
||||||
sel := utils.IncludeExchangeRestoreDataSelectors(opts)
|
sel := utils.IncludeExchangeRestoreDataSelectors(opts)
|
||||||
utils.FilterExchangeRestoreInfoSelectors(sel, opts)
|
utils.FilterExchangeRestoreInfoSelectors(sel, opts)
|
||||||
|
|
||||||
// if no selector flags were specified, get all data in the service.
|
ro, err := r.NewRestore(ctx, backupID, sel.Selector, dest)
|
||||||
if len(sel.Scopes()) == 0 {
|
|
||||||
sel.Include(sel.AllData())
|
|
||||||
}
|
|
||||||
|
|
||||||
restoreDest := control.DefaultRestoreDestination(common.SimpleDateTime)
|
|
||||||
|
|
||||||
ro, err := r.NewRestore(ctx, backupID, sel.Selector, restoreDest)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Only(ctx, errors.Wrap(err, "Failed to initialize Exchange restore"))
|
return Only(ctx, errors.Wrap(err, "Failed to initialize Exchange restore"))
|
||||||
}
|
}
|
||||||
|
|
||||||
ds, err := ro.Run(ctx)
|
ds, err := ro.Run(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if errors.Is(err, kopia.ErrNotFound) {
|
||||||
|
return Only(ctx, errors.Errorf("Backup or backup details missing for id %s", backupID))
|
||||||
|
}
|
||||||
|
|
||||||
return Only(ctx, errors.Wrap(err, "Failed to run Exchange restore"))
|
return Only(ctx, errors.Wrap(err, "Failed to run Exchange restore"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import (
|
|||||||
. "github.com/alcionai/corso/src/cli/print"
|
. "github.com/alcionai/corso/src/cli/print"
|
||||||
"github.com/alcionai/corso/src/cli/utils"
|
"github.com/alcionai/corso/src/cli/utils"
|
||||||
"github.com/alcionai/corso/src/internal/common"
|
"github.com/alcionai/corso/src/internal/common"
|
||||||
|
"github.com/alcionai/corso/src/internal/kopia"
|
||||||
"github.com/alcionai/corso/src/pkg/control"
|
"github.com/alcionai/corso/src/pkg/control"
|
||||||
"github.com/alcionai/corso/src/pkg/repository"
|
"github.com/alcionai/corso/src/pkg/repository"
|
||||||
)
|
)
|
||||||
@ -152,23 +153,22 @@ func restoreOneDriveCmd(cmd *cobra.Command, args []string) error {
|
|||||||
|
|
||||||
defer utils.CloseRepo(ctx, r)
|
defer utils.CloseRepo(ctx, r)
|
||||||
|
|
||||||
|
dest := control.DefaultRestoreDestination(common.SimpleDateTimeOneDrive)
|
||||||
|
|
||||||
sel := utils.IncludeOneDriveRestoreDataSelectors(opts)
|
sel := utils.IncludeOneDriveRestoreDataSelectors(opts)
|
||||||
utils.FilterOneDriveRestoreInfoSelectors(sel, opts)
|
utils.FilterOneDriveRestoreInfoSelectors(sel, opts)
|
||||||
|
|
||||||
// if no selector flags were specified, get all data in the service.
|
ro, err := r.NewRestore(ctx, backupID, sel.Selector, dest)
|
||||||
if len(sel.Scopes()) == 0 {
|
|
||||||
sel.Include(sel.AllData())
|
|
||||||
}
|
|
||||||
|
|
||||||
restoreDest := control.DefaultRestoreDestination(common.SimpleDateTimeOneDrive)
|
|
||||||
|
|
||||||
ro, err := r.NewRestore(ctx, backupID, sel.Selector, restoreDest)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Only(ctx, errors.Wrap(err, "Failed to initialize OneDrive restore"))
|
return Only(ctx, errors.Wrap(err, "Failed to initialize OneDrive restore"))
|
||||||
}
|
}
|
||||||
|
|
||||||
ds, err := ro.Run(ctx)
|
ds, err := ro.Run(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if errors.Is(err, kopia.ErrNotFound) {
|
||||||
|
return Only(ctx, errors.Errorf("Backup or backup details missing for id %s", backupID))
|
||||||
|
}
|
||||||
|
|
||||||
return Only(ctx, errors.Wrap(err, "Failed to run OneDrive restore"))
|
return Only(ctx, errors.Wrap(err, "Failed to run OneDrive restore"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import (
|
|||||||
. "github.com/alcionai/corso/src/cli/print"
|
. "github.com/alcionai/corso/src/cli/print"
|
||||||
"github.com/alcionai/corso/src/cli/utils"
|
"github.com/alcionai/corso/src/cli/utils"
|
||||||
"github.com/alcionai/corso/src/internal/common"
|
"github.com/alcionai/corso/src/internal/common"
|
||||||
|
"github.com/alcionai/corso/src/internal/kopia"
|
||||||
"github.com/alcionai/corso/src/pkg/control"
|
"github.com/alcionai/corso/src/pkg/control"
|
||||||
"github.com/alcionai/corso/src/pkg/repository"
|
"github.com/alcionai/corso/src/pkg/repository"
|
||||||
)
|
)
|
||||||
@ -153,23 +154,22 @@ func restoreSharePointCmd(cmd *cobra.Command, args []string) error {
|
|||||||
|
|
||||||
defer utils.CloseRepo(ctx, r)
|
defer utils.CloseRepo(ctx, r)
|
||||||
|
|
||||||
|
dest := control.DefaultRestoreDestination(common.SimpleDateTime)
|
||||||
|
|
||||||
sel := utils.IncludeSharePointRestoreDataSelectors(opts)
|
sel := utils.IncludeSharePointRestoreDataSelectors(opts)
|
||||||
utils.FilterSharePointRestoreInfoSelectors(sel, opts)
|
utils.FilterSharePointRestoreInfoSelectors(sel, opts)
|
||||||
|
|
||||||
// if no selector flags were specified, get all data in the service.
|
ro, err := r.NewRestore(ctx, backupID, sel.Selector, dest)
|
||||||
if len(sel.Scopes()) == 0 {
|
|
||||||
sel.Include(sel.AllData())
|
|
||||||
}
|
|
||||||
|
|
||||||
restoreDest := control.DefaultRestoreDestination(common.SimpleDateTimeOneDrive)
|
|
||||||
|
|
||||||
ro, err := r.NewRestore(ctx, backupID, sel.Selector, restoreDest)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Only(ctx, errors.Wrap(err, "Failed to initialize SharePoint restore"))
|
return Only(ctx, errors.Wrap(err, "Failed to initialize SharePoint restore"))
|
||||||
}
|
}
|
||||||
|
|
||||||
ds, err := ro.Run(ctx)
|
ds, err := ro.Run(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if errors.Is(err, kopia.ErrNotFound) {
|
||||||
|
return Only(ctx, errors.Errorf("Backup or backup details missing for id %s", backupID))
|
||||||
|
}
|
||||||
|
|
||||||
return Only(ctx, errors.Wrap(err, "Failed to run SharePoint restore"))
|
return Only(ctx, errors.Wrap(err, "Failed to run SharePoint restore"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -138,7 +138,6 @@ func IncludeExchangeRestoreDataSelectors(opts ExchangeOpts) *selectors.ExchangeR
|
|||||||
// either scope the request to a set of users
|
// either scope the request to a set of users
|
||||||
if lc+lcf+le+lef+lev+lec == 0 {
|
if lc+lcf+le+lef+lev+lec == 0 {
|
||||||
sel.Include(sel.AllData())
|
sel.Include(sel.AllData())
|
||||||
|
|
||||||
return sel
|
return sel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -84,7 +84,6 @@ func IncludeOneDriveRestoreDataSelectors(opts OneDriveOpts) *selectors.OneDriveR
|
|||||||
// is specified
|
// is specified
|
||||||
if lp+ln == 0 {
|
if lp+ln == 0 {
|
||||||
sel.Include(sel.AllData())
|
sel.Include(sel.AllData())
|
||||||
|
|
||||||
return sel
|
return sel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user