adds message column to dolt push output

This commit is contained in:
Stephanie You
2023-09-29 13:28:22 -07:00
parent 958652f88b
commit 3b938b495e
3 changed files with 41 additions and 17 deletions

View File

@@ -19,6 +19,7 @@ import (
"strconv"
"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/go-mysql-server/sql/types"
"github.com/dolthub/dolt/go/cmd/dolt/cli"
"github.com/dolthub/dolt/go/libraries/doltcore/branch_control"
@@ -29,67 +30,82 @@ import (
"github.com/dolthub/dolt/go/store/datas"
)
var UpToDateMessage = "Everything up-to-date"
var doltPushSchema = []*sql.Column{
{
Name: "status",
Type: types.Int64,
Nullable: false,
},
{
Name: "message",
Type: types.LongText,
Nullable: true,
},
}
// doltPush is the stored procedure version for the CLI command `dolt push`.
func doltPush(ctx *sql.Context, args ...string) (sql.RowIter, error) {
res, err := doDoltPush(ctx, args)
res, message, err := doDoltPush(ctx, args)
if err != nil {
return nil, err
}
return rowToIter(int64(res)), nil
return rowToIter(int64(res), message), nil
}
func doDoltPush(ctx *sql.Context, args []string) (int, error) {
func doDoltPush(ctx *sql.Context, args []string) (int, string, error) {
dbName := ctx.GetCurrentDatabase()
if len(dbName) == 0 {
return cmdFailure, fmt.Errorf("empty database name")
return cmdFailure, "", fmt.Errorf("empty database name")
}
if err := branch_control.CheckAccess(ctx, branch_control.Permissions_Write); err != nil {
return cmdFailure, err
return cmdFailure, "", err
}
sess := dsess.DSessFromSess(ctx.Session)
dbData, ok := sess.GetDbData(ctx, dbName)
if !ok {
return cmdFailure, fmt.Errorf("could not load database %s", dbName)
return cmdFailure, "", fmt.Errorf("could not load database %s", dbName)
}
apr, err := cli.CreatePushArgParser().Parse(args)
if err != nil {
return cmdFailure, err
return cmdFailure, "", err
}
autoSetUpRemote := loadConfig(ctx).GetStringOrDefault(env.PushAutoSetupRemote, "false")
pushAutoSetUpRemote, err := strconv.ParseBool(autoSetUpRemote)
if err != nil {
return cmdFailure, err
return cmdFailure, "", err
}
opts, err := env.NewPushOpts(ctx, apr, dbData.Rsr, dbData.Ddb, apr.Contains(cli.ForceFlag), apr.Contains(cli.SetUpstreamFlag), pushAutoSetUpRemote)
if err != nil {
return cmdFailure, err
return cmdFailure, "", err
}
remoteDB, err := sess.Provider().GetRemoteDB(ctx, dbData.Ddb.ValueReadWriter().Format(), opts.Remote, true)
if err != nil {
return 1, actions.HandleInitRemoteStorageClientErr(opts.Remote.Name, opts.Remote.Url, err)
return 1, "", actions.HandleInitRemoteStorageClientErr(opts.Remote.Name, opts.Remote.Url, err)
}
tmpDir, err := dbData.Rsw.TempTableFilesDir()
if err != nil {
return cmdFailure, err
return cmdFailure, "", err
}
err = actions.DoPush(ctx, dbData.Rsr, dbData.Rsw, dbData.Ddb, remoteDB, tmpDir, opts, runProgFuncs, stopProgFuncs)
if err != nil {
switch err {
case doltdb.ErrUpToDate:
return cmdSuccess, nil
return cmdSuccess, UpToDateMessage, nil
case datas.ErrMergeNeeded:
return cmdFailure, fmt.Errorf("%w; the tip of your current branch is behind its remote counterpart", err)
return cmdFailure, "", fmt.Errorf("%w; the tip of your current branch is behind its remote counterpart", err)
default:
return cmdFailure, err
return cmdFailure, "", err
}
}
// TODO : set upstream should be persisted outside of session
return cmdSuccess, nil
return cmdSuccess, "", nil
}

View File

@@ -38,7 +38,7 @@ var DoltProcedures = []sql.ExternalStoredProcedureDetails{
{Name: "dolt_merge", Schema: doltMergeSchema, Function: doltMerge},
{Name: "dolt_pull", Schema: int64Schema("fast_forward", "conflicts"), Function: doltPull},
{Name: "dolt_push", Schema: int64Schema("status"), Function: doltPush},
{Name: "dolt_push", Schema: doltPushSchema, Function: doltPush},
{Name: "dolt_remote", Schema: int64Schema("status"), Function: doltRemote},
{Name: "dolt_reset", Schema: int64Schema("status"), Function: doltReset},
{Name: "dolt_revert", Schema: int64Schema("status"), Function: doltRevert},
@@ -60,7 +60,7 @@ var DoltProcedures = []sql.ExternalStoredProcedureDetails{
{Name: "dmerge", Schema: doltMergeSchema, Function: doltMerge},
{Name: "dpull", Schema: int64Schema("fast_forward", "conflicts"), Function: doltPull},
{Name: "dpush", Schema: int64Schema("status"), Function: doltPush},
{Name: "dpush", Schema: doltPushSchema, Function: doltPush},
{Name: "dremote", Schema: int64Schema("status"), Function: doltRemote},
{Name: "dreset", Schema: int64Schema("status"), Function: doltReset},
{Name: "drevert", Schema: int64Schema("status"), Function: doltRevert},

View File

@@ -348,3 +348,11 @@ SQL
[ "$status" -eq 1 ]
[[ "$output" =~ "invalid ref spec: ''" ]] || false
}
@test "sql-push: up to date push returns message" {
cd repo1
dolt sql -q "call dolt_push('origin', 'main')"
run dolt sql -q "call dolt_push('origin', 'main')"
[ "$status" -eq 0 ]
[[ "$output" =~ "Everything up-to-date" ]] || false
}