From bd32265cc1d566d586ef02e32d480ff495c9d92b Mon Sep 17 00:00:00 2001 From: Maximilian Hoffman Date: Tue, 6 Dec 2022 15:13:54 -0800 Subject: [PATCH] ambyii's escape commit tag (#4939) * no newlines * Get uncommitted values for GC from datasets * Remove getGCKeepers * [no-release-notes] revert systab debugging (#4918) * Revert "no newlines" This reverts commit a41db014cc3ea8d5ffeb08fb6b1118fc497d37f7. * Revert "indent error" This reverts commit f074dee15d9f034a0e0452bd7d61053fe661030c. * Revert "starter (#4912)" This reverts commit 02809af1b935e178de9fd831d84b555c276bc900. * Fix and tests for escaping commit messages Co-authored-by: Taylor Bantle Co-authored-by: Abdurrahmaan Iqbal --- go/cmd/dolt/commands/gc.go | 9 +--- go/cmd/dolt/commands/log.go | 4 +- go/libraries/doltcore/doltdb/doltdb.go | 7 +-- go/libraries/doltcore/doltdb/gc_test.go | 10 +---- go/libraries/doltcore/env/environment.go | 57 ------------------------ integration-tests/bats/log.bats | 7 ++- 6 files changed, 15 insertions(+), 79 deletions(-) diff --git a/go/cmd/dolt/commands/gc.go b/go/cmd/dolt/commands/gc.go index 005f4e5a14..10853f0319 100644 --- a/go/cmd/dolt/commands/gc.go +++ b/go/cmd/dolt/commands/gc.go @@ -111,19 +111,12 @@ func (cmd GarbageCollectionCmd) Exec(ctx context.Context, commandStr string, arg } else { // full gc dEnv, err = MaybeMigrateEnv(ctx, dEnv) - if err != nil { verr = errhand.BuildDError("could not load manifest for gc").AddCause(err).Build() return HandleVErrAndExitCode(verr, usage) } - keepers, err := env.GetGCKeepers(ctx, dEnv) - if err != nil { - verr = errhand.BuildDError("an error occurred while saving working set").AddCause(err).Build() - return HandleVErrAndExitCode(verr, usage) - } - - err = dEnv.DoltDB.GC(ctx, keepers...) + err = dEnv.DoltDB.GC(ctx) if err != nil { if errors.Is(err, chunks.ErrNothingToCollect) { cli.PrintErrln(color.YellowString("Nothing to collect.")) diff --git a/go/cmd/dolt/commands/log.go b/go/cmd/dolt/commands/log.go index c121bb47a6..b2e5c3324c 100644 --- a/go/cmd/dolt/commands/log.go +++ b/go/cmd/dolt/commands/log.go @@ -569,7 +569,7 @@ func logCompact(pager *outputpager.Pager, opts *logOpts, commits []logNode) { } formattedDesc := strings.Replace(comm.commitMeta.Description, "\n", " ", -1) + "\n" - pager.Writer.Write([]byte(fmt.Sprintf(formattedDesc))) + pager.Writer.Write([]byte(fmt.Sprintf("%s", formattedDesc))) } } @@ -607,7 +607,7 @@ func logDefault(pager *outputpager.Pager, opts *logOpts, commits []logNode) { pager.Writer.Write([]byte(fmt.Sprintf("\nDate: %s", timeStr))) formattedDesc := "\n\n\t" + strings.Replace(comm.commitMeta.Description, "\n", "\n\t", -1) + "\n\n" - pager.Writer.Write([]byte(fmt.Sprintf(formattedDesc))) + pager.Writer.Write([]byte(fmt.Sprintf("%s", formattedDesc))) } } diff --git a/go/libraries/doltcore/doltdb/doltdb.go b/go/libraries/doltcore/doltdb/doltdb.go index 8dc1efd2f7..477c104414 100644 --- a/go/libraries/doltcore/doltdb/doltdb.go +++ b/go/libraries/doltcore/doltdb/doltdb.go @@ -1149,8 +1149,8 @@ func (ddb *DoltDB) Rebase(ctx context.Context) error { return datas.ChunkStoreFromDatabase(ddb.db).Rebase(ctx) } -// GC performs garbage collection on this ddb. Values passed in |uncommittedVals| will be temporarily saved during gc. -func (ddb *DoltDB) GC(ctx context.Context, uncommittedVals ...hash.Hash) error { +// GC performs garbage collection on this ddb. +func (ddb *DoltDB) GC(ctx context.Context) error { collector, ok := ddb.db.Database.(datas.GarbageCollector) if !ok { return fmt.Errorf("this database does not support garbage collection") @@ -1165,7 +1165,8 @@ func (ddb *DoltDB) GC(ctx context.Context, uncommittedVals ...hash.Hash) error { if err != nil { return err } - newGen := hash.NewHashSet(uncommittedVals...) + + newGen := make(hash.HashSet) oldGen := make(hash.HashSet) err = datasets.IterAll(ctx, func(keyStr string, h hash.Hash) error { var isOldGen bool diff --git a/go/libraries/doltcore/doltdb/gc_test.go b/go/libraries/doltcore/doltdb/gc_test.go index 119b5e8a62..561ba00133 100644 --- a/go/libraries/doltcore/doltdb/gc_test.go +++ b/go/libraries/doltcore/doltdb/gc_test.go @@ -125,17 +125,11 @@ func testGarbageCollection(t *testing.T, test gcTest) { } } - working, err := dEnv.WorkingRoot(ctx) - require.NoError(t, err) - h, err := working.HashOf() - require.NoError(t, err) - // save working root during GC - - err = dEnv.DoltDB.GC(ctx, h) + err := dEnv.DoltDB.GC(ctx) require.NoError(t, err) test.postGCFunc(ctx, t, dEnv.DoltDB, res) - working, err = dEnv.WorkingRoot(ctx) + working, err := dEnv.WorkingRoot(ctx) require.NoError(t, err) // assert all out rows are present after gc actual, err := sqle.ExecuteSelect(dEnv, working, test.query) diff --git a/go/libraries/doltcore/env/environment.go b/go/libraries/doltcore/env/environment.go index 2ac1db881e..3a28c080e5 100644 --- a/go/libraries/doltcore/env/environment.go +++ b/go/libraries/doltcore/env/environment.go @@ -1129,63 +1129,6 @@ func (dEnv *DoltEnv) TempTableFilesDir() (string, error) { return absPath, nil } -// GetGCKeepers returns the hashes of all the objects in the environment provided that should be preserved during GC. -// TODO: this should be unnecessary since we now store the working set in a noms dataset, remove it -func GetGCKeepers(ctx context.Context, env *DoltEnv) ([]hash.Hash, error) { - workingRoot, err := env.WorkingRoot(ctx) - if err != nil { - return nil, err - } - - workingHash, err := workingRoot.HashOf() - if err != nil { - return nil, err - } - - stagedRoot, err := env.StagedRoot(ctx) - if err != nil { - return nil, err - } - - stagedHash, err := stagedRoot.HashOf() - if err != nil { - return nil, err - } - - keepers := []hash.Hash{ - workingHash, - stagedHash, - } - - mergeActive, err := env.IsMergeActive(ctx) - if err != nil { - return nil, err - } - - if mergeActive { - ws, err := env.WorkingSet(ctx) - if err != nil { - return nil, err - } - - cm := ws.MergeState().Commit() - ch, err := cm.HashOf() - if err != nil { - return nil, err - } - - pmw := ws.MergeState().PreMergeWorkingRoot() - pmwh, err := pmw.HashOf() - if err != nil { - return nil, err - } - - keepers = append(keepers, ch, pmwh) - } - - return keepers, nil -} - func (dEnv *DoltEnv) DbEaFactory() editor.DbEaFactory { tmpDir, err := dEnv.TempTableFilesDir() if err != nil { diff --git a/integration-tests/bats/log.bats b/integration-tests/bats/log.bats index 6c9120b493..a426a08762 100755 --- a/integration-tests/bats/log.bats +++ b/integration-tests/bats/log.bats @@ -626,4 +626,9 @@ teardown() { run expect $BATS_TEST_DIRNAME/log.expect [ "$status" -eq 0 ] -} \ No newline at end of file +} + +@test "log: string formatting characters are escaped" { + run dolt commit --allow-empty -m "% should be escaped" + [[ "$output" =~ "% should be escaped" ]] || false +}