From 653a79bde98784203ba6098b186cb904c9787a4f Mon Sep 17 00:00:00 2001 From: Ashlie Martinez Date: Tue, 20 Jun 2023 15:56:14 -0700 Subject: [PATCH] Add hidden CLI flag to open repo at point in time Wire up the CLI side of passing in a point in time. Mostly this is so that we can test this functionality. --- src/cli/backup/exchange.go | 4 ++-- src/cli/backup/onedrive.go | 4 ++-- src/cli/backup/sharepoint.go | 4 ++-- src/cli/options/options.go | 15 +++++++++++++++ src/cli/restore/exchange.go | 2 +- src/cli/restore/onedrive.go | 2 +- src/cli/restore/sharepoint.go | 2 +- src/cli/utils/flags.go | 6 ++++++ 8 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/cli/backup/exchange.go b/src/cli/backup/exchange.go index af71c6a30..4642fd2ad 100644 --- a/src/cli/backup/exchange.go +++ b/src/cli/backup/exchange.go @@ -95,7 +95,7 @@ func addExchangeCommands(cmd *cobra.Command) *cobra.Command { c, fs = utils.AddCommand(cmd, exchangeListCmd()) fs.SortFlags = false - utils.AddBackupIDFlag(c, false) + utils.AddDetailsAndRestoreFlags(c, false) addFailedItemsFN(c) addSkippedItemsFN(c) addRecoveredErrorsFN(c) @@ -111,7 +111,7 @@ func addExchangeCommands(cmd *cobra.Command) *cobra.Command { // Flags addition ordering should follow the order we want them to appear in help and docs: // More generic (ex: --user) and more frequently used flags take precedence. - utils.AddBackupIDFlag(c, true) + utils.AddDetailsAndRestoreFlags(c, true) utils.AddExchangeDetailsAndRestoreFlags(c) case deleteCommand: diff --git a/src/cli/backup/onedrive.go b/src/cli/backup/onedrive.go index b47acd496..ff8fb4041 100644 --- a/src/cli/backup/onedrive.go +++ b/src/cli/backup/onedrive.go @@ -78,7 +78,7 @@ func addOneDriveCommands(cmd *cobra.Command) *cobra.Command { c, fs = utils.AddCommand(cmd, oneDriveListCmd()) fs.SortFlags = false - utils.AddBackupIDFlag(c, false) + utils.AddDetailsAndRestoreFlags(c, false) addFailedItemsFN(c) addSkippedItemsFN(c) addRecoveredErrorsFN(c) @@ -91,7 +91,7 @@ func addOneDriveCommands(cmd *cobra.Command) *cobra.Command { c.Example = oneDriveServiceCommandDetailsExamples options.AddSkipReduceFlag(c) - utils.AddBackupIDFlag(c, true) + utils.AddDetailsAndRestoreFlags(c, true) utils.AddOneDriveDetailsAndRestoreFlags(c) case deleteCommand: diff --git a/src/cli/backup/sharepoint.go b/src/cli/backup/sharepoint.go index 2197252ea..93092ff85 100644 --- a/src/cli/backup/sharepoint.go +++ b/src/cli/backup/sharepoint.go @@ -94,7 +94,7 @@ func addSharePointCommands(cmd *cobra.Command) *cobra.Command { c, fs = utils.AddCommand(cmd, sharePointListCmd()) fs.SortFlags = false - utils.AddBackupIDFlag(c, false) + utils.AddDetailsAndRestoreFlags(c, false) addFailedItemsFN(c) addSkippedItemsFN(c) addRecoveredErrorsFN(c) @@ -107,7 +107,7 @@ func addSharePointCommands(cmd *cobra.Command) *cobra.Command { c.Example = sharePointServiceCommandDetailsExamples options.AddSkipReduceFlag(c) - utils.AddBackupIDFlag(c, true) + utils.AddDetailsAndRestoreFlags(c, true) utils.AddSharePointDetailsAndRestoreFlags(c) case deleteCommand: diff --git a/src/cli/options/options.go b/src/cli/options/options.go index ac76b41b8..90f8c20e7 100644 --- a/src/cli/options/options.go +++ b/src/cli/options/options.go @@ -23,6 +23,8 @@ func Control() control.Options { opt.ToggleFeatures.DisableConcurrencyLimiter = disableConcurrencyLimiterFV opt.Parallelism.ItemFetch = fetchParallelismFV + opt.Repo.ViewTimestamp = viewTimestampFV.Get() + return opt } @@ -40,6 +42,7 @@ const ( DisableIncrementalsFN = "disable-incrementals" EnableImmutableIDFN = "enable-immutable-id" DisableConcurrencyLimiterFN = "disable-concurrency-limiter" + ViewTimestampFN = "point-in-time" ) var ( @@ -48,6 +51,7 @@ var ( noStatsFV bool restorePermissionsFV bool skipReduceFV bool + viewTimestampFV timestamp ) // AddGlobalOperationFlags adds the global operations flag set. @@ -90,6 +94,17 @@ func AddFetchParallelismFlag(cmd *cobra.Command) { cobra.CheckErr(fs.MarkHidden(FetchParallelismFN)) } +// AddViewTimestampFlag adds a hidden flag that allows callers to pass a +// timestamp to view the corso repo at if immutable backups are enabled. +func AddViewTimestampFlag(cmd *cobra.Command) { + fs := cmd.Flags() + fs.Var( + &viewTimestampFV, + ViewTimestampFN, + "View the repository at a previous datetime by passing an RFC3339 timestamp") + cobra.CheckErr(fs.MarkHidden(ViewTimestampFN)) +} + // --------------------------------------------------------------------------- // Feature Flags // --------------------------------------------------------------------------- diff --git a/src/cli/restore/exchange.go b/src/cli/restore/exchange.go index 514e6102c..a27c46a8f 100644 --- a/src/cli/restore/exchange.go +++ b/src/cli/restore/exchange.go @@ -32,7 +32,7 @@ func addExchangeCommands(cmd *cobra.Command) *cobra.Command { // general flags fs.SortFlags = false - utils.AddBackupIDFlag(c, true) + utils.AddDetailsAndRestoreFlags(c, true) utils.AddExchangeDetailsAndRestoreFlags(c) options.AddFailFastFlag(c) } diff --git a/src/cli/restore/onedrive.go b/src/cli/restore/onedrive.go index 85b159370..e3df2a433 100644 --- a/src/cli/restore/onedrive.go +++ b/src/cli/restore/onedrive.go @@ -31,7 +31,7 @@ func addOneDriveCommands(cmd *cobra.Command) *cobra.Command { // More generic (ex: --user) and more frequently used flags take precedence. fs.SortFlags = false - utils.AddBackupIDFlag(c, true) + utils.AddDetailsAndRestoreFlags(c, true) utils.AddOneDriveDetailsAndRestoreFlags(c) // restore permissions diff --git a/src/cli/restore/sharepoint.go b/src/cli/restore/sharepoint.go index a52f5bb2a..cadaa5080 100644 --- a/src/cli/restore/sharepoint.go +++ b/src/cli/restore/sharepoint.go @@ -31,7 +31,7 @@ func addSharePointCommands(cmd *cobra.Command) *cobra.Command { // More generic (ex: --site) and more frequently used flags take precedence. fs.SortFlags = false - utils.AddBackupIDFlag(c, true) + utils.AddDetailsAndRestoreFlags(c, true) utils.AddSharePointDetailsAndRestoreFlags(c) options.AddRestorePermissionsFlag(c) diff --git a/src/cli/utils/flags.go b/src/cli/utils/flags.go index ab1503034..f48c69d9e 100644 --- a/src/cli/utils/flags.go +++ b/src/cli/utils/flags.go @@ -8,6 +8,7 @@ import ( "github.com/spf13/cobra" "github.com/spf13/pflag" + "github.com/alcionai/corso/src/cli/options" "github.com/alcionai/corso/src/internal/common/dttm" "github.com/alcionai/corso/src/pkg/control/repository" "github.com/alcionai/corso/src/pkg/path" @@ -84,6 +85,11 @@ func AddBackupIDFlag(cmd *cobra.Command, require bool) { } } +func AddDetailsAndRestoreFlags(cmd *cobra.Command, require bool) { + AddBackupIDFlag(cmd, require) + options.AddViewTimestampFlag(cmd) +} + func AddDataFlag(cmd *cobra.Command, allowed []string, hide bool) { var ( allowedMsg string