save active merge commit during GC

This commit is contained in:
Andy Arthur
2021-02-21 13:27:35 -08:00
parent 2c5f8b2815
commit 33af2cb987
3 changed files with 48 additions and 9 deletions

View File

@@ -17,6 +17,8 @@ package commands
import (
"context"
"github.com/dolthub/dolt/go/store/hash"
"github.com/dolthub/dolt/go/cmd/dolt/cli"
"github.com/dolthub/dolt/go/cmd/dolt/errhand"
eventsapi "github.com/dolthub/dolt/go/gen/proto/dolt/services/eventsapi/v1alpha1"
@@ -114,11 +116,21 @@ func (cmd GarbageCollectionCmd) Exec(ctx context.Context, commandStr string, arg
return HandleVErrAndExitCode(verr, usage)
}
w := dEnv.RepoState.WorkingHash()
s := dEnv.RepoState.StagedHash()
keepers := []hash.Hash{
dEnv.RepoState.WorkingHash(),
dEnv.RepoState.StagedHash(),
}
err = dEnv.DoltDB.GC(ctx, w, s)
if dEnv.IsMergeActive() {
m, err := env.ResolveMergeCommitHash(ctx, dEnv.RepoStateReader(), dEnv.DoltDB)
if err != nil {
verr = errhand.BuildDError("an error occurred while saving an active merge commit").AddCause(err).Build()
return HandleVErrAndExitCode(verr, usage)
}
keepers = append(keepers, m)
}
err = dEnv.DoltDB.GC(ctx, keepers...)
if err != nil {
verr = errhand.BuildDError("an error occurred during garbage collection").AddCause(err).Build()
}

View File

@@ -340,6 +340,20 @@ func MergeWouldStompChanges(ctx context.Context, mergeCommit *doltdb.Commit, dbD
return stompedTables, headWorkingDiffs, nil
}
func ResolveMergeCommitHash(ctx context.Context, rsr RepoStateReader, ddb *doltdb.DoltDB) (h hash.Hash, err error) {
spec, err := doltdb.NewCommitSpec(rsr.GetMergeCommit())
if err != nil {
return h, err
}
cm, err := ddb.Resolve(ctx, spec, nil)
if err != nil {
return h, err
}
return cm.HashOf()
}
func mapTableHashes(ctx context.Context, root *doltdb.RootValue) (map[string]hash.Hash, error) {
names, err := root.GetTableNames(ctx)

View File

@@ -19,6 +19,8 @@ import (
"errors"
"sync/atomic"
"github.com/dolthub/dolt/go/store/hash"
"github.com/dolthub/dolt/go/libraries/doltcore/doltdb"
"github.com/dolthub/dolt/go/libraries/doltcore/env"
"github.com/dolthub/dolt/go/libraries/doltcore/row"
@@ -278,20 +280,31 @@ func (te *tableEditorWriteCloser) GC(ctx context.Context) error {
return nil
}
w := te.dEnv.RepoState.WorkingHash()
s := te.dEnv.RepoState.StagedHash()
inProgresRoot, err := te.sess.Flush(ctx)
inProgressRoot, err := te.sess.Flush(ctx)
if err != nil {
return err
}
i, err := te.dEnv.DoltDB.WriteRootValue(ctx, inProgresRoot)
inProgressHash, err := te.dEnv.DoltDB.WriteRootValue(ctx, inProgressRoot)
if err != nil {
return err
}
return te.dEnv.DoltDB.GC(ctx, w, s, i)
keepers := []hash.Hash{
te.dEnv.RepoState.WorkingHash(),
te.dEnv.RepoState.StagedHash(),
inProgressHash,
}
if te.dEnv.IsMergeActive() {
m, err := env.ResolveMergeCommitHash(ctx, te.dEnv.RepoStateReader(), te.dEnv.DoltDB)
if err != nil {
return err
}
keepers = append(keepers, m)
}
return te.dEnv.DoltDB.GC(ctx, keepers...)
}
// Close implements TableWriteCloser