mirror of
https://github.com/dolthub/dolt.git
synced 2026-05-07 11:22:02 -05:00
Made dolt_merge return a particular error type, and check for it during batch processing (in which case don't do any further state cleanup). Also removed extra error decorators that could interere with error type detection.
This commit is contained in:
@@ -394,7 +394,14 @@ func execBatch(sqlCtx *sql.Context, readOnly bool, mrEnv env.MultiRepoEnv, roots
|
||||
|
||||
err = runBatchMode(sqlCtx, se, batchInput)
|
||||
if err != nil {
|
||||
// If we encounter an error, flush what we have so far to disk before exiting
|
||||
// If we encounter an error, flush what we have so far to disk before exiting, except in the case of merge
|
||||
// errors, which have already updated the repo state all they're going to (and writing session root on top of
|
||||
// them would overwrite these changes)
|
||||
// TODO: this is a mess, merge conflicts need to follow the same code path as everything else
|
||||
if err == doltdb.ErrUnresolvedConflicts || err == doltdb.ErrMergeActive {
|
||||
return errhand.BuildDError("Error processing batch").Build()
|
||||
}
|
||||
|
||||
_ = flushBatchedEdits(sqlCtx, se)
|
||||
_ = writeRoots(sqlCtx, se, mrEnv, roots)
|
||||
|
||||
@@ -1100,7 +1107,7 @@ func processNonBatchableQuery(ctx *sql.Context, se *sqlEngine, query string, sql
|
||||
if rowIter != nil {
|
||||
err = mergeResultIntoStats(sqlStatement, rowIter, batchEditStats)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error executing statement: %v", err.Error())
|
||||
return err
|
||||
}
|
||||
|
||||
// Some statement types should print results, even in batch mode.
|
||||
@@ -1130,7 +1137,7 @@ func processNonBatchableQuery(ctx *sql.Context, se *sqlEngine, query string, sql
|
||||
func processBatchableEditQuery(ctx *sql.Context, se *sqlEngine, query string, sqlStatement sqlparser.Statement) (returnErr error) {
|
||||
_, rowIter, err := se.query(ctx, query)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error inserting rows: %v", err.Error())
|
||||
return err
|
||||
}
|
||||
|
||||
if rowIter != nil {
|
||||
@@ -1142,7 +1149,7 @@ func processBatchableEditQuery(ctx *sql.Context, se *sqlEngine, query string, sq
|
||||
}()
|
||||
err = mergeResultIntoStats(sqlStatement, rowIter, batchEditStats)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error inserting rows: %v", err.Error())
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -47,6 +47,9 @@ var ErrUpToDate = errors.New("up to date")
|
||||
var ErrIsAhead = errors.New("current fast forward from a to b. a is ahead of b already")
|
||||
var ErrIsBehind = errors.New("cannot reverse from b to a. b is a is behind a already")
|
||||
|
||||
var ErrUnresolvedConflicts = errors.New("merge has unresolved conflicts")
|
||||
var ErrMergeActive = errors.New("merging is not possible because you have not committed an active merge")
|
||||
|
||||
type ErrClientOutOfDate struct {
|
||||
RepoVer FeatureVersion
|
||||
ClientVer FeatureVersion
|
||||
|
||||
@@ -100,11 +100,11 @@ func (d DoltMergeFunc) Eval(ctx *sql.Context, row sql.Row) (interface{}, error)
|
||||
}
|
||||
|
||||
if hasConflicts {
|
||||
return 1, errors.New("error: merge has unresolved conflicts")
|
||||
return 1, doltdb.ErrUnresolvedConflicts
|
||||
}
|
||||
|
||||
if dbData.Rsr.IsMergeActive() {
|
||||
return 1, errors.New("error: merging is not possible because you have not committed an active merge")
|
||||
return 1, doltdb.ErrMergeActive
|
||||
}
|
||||
|
||||
head, hh, headRoot, err := getHead(ctx, sess, dbName)
|
||||
@@ -333,7 +333,7 @@ func mergeRootToWorking(
|
||||
hasConflicts := checkForConflicts(mergeStats)
|
||||
|
||||
if hasConflicts {
|
||||
return errors.New("merge has conflicts. use the dolt_conflicts table to resolve")
|
||||
return doltdb.ErrUnresolvedConflicts
|
||||
}
|
||||
|
||||
_, err = env.UpdateStagedRoot(ctx, dbData.Ddb, dbData.Rsw, workingRoot)
|
||||
|
||||
Reference in New Issue
Block a user