mirror of
https://github.com/dolthub/dolt.git
synced 2026-02-10 10:30:57 -06:00
adds message column to dolt push output
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user