github.com/attic-labs/noms@v0.0.0-20210827224422-e5fa29d95e8b/samples/go/counter/counter.go (about)

     1  // Copyright 2016 Attic Labs, Inc. All rights reserved.
     2  // Licensed under the Apache License, version 2.0:
     3  // http://www.apache.org/licenses/LICENSE-2.0
     4  
     5  package main
     6  
     7  import (
     8  	"fmt"
     9  	"os"
    10  
    11  	"github.com/attic-labs/kingpin"
    12  
    13  	"github.com/attic-labs/noms/go/config"
    14  	"github.com/attic-labs/noms/go/types"
    15  	"github.com/attic-labs/noms/go/util/verbose"
    16  )
    17  
    18  func main() {
    19  	app := kingpin.New("counter", "")
    20  	dsStr := app.Arg("ds", "dataset to count in").Required().String()
    21  	verbose.RegisterVerboseFlags(app)
    22  	kingpin.MustParse(app.Parse(os.Args[1:]))
    23  
    24  	cfg := config.NewResolver()
    25  	db, ds, err := cfg.GetDataset(*dsStr)
    26  	if err != nil {
    27  		fmt.Fprintf(os.Stderr, "Could not create dataset: %s\n", err)
    28  		return
    29  	}
    30  	defer db.Close()
    31  
    32  	newVal := uint64(1)
    33  	if lastVal, ok := ds.MaybeHeadValue(); ok {
    34  		newVal = uint64(lastVal.(types.Number)) + 1
    35  	}
    36  
    37  	_, err = db.CommitValue(ds, types.Number(newVal))
    38  	if err != nil {
    39  		fmt.Fprintf(os.Stderr, "Error committing: %s\n", err)
    40  		return
    41  	}
    42  
    43  	fmt.Println(newVal)
    44  }