add the event-calendar flag to the cli (#712)
## Description Adds the event-calendar flag to the cli to prepare for selectors including the calendar as the events' "folder" structure. ## Type of change Please check the type of change your PR introduces: - [x] 🌻 Feature ## Issue(s) #501 ## Test Plan - [ ] 💪 Manual - [x] ⚡ Unit test - [ ] 💚 E2E
This commit is contained in:
parent
dcbfed15df
commit
f0edf7b081
@ -1,6 +1,8 @@
|
|||||||
package backup
|
package backup
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
@ -33,6 +35,7 @@ var (
|
|||||||
emailSender string
|
emailSender string
|
||||||
emailSubject string
|
emailSubject string
|
||||||
event []string
|
event []string
|
||||||
|
eventCalendar []string
|
||||||
user []string
|
user []string
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -99,13 +102,19 @@ func addExchangeCommands(parent *cobra.Command) *cobra.Command {
|
|||||||
&emailFolder,
|
&emailFolder,
|
||||||
"email-folder",
|
"email-folder",
|
||||||
nil,
|
nil,
|
||||||
"Select backup details by email folder ID; accepts "+utils.Wildcard+" to select all email folderss")
|
"Select backup details by email folder ID; accepts "+utils.Wildcard+" to select all email folders")
|
||||||
fs.StringSliceVar(
|
fs.StringSliceVar(
|
||||||
&event,
|
&event,
|
||||||
"event",
|
"event",
|
||||||
nil,
|
nil,
|
||||||
"Select backup details by event ID; accepts "+utils.Wildcard+" to select all events",
|
"Select backup details by event ID; accepts "+utils.Wildcard+" to select all events",
|
||||||
)
|
)
|
||||||
|
fs.StringSliceVar(
|
||||||
|
&eventCalendar,
|
||||||
|
"event-calendar",
|
||||||
|
nil,
|
||||||
|
"Select backup details by event calendar ID; accepts "+utils.Wildcard+" to select all events",
|
||||||
|
)
|
||||||
fs.StringSliceVar(
|
fs.StringSliceVar(
|
||||||
&user,
|
&user,
|
||||||
"user",
|
"user",
|
||||||
@ -317,6 +326,7 @@ func detailsExchangeCmd(cmd *cobra.Command, args []string) error {
|
|||||||
email,
|
email,
|
||||||
emailFolder,
|
emailFolder,
|
||||||
event,
|
event,
|
||||||
|
eventCalendar,
|
||||||
user,
|
user,
|
||||||
backupID,
|
backupID,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
@ -348,6 +358,7 @@ func detailsExchangeCmd(cmd *cobra.Command, args []string) error {
|
|||||||
email,
|
email,
|
||||||
emailFolder,
|
emailFolder,
|
||||||
event,
|
event,
|
||||||
|
eventCalendar,
|
||||||
user)
|
user)
|
||||||
filterExchangeBackupDetailInfoSelectors(
|
filterExchangeBackupDetailInfoSelectors(
|
||||||
sel,
|
sel,
|
||||||
@ -374,19 +385,19 @@ func detailsExchangeCmd(cmd *cobra.Command, args []string) error {
|
|||||||
// builds the data-selector inclusions for `backup details exchange`
|
// builds the data-selector inclusions for `backup details exchange`
|
||||||
func includeExchangeBackupDetailDataSelectors(
|
func includeExchangeBackupDetailDataSelectors(
|
||||||
sel *selectors.ExchangeRestore,
|
sel *selectors.ExchangeRestore,
|
||||||
contacts, contactFolders, emails, emailFolders, events, users []string,
|
contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string,
|
||||||
) {
|
) {
|
||||||
lc, lcf := len(contacts), len(contactFolders)
|
lc, lcf := len(contacts), len(contactFolders)
|
||||||
le, lef := len(emails), len(emailFolders)
|
le, lef := len(emails), len(emailFolders)
|
||||||
lev := len(events)
|
lev, lec := len(events), len(eventCalendars)
|
||||||
lu := len(users)
|
lu := len(users)
|
||||||
|
|
||||||
if lc+lcf+le+lef+lev+lu == 0 {
|
if lc+lcf+le+lef+lev+lec+lu == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// if only users are provided, we only get one selector
|
// if only users are provided, we only get one selector
|
||||||
if lu > 0 && lc+lcf+le+lef+lev == 0 {
|
if lu > 0 && lc+lcf+le+lef+lev+lec == 0 {
|
||||||
sel.Include(sel.Users(users))
|
sel.Include(sel.Users(users))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -394,7 +405,7 @@ func includeExchangeBackupDetailDataSelectors(
|
|||||||
// otherwise, add selectors for each type of data
|
// otherwise, add selectors for each type of data
|
||||||
includeExchangeContacts(sel, users, contactFolders, contacts)
|
includeExchangeContacts(sel, users, contactFolders, contacts)
|
||||||
includeExchangeEmails(sel, users, emailFolders, email)
|
includeExchangeEmails(sel, users, emailFolders, email)
|
||||||
includeExchangeEvents(sel, users, events)
|
includeExchangeEvents(sel, users, eventCalendars, events)
|
||||||
}
|
}
|
||||||
|
|
||||||
func includeExchangeContacts(sel *selectors.ExchangeRestore, users, contactFolders, contacts []string) {
|
func includeExchangeContacts(sel *selectors.ExchangeRestore, users, contactFolders, contacts []string) {
|
||||||
@ -402,11 +413,11 @@ func includeExchangeContacts(sel *selectors.ExchangeRestore, users, contactFolde
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(contacts) > 0 {
|
if len(contacts) == 0 {
|
||||||
sel.Include(sel.Contacts(users, contactFolders, contacts))
|
contacts = selectors.Any()
|
||||||
} else {
|
|
||||||
sel.Include(sel.ContactFolders(users, contactFolders))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sel.Include(sel.Contacts(users, contactFolders, contacts))
|
||||||
}
|
}
|
||||||
|
|
||||||
func includeExchangeEmails(sel *selectors.ExchangeRestore, users, emailFolders, emails []string) {
|
func includeExchangeEmails(sel *selectors.ExchangeRestore, users, emailFolders, emails []string) {
|
||||||
@ -414,18 +425,24 @@ func includeExchangeEmails(sel *selectors.ExchangeRestore, users, emailFolders,
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(emails) > 0 {
|
if len(emails) == 0 {
|
||||||
sel.Include(sel.Mails(users, emailFolders, emails))
|
emails = selectors.Any()
|
||||||
} else {
|
|
||||||
sel.Include(sel.MailFolders(users, emailFolders))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sel.Include(sel.Mails(users, emailFolders, emails))
|
||||||
}
|
}
|
||||||
|
|
||||||
func includeExchangeEvents(sel *selectors.ExchangeRestore, users, events []string) {
|
func includeExchangeEvents(sel *selectors.ExchangeRestore, users, eventCalendars, events []string) {
|
||||||
if len(events) == 0 {
|
if len(eventCalendars) == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(events) == 0 {
|
||||||
|
events = selectors.Any()
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("logging eventCalendars so the linter sees it 'used'. Will remove asap", eventCalendars)
|
||||||
|
|
||||||
sel.Include(sel.Events(users, events))
|
sel.Include(sel.Events(users, events))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -474,7 +491,7 @@ func filterExchangeInfoMailSubject(sel *selectors.ExchangeRestore, subject strin
|
|||||||
|
|
||||||
// checks all flags for correctness and interdependencies
|
// checks all flags for correctness and interdependencies
|
||||||
func validateExchangeBackupDetailFlags(
|
func validateExchangeBackupDetailFlags(
|
||||||
contacts, contactFolders, emails, emailFolders, events, users []string,
|
contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string,
|
||||||
backupID string,
|
backupID string,
|
||||||
) error {
|
) error {
|
||||||
if len(backupID) == 0 {
|
if len(backupID) == 0 {
|
||||||
@ -484,9 +501,9 @@ func validateExchangeBackupDetailFlags(
|
|||||||
lu := len(users)
|
lu := len(users)
|
||||||
lc, lcf := len(contacts), len(contactFolders)
|
lc, lcf := len(contacts), len(contactFolders)
|
||||||
le, lef := len(emails), len(emailFolders)
|
le, lef := len(emails), len(emailFolders)
|
||||||
lev := len(events)
|
lev, lec := len(events), len(eventCalendars)
|
||||||
|
|
||||||
if lu+lc+lcf+le+lef+lev == 0 {
|
if lu+lc+lcf+le+lef+lev+lec == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -501,7 +518,12 @@ func validateExchangeBackupDetailFlags(
|
|||||||
|
|
||||||
if le > 0 && lef == 0 {
|
if le > 0 && lef == 0 {
|
||||||
return errors.New(
|
return errors.New(
|
||||||
"one or more --email-folder ids or the wildcard --email-folder * must be included to specify a --email")
|
"one or more --email-folder ids or the wildcard --email-folder * must be included to specify an --email")
|
||||||
|
}
|
||||||
|
|
||||||
|
if lev > 0 && lec == 0 {
|
||||||
|
return errors.New(
|
||||||
|
"one or more --event-calendar ids or the wildcard --event-calendar * must be included to specify an --event")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@ -220,10 +220,10 @@ func (suite *ExchangeSuite) TestValidateBackupDetailFlags() {
|
|||||||
stub := []string{"id-stub"}
|
stub := []string{"id-stub"}
|
||||||
|
|
||||||
table := []struct {
|
table := []struct {
|
||||||
name string
|
name string
|
||||||
contacts, contactFolders, emails, emailFolders, events, users []string
|
contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string
|
||||||
backupID string
|
backupID string
|
||||||
expect assert.ErrorAssertionFunc
|
expect assert.ErrorAssertionFunc
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "only backupid",
|
name: "only backupid",
|
||||||
@ -238,6 +238,7 @@ func (suite *ExchangeSuite) TestValidateBackupDetailFlags() {
|
|||||||
emails: stub,
|
emails: stub,
|
||||||
emailFolders: stub,
|
emailFolders: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expect: assert.NoError,
|
expect: assert.NoError,
|
||||||
},
|
},
|
||||||
@ -252,6 +253,7 @@ func (suite *ExchangeSuite) TestValidateBackupDetailFlags() {
|
|||||||
emails: stub,
|
emails: stub,
|
||||||
emailFolders: stub,
|
emailFolders: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expect: assert.Error,
|
expect: assert.Error,
|
||||||
},
|
},
|
||||||
@ -263,17 +265,19 @@ func (suite *ExchangeSuite) TestValidateBackupDetailFlags() {
|
|||||||
emails: stub,
|
emails: stub,
|
||||||
emailFolders: stub,
|
emailFolders: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
expect: assert.Error,
|
expect: assert.Error,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "no contact folders",
|
name: "no contact folders",
|
||||||
backupID: "bid",
|
backupID: "bid",
|
||||||
contacts: stub,
|
contacts: stub,
|
||||||
emails: stub,
|
emails: stub,
|
||||||
emailFolders: stub,
|
emailFolders: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
users: stub,
|
eventCalendars: stub,
|
||||||
expect: assert.Error,
|
users: stub,
|
||||||
|
expect: assert.Error,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "no email folders",
|
name: "no email folders",
|
||||||
@ -282,6 +286,17 @@ func (suite *ExchangeSuite) TestValidateBackupDetailFlags() {
|
|||||||
contactFolders: stub,
|
contactFolders: stub,
|
||||||
emails: stub,
|
emails: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
|
users: stub,
|
||||||
|
expect: assert.Error,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "no event calendars",
|
||||||
|
backupID: "bid",
|
||||||
|
contacts: stub,
|
||||||
|
contactFolders: stub,
|
||||||
|
emails: stub,
|
||||||
|
events: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expect: assert.Error,
|
expect: assert.Error,
|
||||||
},
|
},
|
||||||
@ -294,6 +309,7 @@ func (suite *ExchangeSuite) TestValidateBackupDetailFlags() {
|
|||||||
test.emails,
|
test.emails,
|
||||||
test.emailFolders,
|
test.emailFolders,
|
||||||
test.events,
|
test.events,
|
||||||
|
test.eventCalendars,
|
||||||
test.users,
|
test.users,
|
||||||
test.backupID,
|
test.backupID,
|
||||||
))
|
))
|
||||||
@ -306,9 +322,9 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
|
|||||||
a := []string{utils.Wildcard}
|
a := []string{utils.Wildcard}
|
||||||
|
|
||||||
table := []struct {
|
table := []struct {
|
||||||
name string
|
name string
|
||||||
contacts, contactFolders, emails, emailFolders, events, users []string
|
contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string
|
||||||
expectIncludeLen int
|
expectIncludeLen int
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "no selectors",
|
name: "no selectors",
|
||||||
@ -336,6 +352,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
|
|||||||
emails: a,
|
emails: a,
|
||||||
emailFolders: a,
|
emailFolders: a,
|
||||||
events: a,
|
events: a,
|
||||||
|
eventCalendars: a,
|
||||||
users: a,
|
users: a,
|
||||||
expectIncludeLen: 3,
|
expectIncludeLen: 3,
|
||||||
},
|
},
|
||||||
@ -343,8 +360,9 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
|
|||||||
name: "any users, any folders",
|
name: "any users, any folders",
|
||||||
contactFolders: a,
|
contactFolders: a,
|
||||||
emailFolders: a,
|
emailFolders: a,
|
||||||
|
eventCalendars: a,
|
||||||
users: a,
|
users: a,
|
||||||
expectIncludeLen: 2,
|
expectIncludeLen: 3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "single user, single of each data",
|
name: "single user, single of each data",
|
||||||
@ -353,6 +371,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
|
|||||||
emails: stub,
|
emails: stub,
|
||||||
emailFolders: stub,
|
emailFolders: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expectIncludeLen: 3,
|
expectIncludeLen: 3,
|
||||||
},
|
},
|
||||||
@ -360,8 +379,9 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
|
|||||||
name: "single user, single of each folder",
|
name: "single user, single of each folder",
|
||||||
contactFolders: stub,
|
contactFolders: stub,
|
||||||
emailFolders: stub,
|
emailFolders: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expectIncludeLen: 2,
|
expectIncludeLen: 3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "any users, contacts",
|
name: "any users, contacts",
|
||||||
@ -394,12 +414,14 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
|
|||||||
{
|
{
|
||||||
name: "any users, events",
|
name: "any users, events",
|
||||||
events: a,
|
events: a,
|
||||||
|
eventCalendars: a,
|
||||||
users: a,
|
users: a,
|
||||||
expectIncludeLen: 1,
|
expectIncludeLen: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "single user, events",
|
name: "single user, events",
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expectIncludeLen: 1,
|
expectIncludeLen: 1,
|
||||||
},
|
},
|
||||||
@ -426,6 +448,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
|
|||||||
emails: a,
|
emails: a,
|
||||||
emailFolders: a,
|
emailFolders: a,
|
||||||
events: a,
|
events: a,
|
||||||
|
eventCalendars: a,
|
||||||
users: a,
|
users: a,
|
||||||
expectIncludeLen: 2,
|
expectIncludeLen: 2,
|
||||||
},
|
},
|
||||||
@ -434,6 +457,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
|
|||||||
emails: stub,
|
emails: stub,
|
||||||
emailFolders: stub,
|
emailFolders: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expectIncludeLen: 2,
|
expectIncludeLen: 2,
|
||||||
},
|
},
|
||||||
@ -442,6 +466,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
|
|||||||
contacts: a,
|
contacts: a,
|
||||||
contactFolders: a,
|
contactFolders: a,
|
||||||
events: a,
|
events: a,
|
||||||
|
eventCalendars: a,
|
||||||
users: a,
|
users: a,
|
||||||
expectIncludeLen: 2,
|
expectIncludeLen: 2,
|
||||||
},
|
},
|
||||||
@ -450,12 +475,14 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
|
|||||||
contacts: stub,
|
contacts: stub,
|
||||||
contactFolders: stub,
|
contactFolders: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expectIncludeLen: 2,
|
expectIncludeLen: 2,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "many users, events",
|
name: "many users, events",
|
||||||
events: []string{"foo", "bar"},
|
events: []string{"foo", "bar"},
|
||||||
|
eventCalendars: []string{"baz", "qux"},
|
||||||
users: []string{"fnord", "smarf"},
|
users: []string{"fnord", "smarf"},
|
||||||
expectIncludeLen: 1,
|
expectIncludeLen: 1,
|
||||||
},
|
},
|
||||||
@ -464,6 +491,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
|
|||||||
contacts: []string{"foo", "bar"},
|
contacts: []string{"foo", "bar"},
|
||||||
contactFolders: []string{"foo", "bar"},
|
contactFolders: []string{"foo", "bar"},
|
||||||
events: []string{"foo", "bar"},
|
events: []string{"foo", "bar"},
|
||||||
|
eventCalendars: []string{"foo", "bar"},
|
||||||
users: []string{"fnord", "smarf"},
|
users: []string{"fnord", "smarf"},
|
||||||
expectIncludeLen: 2,
|
expectIncludeLen: 2,
|
||||||
},
|
},
|
||||||
@ -478,6 +506,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
|
|||||||
test.emails,
|
test.emails,
|
||||||
test.emailFolders,
|
test.emailFolders,
|
||||||
test.events,
|
test.events,
|
||||||
|
test.eventCalendars,
|
||||||
test.users)
|
test.users)
|
||||||
assert.Equal(t, test.expectIncludeLen, len(sel.Includes))
|
assert.Equal(t, test.expectIncludeLen, len(sel.Includes))
|
||||||
})
|
})
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
package restore
|
package restore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
@ -25,6 +27,7 @@ var (
|
|||||||
emailSender string
|
emailSender string
|
||||||
emailSubject string
|
emailSubject string
|
||||||
event []string
|
event []string
|
||||||
|
eventCalendar []string
|
||||||
user []string
|
user []string
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -61,12 +64,18 @@ func addExchangeCommands(parent *cobra.Command) *cobra.Command {
|
|||||||
"Restore all emails by folder ID; accepts "+utils.Wildcard+" to select all email folders",
|
"Restore all emails by folder ID; accepts "+utils.Wildcard+" to select all email folders",
|
||||||
)
|
)
|
||||||
fs.StringSliceVar(&event, "event", nil, "Restore events by ID; accepts "+utils.Wildcard+" to select all events")
|
fs.StringSliceVar(&event, "event", nil, "Restore events by ID; accepts "+utils.Wildcard+" to select all events")
|
||||||
|
fs.StringSliceVar(
|
||||||
|
&eventCalendar,
|
||||||
|
"event-calendar",
|
||||||
|
nil,
|
||||||
|
"Restore events by calendar ID; accepts "+utils.Wildcard+" to select all event calendars")
|
||||||
fs.StringSliceVar(&user, "user", nil, "Restore all data by user ID; accepts "+utils.Wildcard+" to select all users")
|
fs.StringSliceVar(&user, "user", nil, "Restore all data by user ID; accepts "+utils.Wildcard+" to select all users")
|
||||||
|
|
||||||
// TODO: reveal these flags when their production is supported in GC
|
// TODO: reveal these flags when their production is supported in GC
|
||||||
cobra.CheckErr(fs.MarkHidden("contact"))
|
cobra.CheckErr(fs.MarkHidden("contact"))
|
||||||
cobra.CheckErr(fs.MarkHidden("contact-folder"))
|
cobra.CheckErr(fs.MarkHidden("contact-folder"))
|
||||||
cobra.CheckErr(fs.MarkHidden("event"))
|
cobra.CheckErr(fs.MarkHidden("event"))
|
||||||
|
cobra.CheckErr(fs.MarkHidden("event-calendar"))
|
||||||
|
|
||||||
// exchange-info flags
|
// exchange-info flags
|
||||||
fs.StringVar(
|
fs.StringVar(
|
||||||
@ -117,6 +126,7 @@ func restoreExchangeCmd(cmd *cobra.Command, args []string) error {
|
|||||||
email,
|
email,
|
||||||
emailFolder,
|
emailFolder,
|
||||||
event,
|
event,
|
||||||
|
eventCalendar,
|
||||||
user,
|
user,
|
||||||
backupID,
|
backupID,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
@ -143,6 +153,7 @@ func restoreExchangeCmd(cmd *cobra.Command, args []string) error {
|
|||||||
email,
|
email,
|
||||||
emailFolder,
|
emailFolder,
|
||||||
event,
|
event,
|
||||||
|
eventCalendar,
|
||||||
user)
|
user)
|
||||||
filterExchangeRestoreInfoSelectors(
|
filterExchangeRestoreInfoSelectors(
|
||||||
sel,
|
sel,
|
||||||
@ -173,19 +184,19 @@ func restoreExchangeCmd(cmd *cobra.Command, args []string) error {
|
|||||||
// builds the data-selector inclusions for `restore exchange`
|
// builds the data-selector inclusions for `restore exchange`
|
||||||
func includeExchangeRestoreDataSelectors(
|
func includeExchangeRestoreDataSelectors(
|
||||||
sel *selectors.ExchangeRestore,
|
sel *selectors.ExchangeRestore,
|
||||||
contacts, contactFolders, emails, emailFolders, events, users []string,
|
contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string,
|
||||||
) {
|
) {
|
||||||
lc, lcf := len(contacts), len(contactFolders)
|
lc, lcf := len(contacts), len(contactFolders)
|
||||||
le, lef := len(emails), len(emailFolders)
|
le, lef := len(emails), len(emailFolders)
|
||||||
lev := len(events)
|
lev, lec := len(events), len(eventCalendars)
|
||||||
lu := len(users)
|
lu := len(users)
|
||||||
|
|
||||||
if lc+lcf+le+lef+lev+lu == 0 {
|
if lc+lcf+le+lef+lev+lec+lu == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// if only users are provided, we only get one selector
|
// if only users are provided, we only get one selector
|
||||||
if lu > 0 && lc+lcf+le+lef+lev == 0 {
|
if lu > 0 && lc+lcf+le+lef+lev+lec == 0 {
|
||||||
sel.Include(sel.Users(users))
|
sel.Include(sel.Users(users))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -193,7 +204,7 @@ func includeExchangeRestoreDataSelectors(
|
|||||||
// otherwise, add selectors for each type of data
|
// otherwise, add selectors for each type of data
|
||||||
includeExchangeContacts(sel, users, contactFolders, contacts)
|
includeExchangeContacts(sel, users, contactFolders, contacts)
|
||||||
includeExchangeEmails(sel, users, emailFolders, email)
|
includeExchangeEmails(sel, users, emailFolders, email)
|
||||||
includeExchangeEvents(sel, users, events)
|
includeExchangeEvents(sel, users, eventCalendars, events)
|
||||||
}
|
}
|
||||||
|
|
||||||
func includeExchangeContacts(sel *selectors.ExchangeRestore, users, contactFolders, contacts []string) {
|
func includeExchangeContacts(sel *selectors.ExchangeRestore, users, contactFolders, contacts []string) {
|
||||||
@ -201,11 +212,11 @@ func includeExchangeContacts(sel *selectors.ExchangeRestore, users, contactFolde
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(contacts) > 0 {
|
if len(contacts) == 0 {
|
||||||
sel.Include(sel.Contacts(users, contactFolders, contacts))
|
contacts = selectors.Any()
|
||||||
} else {
|
|
||||||
sel.Include(sel.ContactFolders(users, contactFolders))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sel.Include(sel.Contacts(users, contactFolders, contacts))
|
||||||
}
|
}
|
||||||
|
|
||||||
func includeExchangeEmails(sel *selectors.ExchangeRestore, users, emailFolders, emails []string) {
|
func includeExchangeEmails(sel *selectors.ExchangeRestore, users, emailFolders, emails []string) {
|
||||||
@ -213,18 +224,24 @@ func includeExchangeEmails(sel *selectors.ExchangeRestore, users, emailFolders,
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(emails) > 0 {
|
if len(emails) == 0 {
|
||||||
sel.Include(sel.Mails(users, emailFolders, emails))
|
emails = selectors.Any()
|
||||||
} else {
|
|
||||||
sel.Include(sel.MailFolders(users, emailFolders))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sel.Include(sel.Mails(users, emailFolders, emails))
|
||||||
}
|
}
|
||||||
|
|
||||||
func includeExchangeEvents(sel *selectors.ExchangeRestore, users, events []string) {
|
func includeExchangeEvents(sel *selectors.ExchangeRestore, users, eventCalendars, events []string) {
|
||||||
if len(events) == 0 {
|
if len(eventCalendars) == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(events) == 0 {
|
||||||
|
events = selectors.Any()
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("logging eventCalendars so the linter sees it 'used'. Will remove asap", eventCalendars)
|
||||||
|
|
||||||
sel.Include(sel.Events(users, events))
|
sel.Include(sel.Events(users, events))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -273,7 +290,7 @@ func filterExchangeInfoMailSubject(sel *selectors.ExchangeRestore, subject strin
|
|||||||
|
|
||||||
// checks all flags for correctness and interdependencies
|
// checks all flags for correctness and interdependencies
|
||||||
func validateExchangeRestoreFlags(
|
func validateExchangeRestoreFlags(
|
||||||
contacts, contactFolders, emails, emailFolders, events, users []string,
|
contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string,
|
||||||
backupID string,
|
backupID string,
|
||||||
) error {
|
) error {
|
||||||
if len(backupID) == 0 {
|
if len(backupID) == 0 {
|
||||||
@ -283,10 +300,10 @@ func validateExchangeRestoreFlags(
|
|||||||
lu := len(users)
|
lu := len(users)
|
||||||
lc, lcf := len(contacts), len(contactFolders)
|
lc, lcf := len(contacts), len(contactFolders)
|
||||||
le, lef := len(emails), len(emailFolders)
|
le, lef := len(emails), len(emailFolders)
|
||||||
lev := len(events)
|
lev, lec := len(events), len(eventCalendars)
|
||||||
|
|
||||||
// if only the backupID is populated, that's the same as --all
|
// if only the backupID is populated, that's the same as --all
|
||||||
if lu+lc+lcf+le+lef+lev == 0 {
|
if lu+lc+lcf+le+lef+lev+lec == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,7 +318,12 @@ func validateExchangeRestoreFlags(
|
|||||||
|
|
||||||
if le > 0 && lef == 0 {
|
if le > 0 && lef == 0 {
|
||||||
return errors.New(
|
return errors.New(
|
||||||
"one or more --email-folder ids or the wildcard --email-folder * must be included to specify a --email")
|
"one or more --email-folder ids or the wildcard --email-folder * must be included to specify an --email")
|
||||||
|
}
|
||||||
|
|
||||||
|
if lev > 0 && lec == 0 {
|
||||||
|
return errors.New(
|
||||||
|
"one or more --event-calendar ids or the wildcard --event-calendar * must be included to specify an --event")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@ -55,10 +55,10 @@ func (suite *ExchangeSuite) TestValidateExchangeRestoreFlags() {
|
|||||||
stub := []string{"id-stub"}
|
stub := []string{"id-stub"}
|
||||||
|
|
||||||
table := []struct {
|
table := []struct {
|
||||||
name string
|
name string
|
||||||
contacts, contactFolders, emails, emailFolders, events, users []string
|
contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string
|
||||||
backupID string
|
backupID string
|
||||||
expect assert.ErrorAssertionFunc
|
expect assert.ErrorAssertionFunc
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "only backupid",
|
name: "only backupid",
|
||||||
@ -73,6 +73,7 @@ func (suite *ExchangeSuite) TestValidateExchangeRestoreFlags() {
|
|||||||
emails: stub,
|
emails: stub,
|
||||||
emailFolders: stub,
|
emailFolders: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expect: assert.NoError,
|
expect: assert.NoError,
|
||||||
},
|
},
|
||||||
@ -87,6 +88,7 @@ func (suite *ExchangeSuite) TestValidateExchangeRestoreFlags() {
|
|||||||
emails: stub,
|
emails: stub,
|
||||||
emailFolders: stub,
|
emailFolders: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expect: assert.Error,
|
expect: assert.Error,
|
||||||
},
|
},
|
||||||
@ -98,17 +100,19 @@ func (suite *ExchangeSuite) TestValidateExchangeRestoreFlags() {
|
|||||||
emails: stub,
|
emails: stub,
|
||||||
emailFolders: stub,
|
emailFolders: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
expect: assert.Error,
|
expect: assert.Error,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "no contact folders",
|
name: "no contact folders",
|
||||||
backupID: "bid",
|
backupID: "bid",
|
||||||
contacts: stub,
|
contacts: stub,
|
||||||
emails: stub,
|
emails: stub,
|
||||||
emailFolders: stub,
|
emailFolders: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expect: assert.Error,
|
eventCalendars: stub,
|
||||||
|
expect: assert.Error,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "no email folders",
|
name: "no email folders",
|
||||||
@ -117,6 +121,17 @@ func (suite *ExchangeSuite) TestValidateExchangeRestoreFlags() {
|
|||||||
contactFolders: stub,
|
contactFolders: stub,
|
||||||
emails: stub,
|
emails: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
|
users: stub,
|
||||||
|
expect: assert.Error,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "no event calendars",
|
||||||
|
backupID: "bid",
|
||||||
|
contacts: stub,
|
||||||
|
contactFolders: stub,
|
||||||
|
emails: stub,
|
||||||
|
events: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expect: assert.Error,
|
expect: assert.Error,
|
||||||
},
|
},
|
||||||
@ -129,6 +144,7 @@ func (suite *ExchangeSuite) TestValidateExchangeRestoreFlags() {
|
|||||||
test.emails,
|
test.emails,
|
||||||
test.emailFolders,
|
test.emailFolders,
|
||||||
test.events,
|
test.events,
|
||||||
|
test.eventCalendars,
|
||||||
test.users,
|
test.users,
|
||||||
test.backupID,
|
test.backupID,
|
||||||
))
|
))
|
||||||
@ -141,9 +157,9 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
|
|||||||
a := []string{utils.Wildcard}
|
a := []string{utils.Wildcard}
|
||||||
|
|
||||||
table := []struct {
|
table := []struct {
|
||||||
name string
|
name string
|
||||||
contacts, contactFolders, emails, emailFolders, events, users []string
|
contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string
|
||||||
expectIncludeLen int
|
expectIncludeLen int
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "no selectors",
|
name: "no selectors",
|
||||||
@ -171,6 +187,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
|
|||||||
emails: a,
|
emails: a,
|
||||||
emailFolders: a,
|
emailFolders: a,
|
||||||
events: a,
|
events: a,
|
||||||
|
eventCalendars: a,
|
||||||
users: a,
|
users: a,
|
||||||
expectIncludeLen: 3,
|
expectIncludeLen: 3,
|
||||||
},
|
},
|
||||||
@ -178,8 +195,9 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
|
|||||||
name: "any users, any folders",
|
name: "any users, any folders",
|
||||||
contactFolders: a,
|
contactFolders: a,
|
||||||
emailFolders: a,
|
emailFolders: a,
|
||||||
|
eventCalendars: a,
|
||||||
users: a,
|
users: a,
|
||||||
expectIncludeLen: 2,
|
expectIncludeLen: 3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "single user, single of each data",
|
name: "single user, single of each data",
|
||||||
@ -188,6 +206,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
|
|||||||
emails: stub,
|
emails: stub,
|
||||||
emailFolders: stub,
|
emailFolders: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expectIncludeLen: 3,
|
expectIncludeLen: 3,
|
||||||
},
|
},
|
||||||
@ -195,8 +214,9 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
|
|||||||
name: "single user, single of each folder",
|
name: "single user, single of each folder",
|
||||||
contactFolders: stub,
|
contactFolders: stub,
|
||||||
emailFolders: stub,
|
emailFolders: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expectIncludeLen: 2,
|
expectIncludeLen: 3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "any users, contacts",
|
name: "any users, contacts",
|
||||||
@ -229,12 +249,14 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
|
|||||||
{
|
{
|
||||||
name: "any users, events",
|
name: "any users, events",
|
||||||
events: a,
|
events: a,
|
||||||
|
eventCalendars: a,
|
||||||
users: a,
|
users: a,
|
||||||
expectIncludeLen: 1,
|
expectIncludeLen: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "single user, events",
|
name: "single user, events",
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expectIncludeLen: 1,
|
expectIncludeLen: 1,
|
||||||
},
|
},
|
||||||
@ -261,6 +283,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
|
|||||||
emails: a,
|
emails: a,
|
||||||
emailFolders: a,
|
emailFolders: a,
|
||||||
events: a,
|
events: a,
|
||||||
|
eventCalendars: a,
|
||||||
users: a,
|
users: a,
|
||||||
expectIncludeLen: 2,
|
expectIncludeLen: 2,
|
||||||
},
|
},
|
||||||
@ -269,6 +292,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
|
|||||||
emails: stub,
|
emails: stub,
|
||||||
emailFolders: stub,
|
emailFolders: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expectIncludeLen: 2,
|
expectIncludeLen: 2,
|
||||||
},
|
},
|
||||||
@ -277,6 +301,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
|
|||||||
contacts: a,
|
contacts: a,
|
||||||
contactFolders: a,
|
contactFolders: a,
|
||||||
events: a,
|
events: a,
|
||||||
|
eventCalendars: a,
|
||||||
users: a,
|
users: a,
|
||||||
expectIncludeLen: 2,
|
expectIncludeLen: 2,
|
||||||
},
|
},
|
||||||
@ -285,12 +310,14 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
|
|||||||
contacts: stub,
|
contacts: stub,
|
||||||
contactFolders: stub,
|
contactFolders: stub,
|
||||||
events: stub,
|
events: stub,
|
||||||
|
eventCalendars: stub,
|
||||||
users: stub,
|
users: stub,
|
||||||
expectIncludeLen: 2,
|
expectIncludeLen: 2,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "many users, events",
|
name: "many users, events",
|
||||||
events: []string{"foo", "bar"},
|
events: []string{"foo", "bar"},
|
||||||
|
eventCalendars: []string{"baz", "qux"},
|
||||||
users: []string{"fnord", "smarf"},
|
users: []string{"fnord", "smarf"},
|
||||||
expectIncludeLen: 1,
|
expectIncludeLen: 1,
|
||||||
},
|
},
|
||||||
@ -299,6 +326,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
|
|||||||
contacts: []string{"foo", "bar"},
|
contacts: []string{"foo", "bar"},
|
||||||
contactFolders: []string{"foo", "bar"},
|
contactFolders: []string{"foo", "bar"},
|
||||||
events: []string{"foo", "bar"},
|
events: []string{"foo", "bar"},
|
||||||
|
eventCalendars: []string{"foo", "bar"},
|
||||||
users: []string{"fnord", "smarf"},
|
users: []string{"fnord", "smarf"},
|
||||||
expectIncludeLen: 2,
|
expectIncludeLen: 2,
|
||||||
},
|
},
|
||||||
@ -313,6 +341,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
|
|||||||
test.emails,
|
test.emails,
|
||||||
test.emailFolders,
|
test.emailFolders,
|
||||||
test.events,
|
test.events,
|
||||||
|
test.eventCalendars,
|
||||||
test.users)
|
test.users)
|
||||||
assert.Equal(t, test.expectIncludeLen, len(sel.Includes))
|
assert.Equal(t, test.expectIncludeLen, len(sel.Includes))
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user