Skip to content

Commit 91eda61

Browse files
authored
Merge pull request #10110 from dolthub/elian/7628
#7628: Refactor `dolt backup` to use SQL interface
2 parents bdd9081 + 041a544 commit 91eda61

File tree

17 files changed

+927
-611
lines changed

17 files changed

+927
-611
lines changed

go/cmd/dolt/cli/arg_parser_helpers.go

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,6 @@ func ParseAuthor(authorStr string) (string, string, error) {
4646
return name, email, nil
4747
}
4848

49-
const (
50-
SyncBackupId = "sync"
51-
SyncBackupUrlId = "sync-url"
52-
RestoreBackupId = "restore"
53-
AddBackupId = "add"
54-
RemoveBackupId = "remove"
55-
RemoveBackupShortId = "rm"
56-
)
57-
5849
var branchForceFlagDesc = "Reset {{.LessThan}}branchname{{.GreaterThan}} to {{.LessThan}}startpoint{{.GreaterThan}}, even if {{.LessThan}}branchname{{.GreaterThan}} exists already. Without {{.EmphasisLeft}}-f{{.EmphasisRight}}, {{.EmphasisLeft}}dolt branch{{.EmphasisRight}} refuses to change an existing branch. In combination with {{.EmphasisLeft}}-d{{.EmphasisRight}} (or {{.EmphasisLeft}}--delete{{.EmphasisRight}}), allow deleting the branch irrespective of its merged status. In combination with -m (or {{.EmphasisLeft}}--move{{.EmphasisRight}}), allow renaming the branch even if the new branch name already exists, the same applies for {{.EmphasisLeft}}-c{{.EmphasisRight}} (or {{.EmphasisLeft}}--copy{{.EmphasisRight}})."
5950

6051
// CreateCommitArgParser creates the argparser shared dolt commit cli and DOLT_COMMIT.
@@ -391,36 +382,21 @@ func CreateGlobalArgParser(name string) *argparser.ArgParser {
391382
return ap
392383
}
393384

394-
var awsParams = []string{dbfactory.AWSRegionParam, dbfactory.AWSCredsTypeParam, dbfactory.AWSCredsFileParam, dbfactory.AWSCredsProfile}
385+
var AwsParams = []string{dbfactory.AWSRegionParam, dbfactory.AWSCredsTypeParam, dbfactory.AWSCredsFileParam, dbfactory.AWSCredsProfile}
395386
var ossParams = []string{dbfactory.OSSCredsFileParam, dbfactory.OSSCredsProfile}
396387

