[no-release-notes] go/store/cmd/noms: Change root to use config.(*Resolver).GetDatabase.

This commit is contained in:
Aaron Son
2023-11-27 11:39:56 -08:00
parent e7180e42a5
commit aa24a2f192
2 changed files with 7 additions and 64 deletions

View File

@@ -25,21 +25,20 @@ import (
"context"
"fmt"
"os"
"strings"
flag "github.com/juju/gnuflag"
"github.com/dolthub/dolt/go/store/cmd/noms/util"
"github.com/dolthub/dolt/go/store/config"
"github.com/dolthub/dolt/go/store/d"
"github.com/dolthub/dolt/go/store/hash"
"github.com/dolthub/dolt/go/store/datas"
"github.com/dolthub/dolt/go/store/types"
)
var nomsRoot = &util.Command{
Run: runRoot,
UsageLine: "root <db-spec>",
Short: "Get or set the current root hash of the entire database",
Short: "Get the current root hash of the entire database",
Long: "See Spelling Objects at https://github.com/attic-labs/noms/blob/master/doc/spelling.md for details on the database argument.",
Flags: setupRootFlags,
Nargs: 1,
@@ -49,7 +48,6 @@ var updateRoot = ""
func setupRootFlags() *flag.FlagSet {
flagSet := flag.NewFlagSet("root", flag.ExitOnError)
flagSet.StringVar(&updateRoot, "update", "", "Replaces the entire database with the one with the given hash")
return flagSet
}
@@ -60,70 +58,16 @@ func runRoot(ctx context.Context, args []string) int {
}
cfg := config.NewResolver()
cs, err := cfg.GetChunkStore(ctx, args[0])
db, _, _, err := cfg.GetDatabase(ctx, args[0])
util.CheckErrorNoUsage(err)
defer cs.Close()
currRoot, err := cs.Root(ctx)
defer db.Close()
currRoot, err := datas.ChunkStoreFromDatabase(db).Root(ctx)
if err != nil {
fmt.Fprintln(os.Stderr, "error getting root.", err)
return 1
}
if updateRoot == "" {
fmt.Println(currRoot)
return 0
}
if updateRoot[0] == '#' {
updateRoot = updateRoot[1:]
}
h, ok := hash.MaybeParse(updateRoot)
if !ok {
fmt.Fprintf(os.Stderr, "Invalid hash: %s\n", h.String())
return 1
}
// If BUG 3407 is correct, we might be able to just take cs and make a Database directly from that.
db, vrw, _, err := cfg.GetDatabase(ctx, args[0])
util.CheckErrorNoUsage(err)
defer db.Close()
v, err := vrw.ReadValue(ctx, h)
util.CheckErrorNoUsage(err)
if !validate(ctx, vrw.Format(), v) {
return 1
}
fmt.Println(`WARNING
This operation replaces the entire database with the instance having the given
hash. The old database becomes eligible for GC.
ANYTHING NOT SAVED WILL BE LOST
Continue?`)
var input string
n, err := fmt.Scanln(&input)
util.CheckErrorNoUsage(err)
if n != 1 || strings.ToLower(input) != "y" {
return 0
}
ok, err = cs.Commit(ctx, h, currRoot)
if err != nil {
fmt.Fprintf(os.Stderr, "commit error: %s", err.Error())
return 1
}
if !ok {
fmt.Fprintln(os.Stderr, "Optimistic concurrency failure")
return 1
}
fmt.Printf("Success. Previous root was: %s\n", currRoot)
fmt.Println(currRoot)
return 0
}

View File

@@ -12,8 +12,7 @@ if (! check_exists_command('noms')) {
print "Welcome to the splunk shell for exploring dolt repository storage.\n";
my $manifest = `noms manifest $noms_dir`;
my $root = get_root($manifest);
my $root = `noms root $noms_dir`;
my $message = "Currently examining root.\nUse numeric labels to navigate the tree\n.. to back up a level, / to return to root.\nType quit or exit to exit.\n";