From 84e9d3d5c1a57c52f4dbfde4edec8618063be50d Mon Sep 17 00:00:00 2001 From: Neil Macneale IV Date: Mon, 10 Jul 2023 15:01:12 -0700 Subject: [PATCH] Migrate the `dolt clean` command to using the dolt_clean() procedure --- go/cmd/dolt/commands/clean.go | 68 +++++++++++++------ go/cmd/dolt/dolt.go | 1 - .../bats/helper/local-remote.bash | 1 - integration-tests/bats/sql-clean.bats | 6 +- 4 files changed, 50 insertions(+), 26 deletions(-) diff --git a/go/cmd/dolt/commands/clean.go b/go/cmd/dolt/commands/clean.go index e8bcd6da96..8c620e5971 100644 --- a/go/cmd/dolt/commands/clean.go +++ b/go/cmd/dolt/commands/clean.go @@ -15,13 +15,14 @@ package commands import ( + "bytes" "context" "github.com/dolthub/dolt/go/cmd/dolt/cli" - "github.com/dolthub/dolt/go/cmd/dolt/errhand" "github.com/dolthub/dolt/go/libraries/doltcore/env" - "github.com/dolthub/dolt/go/libraries/doltcore/env/actions" "github.com/dolthub/dolt/go/libraries/utils/argparser" + "github.com/gocraft/dbr/v2" + "github.com/gocraft/dbr/v2/dialect" ) const ( @@ -64,34 +65,61 @@ func (cmd CleanCmd) ArgParser() *argparser.ArgParser { return cli.CreateCleanArgParser() } +func (cmd CleanCmd) RequiresRepo() bool { + return false +} + // Exec executes the command func (cmd CleanCmd) Exec(ctx context.Context, commandStr string, args []string, dEnv *env.DoltEnv, cliCtx cli.CliContext) int { ap := cli.CreateCleanArgParser() - help, usage := cli.HelpAndUsagePrinters(cli.CommandDocsForCommandString(commandStr, cleanDocContent, ap)) + help, _ := cli.HelpAndUsagePrinters(cli.CommandDocsForCommandString(commandStr, cleanDocContent, ap)) apr := cli.ParseArgsOrDie(ap, args, help) - if dEnv.IsLocked() { - return HandleVErrAndExitCode(errhand.VerboseErrorFromError(env.ErrActiveServerLock.New(dEnv.LockFile())), help) + queryist, sqlCtx, closeFunc, err := cliCtx.QueryEngine(ctx) + if err != nil { + cli.Println(err.Error()) + return 1 + } + if closeFunc != nil { + defer closeFunc() } - roots, err := dEnv.Roots(ctx) - if err != nil { - return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) + var params []interface{} + + firstParamDone := false + var buffer bytes.Buffer + buffer.WriteString("CALL DOLT_CLEAN(") + if apr.Contains(cli.DryRunFlag) { + buffer.WriteString("\"--dry-run\"") + firstParamDone = true + } + if apr.NArg() > 0 { + // loop over apr.Args() and add them to the buffer + for i := 0; i < apr.NArg(); i++ { + if firstParamDone { + buffer.WriteString(", ") + } + buffer.WriteString("?") + params = append(params, apr.Arg(i)) + firstParamDone = true + } + } + buffer.WriteString((")")) + query := buffer.String() + + if len(params) > 0 { + query, err = dbr.InterpolateForDialect(query, params, dialect.MySQL) + if err != nil { + cli.Println(err.Error()) + return 1 + } } - ws, err := dEnv.WorkingSet(ctx) + _, err = GetRowsForSql(queryist, sqlCtx, query) if err != nil { - return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) + cli.Println(err.Error()) + return 1 } - roots, err = actions.CleanUntracked(ctx, roots, apr.Args, apr.Contains(DryrunCleanParam), false) - if err != nil { - return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) - } - err = dEnv.UpdateWorkingSet(ctx, ws.WithWorkingRoot(roots.Working).WithStagedRoot(roots.Staged).ClearMerge()) - if err != nil { - return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) - } - - return handleResetError(err, usage) + return 0 } diff --git a/go/cmd/dolt/dolt.go b/go/cmd/dolt/dolt.go index 7390ee5319..2a0ecee1a1 100644 --- a/go/cmd/dolt/dolt.go +++ b/go/cmd/dolt/dolt.go @@ -121,7 +121,6 @@ var doltSubCommands = []cli.Command{ } var commandsWithoutCliCtx = []cli.Command{ - commands.CleanCmd{}, admin.Commands, sqlserver.SqlServerCmd{VersionStr: Version}, sqlserver.SqlClientCmd{VersionStr: Version}, diff --git a/integration-tests/bats/helper/local-remote.bash b/integration-tests/bats/helper/local-remote.bash index 8415fc702d..66813fdd6c 100644 --- a/integration-tests/bats/helper/local-remote.bash +++ b/integration-tests/bats/helper/local-remote.bash @@ -81,7 +81,6 @@ SKIP_SERVER_TESTS=$(cat <<-EOM ~large-update.bats~ ~remotes.bats~ ~create-views.bats~ -~sql-clean.bats~ ~blame.bats~ ~multiple-tables.bats~ ~json-new-fmt.bats~ diff --git a/integration-tests/bats/sql-clean.bats b/integration-tests/bats/sql-clean.bats index 513744b708..2398aacd06 100644 --- a/integration-tests/bats/sql-clean.bats +++ b/integration-tests/bats/sql-clean.bats @@ -23,8 +23,7 @@ teardown() { # call proc dolt sql -q "create table test2 (pk int primary key)" - run dolt sql -q "call dolt_clean()" - [ $status -eq 0 ] + dolt sql -q "call dolt_clean()" run dolt status [ "$status" -eq 0 ] @@ -33,8 +32,7 @@ teardown() { # call dproc dolt sql -q "create table test2 (pk int primary key)" - run dolt sql -q "call dclean('--dry-run')" - [ $status -eq 0 ] + dolt sql -q "call dclean('--dry-run')" run dolt status [ "$status" -eq 0 ]