## Description Use paths package to trim unescaped trailing '/' characters from input for Exchange mail and OneDrive folder names. Add tests for Exchange showing that the trimming also works properly if the folder name ends with '/'. ## Type of change <!--- Please check the type of change your PR introduces: ---> - [ ] 🌻 Feature - [x] 🐛 Bugfix - [ ] 🗺️ Documentation - [ ] 🤖 Test - [ ] 💻 CI/Deployment - [ ] 🐹 Trivial/Minor ## Issue(s) * closes #1147 ## Test Plan <!-- How will this be tested prior to merging.--> - [x] 💪 Manual - [x] ⚡ Unit test - [ ] 💚 E2E
67 lines
1.4 KiB
Go
67 lines
1.4 KiB
Go
package utils
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/pflag"
|
|
|
|
"github.com/alcionai/corso/src/internal/common"
|
|
"github.com/alcionai/corso/src/pkg/path"
|
|
)
|
|
|
|
type PopulatedFlags map[string]struct{}
|
|
|
|
func (fs PopulatedFlags) populate(pf *pflag.Flag) {
|
|
if pf == nil {
|
|
return
|
|
}
|
|
|
|
if pf.Changed {
|
|
fs[pf.Name] = struct{}{}
|
|
}
|
|
}
|
|
|
|
// GetPopulatedFlags returns a map of flags that have been
|
|
// populated by the user. Entry keys match the flag's long
|
|
// name. Values are empty.
|
|
func GetPopulatedFlags(cmd *cobra.Command) PopulatedFlags {
|
|
pop := PopulatedFlags{}
|
|
|
|
fs := cmd.Flags()
|
|
if fs == nil {
|
|
return pop
|
|
}
|
|
|
|
fs.VisitAll(pop.populate)
|
|
|
|
return pop
|
|
}
|
|
|
|
// IsValidTimeFormat returns true if the input is recognized as a
|
|
// supported format by the common time parser.
|
|
func IsValidTimeFormat(in string) bool {
|
|
_, err := common.ParseTime(in)
|
|
return err == nil
|
|
}
|
|
|
|
// IsValidTimeFormat returns true if the input is recognized as a
|
|
// boolean.
|
|
func IsValidBool(in string) bool {
|
|
_, err := strconv.ParseBool(in)
|
|
return err == nil
|
|
}
|
|
|
|
// trimFolderSlash takes a set of folder paths and returns a set of folder paths
|
|
// with any unescaped trailing `/` characters removed.
|
|
func trimFolderSlash(folders []string) []string {
|
|
res := make([]string, 0, len(folders))
|
|
|
|
for _, p := range folders {
|
|
// Use path package because it has logic to handle escaping already.
|
|
res = append(res, path.TrimTrailingSlash(p))
|
|
}
|
|
|
|
return res
|
|
}
|