mirror of
https://github.com/dolthub/dolt.git
synced 2026-03-01 18:19:12 -06:00
[no-release-notes] go/store/cmd/noms: Change root to use config.(*Resolver).GetDatabase.
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user