corso/src/cli/flags/filesystem.go
Abhishek Pandey d2c73827cb
Add CLI for local storage (#4243)
<!-- PR description-->

New commands to initialize & connect to a repo on local or network attached storage.
* `repo init filesystem --path /tmp/repo`
* `repo connect filesystem --path /tmp/repo`

Includes basic unit & e2e tests. More coverage to be added in a following PR to keep the size contained.

**Updates:**
* Added Repo path sanitization i.e. handle relative paths, make paths cross platform compatible, etc. 
* Removed retention artifacts, not supported for filesystem storage.
* cli docs - auto updated.
* Manually tested with all corso backup/restore/export commands.

**Doesn't include** 
1. Symlinks
2. User ids wiring into repo.
3. Repos documentation update - in an upcoming PR.
4. Prefix support -> kopia doesn't support prefixes for `filesystem` storage
5. More E2E tests. 

---

#### Does this PR need a docs update or release note?

- [ ]  Yes, it's included
- [x] 🕐 Yes, but in a later PR
- [ ]  No

#### Type of change

<!--- Please check the type of change your PR introduces: --->
- [x] 🌻 Feature
- [ ] 🐛 Bugfix
- [ ] 🗺️ Documentation
- [ ] 🤖 Supportability/Tests
- [ ] 💻 CI/Deployment
- [ ] 🧹 Tech Debt/Cleanup

#### Issue(s)

<!-- Can reference multiple issues. Use one of the following "magic words" - "closes, fixes" to auto-close the Github issue. -->
* #1416 

#### Test Plan

<!-- How will this be tested prior to merging.-->
- [x] 💪 Manual
- [x]  Unit test
- [x] 💚 E2E
2023-09-19 09:46:54 +00:00

56 lines
1.1 KiB
Go

package flags
import (
"github.com/spf13/cobra"
"github.com/alcionai/corso/src/pkg/storage"
)
// filesystem flag names
const (
FilesystemPathFN = "path"
)
// filesystem flag values
var (
FilesystemPathFV string
)
func AddFilesystemFlags(cmd *cobra.Command) {
fs := cmd.Flags()
AddAzureCredsFlags(cmd)
AddCorsoPassphaseFlags(cmd)
fs.StringVar(
&FilesystemPathFV,
FilesystemPathFN,
"",
"path to local or network storage")
cobra.CheckErr(cmd.MarkFlagRequired(FilesystemPathFN))
fs.BoolVar(
&SucceedIfExistsFV,
SucceedIfExistsFN,
false,
"Exit with success if the repo has already been initialized.")
cobra.CheckErr(fs.MarkHidden("succeed-if-exists"))
}
func FilesystemFlagOverrides(cmd *cobra.Command) map[string]string {
fs := GetPopulatedFlags(cmd)
return PopulateFilesystemFlags(fs)
}
func PopulateFilesystemFlags(flagset PopulatedFlags) map[string]string {
fsOverrides := map[string]string{
storage.StorageProviderTypeKey: storage.ProviderFilesystem.String(),
}
if _, ok := flagset[FilesystemPathFN]; ok {
fsOverrides[FilesystemPathFN] = FilesystemPathFV
}
return fsOverrides
}