397-
func ProcessBackupArgs(apr *argparser.ArgParseResults, scheme, backupUrl string) (map[string]string, error) {
398-
params := map[string]string{}
399-
400-
var err error
401-
switch scheme {
402-
case dbfactory.AWSScheme:
403-
err = AddAWSParams(backupUrl, apr, params)
404-
case dbfactory.OSSScheme:
405-
err = AddOSSParams(backupUrl, apr, params)
406-
default:
407-
err = VerifyNoAwsParams(apr)
408-
}
409-
return params, err
410-
}
411-
412388
func AddAWSParams(remoteUrl string, apr *argparser.ArgParseResults, params map[string]string) error {
413389
isAWS := strings.HasPrefix(remoteUrl, "aws")
414390

415391
if !isAWS {
416-
for _, p := range awsParams {
392+
for _, p := range AwsParams {
417393
if _, ok := apr.GetValue(p); ok {
418394
return fmt.Errorf("%s param is only valid for aws cloud remotes in the format aws://dynamo-table:s3-bucket/database", p)
419395
}
420396
}
421397
}
422398

423-
for _, p := range awsParams {
399+
for _, p := range AwsParams {
424400
if val, ok := apr.GetValue(p); ok {
425401
params[p] = val
426402
}
@@ -450,7 +426,7 @@ func AddOSSParams(remoteUrl string, apr *argparser.ArgParseResults, params map[s
450426
}
451427

452428
func VerifyNoAwsParams(apr *argparser.ArgParseResults) error {
453-
if awsParams := apr.GetValues(awsParams...); len(awsParams) > 0 {
429+
if awsParams := apr.GetValues(AwsParams...); len(awsParams) > 0 {
454430
awsParamKeys := make([]string, 0, len(awsParams))
455431
for k := range awsParams {
456432
awsParamKeys = append(awsParamKeys, k)

go/cmd/dolt/commands/backup.go

Lines changed: 82 additions & 269 deletions
Large diffs are not rendered by default.

go/cmd/dolt/dolt.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ var dumpZshCommand = &commands.GenZshCompCmd{}
7070

7171
var commandsWithoutCliCtx = []cli.Command{
7272
commands.CloneCmd{},
73-
commands.BackupCmd{},
7473
commands.LoginCmd{},
7574
credcmds.Commands,
7675
cvcmds.Commands,

go/libraries/doltcore/env/environment.go

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ const (
5353
tempTablesDir = "temptf"
5454

5555
TmpDirName = "tmp"
56+
57+
InvalidRemoteNameCharacters = " \t\n\r./\\!@#$%^&*(){}[],.<>'\"?=+|"
5658
)
5759

5860
var zeroHashStr = (hash.Hash{}).String()
@@ -64,15 +66,15 @@ var ErrRemoteAlreadyExists = errors.New("remote already exists")
6466
var ErrInvalidRemoteURL = errors.New("remote URL invalid")
6567
var ErrRemoteNotFound = errors.New("remote not found")
6668
var ErrInvalidRemoteName = errors.New("remote name invalid")
67-
var ErrBackupAlreadyExists = errors.New("backup already exists")
68-
var ErrInvalidBackupURL = errors.New("backup URL invalid")
69-
var ErrBackupNotFound = errors.New("backup not found")
70-
var ErrInvalidBackupName = errors.New("backup name invalid")
71-
var ErrFailedToDeleteBackup = errors.New("failed to delete backup")
69+
var ErrBackupAlreadyExists = goerrors.NewKind("backup '%s' already exists")
70+
var ErrBackupInvalidUrl = goerrors.NewKind("backup URL '%s' is invalid")
71+
var ErrBackupNotFound = goerrors.NewKind("backup '%s' not found")
72+
var ErrBackupInvalidName = goerrors.NewKind("backup name '%s' is invalid")
73+
var ErrBackupFailedDelete = goerrors.NewKind("backup '%s' failed to delete")
7274
var ErrFailedToReadFromDb = errors.New("failed to read from db")
7375
var ErrFailedToDeleteRemote = errors.New("failed to delete remote")
7476
var ErrFailedToWriteRepoState = errors.New("failed to write repo state")
75-
var ErrRemoteAddressConflict = errors.New("address conflict with a remote")
77+
var ErrRemoteAddressConflict = goerrors.NewKind("address conflict with a remote: '%s' -> %s")
7678
var ErrDoltRepositoryNotFound = errors.New("can no longer find .dolt dir on disk")
7779
var ErrFailedToAccessDB = goerrors.NewKind("failed to access '%s' database: can no longer find .dolt dir on disk")
7880
var ErrDatabaseIsLocked = errors.New("the database is locked by another dolt process")
@@ -1023,7 +1025,7 @@ func (dEnv *DoltEnv) AddRemote(r Remote) error {
10231025
return ErrRemoteAlreadyExists
10241026
}
10251027

1026-
if strings.IndexAny(r.Name, " \t\n\r./\\!@#$%^&*(){}[],.<>'\"?=+|") != -1 {
1028+
if strings.IndexAny(r.Name, InvalidRemoteNameCharacters) != -1 {
10271029
return ErrInvalidRemoteName
10281030
}
10291031

@@ -1034,7 +1036,7 @@ func (dEnv *DoltEnv) AddRemote(r Remote) error {
10341036

10351037
// can have multiple remotes with the same address, but no conflicting backups
10361038
if rem, found := CheckRemoteAddressConflict(absRemoteUrl, nil, dEnv.RepoState.Backups); found {
1037-
return fmt.Errorf("%w: '%s' -> %s", ErrRemoteAddressConflict, rem.Name, rem.Url)
1039+
return ErrRemoteAddressConflict.New(rem.Name, rem.Url)
10381040
}
10391041

10401042
r.Url = absRemoteUrl
@@ -1052,21 +1054,21 @@ func (dEnv *DoltEnv) GetBackups() (*concurrentmap.Map[string, Remote], error) {
10521054

10531055
func (dEnv *DoltEnv) AddBackup(r Remote) error {
10541056
if _, ok := dEnv.RepoState.Backups.Get(r.Name); ok {
1055-
return ErrBackupAlreadyExists
1057+
return ErrBackupAlreadyExists.New(r.Name)
10561058
}
10571059

1058-
if strings.IndexAny(r.Name, " \t\n\r./\\!@#$%^&*(){}[],.<>'\"?=+|") != -1 {
1059-
return ErrInvalidBackupName
1060+
if strings.IndexAny(r.Name, InvalidRemoteNameCharacters) != -1 {
1061+
return ErrBackupInvalidName.New(r.Name)
10601062
}
10611063

10621064
_, absRemoteUrl, err := GetAbsRemoteUrl(dEnv.FS, dEnv.Config, r.Url)
10631065
if err != nil {
1064-
return fmt.Errorf("%w; %s", ErrInvalidBackupURL, err.Error())
1066+
return ErrBackupInvalidUrl.New(r.Url, err.Error())
10651067
}
10661068

10671069
// no conflicting remote or backup addresses
1068-
if rem, found := CheckRemoteAddressConflict(absRemoteUrl, dEnv.RepoState.Remotes, dEnv.RepoState.Backups); found {
1069-
return fmt.Errorf("%w: '%s' -> %s", ErrRemoteAddressConflict, rem.Name, rem.Url)
1070+
if conflict, found := CheckRemoteAddressConflict(absRemoteUrl, dEnv.RepoState.Remotes, dEnv.RepoState.Backups); found {
1071+
return ErrRemoteAddressConflict.New(conflict.Name, conflict.Url)
10701072
}
10711073

10721074
r.Url = absRemoteUrl
@@ -1110,7 +1112,7 @@ func (dEnv *DoltEnv) RemoveRemote(ctx context.Context, name string) error {
11101112
func (dEnv *DoltEnv) RemoveBackup(ctx context.Context, name string) error {
11111113
backup, ok := dEnv.RepoState.Backups.Get(name)
11121114
if !ok {
1113-
return ErrBackupNotFound
1115+
return ErrBackupNotFound.New(name)
11141116
}
11151117

11161118
dEnv.RepoState.RemoveBackup(backup)

0 commit comments

Comments
 (0)