diff --git a/go/libraries/doltcore/merge/merge.go b/go/libraries/doltcore/merge/merge.go index ced880317d..91f0e1ad93 100644 --- a/go/libraries/doltcore/merge/merge.go +++ b/go/libraries/doltcore/merge/merge.go @@ -116,11 +116,6 @@ func (merger *Merger) MergeTable(ctx context.Context, tblName string, sess *edit return tbl, &MergeStats{Operation: TableUnmodified}, nil } - // Changes only in root, table unmodified - if mergeHash == ancHash { - return tbl, &MergeStats{Operation: TableUnmodified}, nil - } - // One or both added this table if !ancHasTable { if mergeHasTable && rootHasTable { @@ -155,6 +150,11 @@ func (merger *Merger) MergeTable(ctx context.Context, tblName string, sess *edit return nil, &MergeStats{Operation: TableRemoved}, nil } + // Changes only in root, table unmodified + if mergeHash == ancHash { + return tbl, &MergeStats{Operation: TableUnmodified}, nil + } + // Changes only in merge root, fast-forward if rootHash == ancHash { ms := MergeStats{Operation: TableModified} @@ -868,7 +868,6 @@ func MergeRoots(ctx context.Context, ourRoot, theirRoot, ancRoot *doltdb.RootVal // need to validate merges can be done on all tables before starting the actual merges. for _, tblName := range tblNames { mergedTable, stats, err := merger.MergeTable(ctx, tblName, tableEditSession) - if err != nil { return nil, nil, err } @@ -889,6 +888,7 @@ func MergeRoots(ctx context.Context, ourRoot, theirRoot, ancRoot *doltdb.RootVal } else if newRootHasTable, err := newRoot.HasTable(ctx, tblName); err != nil { return nil, nil, err } else if newRootHasTable { + // Merge root deleted this table tblToStats[tblName] = &MergeStats{Operation: TableRemoved} err = tableEditSession.UpdateRoot(ctx, func(ctx context.Context, root *doltdb.RootValue) (*doltdb.RootValue, error) { return root.RemoveTables(ctx, tblName) @@ -901,7 +901,11 @@ func MergeRoots(ctx context.Context, ourRoot, theirRoot, ancRoot *doltdb.RootVal return nil, nil, err } } else { - panic("?") + // This is a deleted table that the merge root still has + if stats.Operation != TableRemoved { + panic("Invalid merge state. This is a bug.") + } + // Nothing to update, our root already has the table deleted } } diff --git a/integration-tests/bats/merge.bats b/integration-tests/bats/merge.bats index 1bb86db05d..ed9a53968a 100644 --- a/integration-tests/bats/merge.bats +++ b/integration-tests/bats/merge.bats @@ -462,9 +462,10 @@ SQL [ "$status" -eq 0 ] [[ ! "$output" =~ "test2" ]] || false - run dolt sql -q "select * from test1" + run dolt sql -q "select * from test1" -r csv [ "$status" -eq 0 ] - [[ "$output" =~ 2 ]] || false + [[ "$output" =~ "1,1,1" ]] || false + [[ "$output" =~ "2,2,2" ]] || false }