From a061e11bd39ee2c42c04abca8ccb8bed7945e61d Mon Sep 17 00:00:00 2001 From: Katie McCulloch Date: Fri, 10 Apr 2020 12:17:34 -0700 Subject: [PATCH] libraries/doltcore/env/actions: Move GetUnstagedDocs and SaveDocsFromWOrkingExcludingFSChanges to actions/docs.go --- go/libraries/doltcore/env/actions/branch.go | 46 +++------------------ go/libraries/doltcore/env/actions/docs.go | 41 ++++++++++++++++++ 2 files changed, 46 insertions(+), 41 deletions(-) diff --git a/go/libraries/doltcore/env/actions/branch.go b/go/libraries/doltcore/env/actions/branch.go index 78d6cc49fe..d8492d20e1 100644 --- a/go/libraries/doltcore/env/actions/branch.go +++ b/go/libraries/doltcore/env/actions/branch.go @@ -19,7 +19,6 @@ import ( "errors" "github.com/liquidata-inc/dolt/go/libraries/doltcore/ref" - "github.com/liquidata-inc/dolt/go/libraries/doltcore/diff" "github.com/liquidata-inc/dolt/go/libraries/doltcore/doltdb" "github.com/liquidata-inc/dolt/go/libraries/doltcore/env" "github.com/liquidata-inc/dolt/go/libraries/utils/set" @@ -246,7 +245,10 @@ func CheckoutBranch(ctx context.Context, dEnv *env.DoltEnv, brName string) error return err } - unstagedDocs, err := getUnstagedDocs(ctx, dEnv) + unstagedDocs, err := GetUnstagedDocs(ctx, dEnv) + if err != nil { + return err + } dEnv.RepoState.Head = ref.MarshalableRef{Ref: dref} dEnv.RepoState.Working = wrkHash.String() @@ -258,47 +260,9 @@ func CheckoutBranch(ctx context.Context, dEnv *env.DoltEnv, brName string) error return err } - return saveDocsOnCheckout(ctx, dEnv, unstagedDocs) + return SaveDocsFromWorkingExcludingFSChanges(ctx, dEnv, unstagedDocs) } -func getUnstagedDocs(ctx context.Context, dEnv *env.DoltEnv) (env.Docs, error) { - _, unstagedDocDiffs, err := diff.GetDocDiffs(ctx, dEnv) - if err != nil { - return nil, err - } - unstagedDocs := env.Docs{} - for _, docName := range unstagedDocDiffs.Docs { - docDetail, err := dEnv.GetOneDocDetail(docName) - if err != nil { - return nil, err - } - unstagedDocs = append(unstagedDocs, docDetail) - } - return unstagedDocs, nil -} - - func saveDocsOnCheckout(ctx context.Context, dEnv *env.DoltEnv, docsToExclude env.Docs) error { - workingRoot, err := dEnv.WorkingRoot(ctx) - if err != nil { - return err - } - - var docsToSave env.Docs - if len(docsToExclude) > 0 { - for _, doc := range dEnv.Docs { - for _, excludedDoc := range docsToExclude { - if doc.DocPk != excludedDoc.DocPk { - docsToSave = append(docsToSave, doc) - } - } - } - } else { - docsToSave = dEnv.Docs - } - - return SaveTrackedDocs(ctx, dEnv, workingRoot, workingRoot, docsToSave) - } - var emptyHash = hash.Hash{} func tblHashesForCO(ctx context.Context, oldRoot, newRoot, changedRoot *doltdb.RootValue, conflicts *set.StrSet) (map[string]hash.Hash, error) { diff --git a/go/libraries/doltcore/env/actions/docs.go b/go/libraries/doltcore/env/actions/docs.go index a5ec046e2c..b92c49b1d3 100644 --- a/go/libraries/doltcore/env/actions/docs.go +++ b/go/libraries/doltcore/env/actions/docs.go @@ -140,3 +140,44 @@ func getUpdatedWorkingAndStagedWithDocs(ctx context.Context, dEnv *env.DoltEnv, return currRoot, stgRoot, nil } + +// GetUnstagedDocs retrieves the unstaged docs (docs from the filesystem). +func GetUnstagedDocs(ctx context.Context, dEnv *env.DoltEnv) (env.Docs, error) { + _, unstagedDocDiffs, err := diff.GetDocDiffs(ctx, dEnv) + if err != nil { + return nil, err + } + unstagedDocs := env.Docs{} + for _, docName := range unstagedDocDiffs.Docs { + docDetail, err := dEnv.GetOneDocDetail(docName) + if err != nil { + return nil, err + } + unstagedDocs = append(unstagedDocs, docDetail) + } + return unstagedDocs, nil +} + +// SaveDocsFromWorkingExcludingFSChanges saves docs from the working root to the filesystem, and does not overwrite changes to docs on the FS. +// Intended to be called after checking that no conflicts exist (during a checkout or merge, i.e.). +func SaveDocsFromWorkingExcludingFSChanges(ctx context.Context, dEnv *env.DoltEnv, docsToExclude env.Docs) error { + workingRoot, err := dEnv.WorkingRoot(ctx) + if err != nil { + return err + } + + var docsToSave env.Docs + if len(docsToExclude) > 0 { + for _, doc := range dEnv.Docs { + for _, excludedDoc := range docsToExclude { + if doc.DocPk != excludedDoc.DocPk { + docsToSave = append(docsToSave, doc) + } + } + } + } else { + docsToSave = dEnv.Docs + } + + return SaveTrackedDocs(ctx, dEnv, workingRoot, workingRoot, docsToSave) + } \ No newline at end of file