75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package commits
|
|
|
|
import (
|
|
"encoding/hex"
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
|
|
"github.com/tendermint/light-client/certifiers"
|
|
"github.com/tendermint/light-client/certifiers/files"
|
|
|
|
"github.com/cosmos/cosmos-sdk/client/commands"
|
|
)
|
|
|
|
const (
|
|
heightFlag = "height"
|
|
hashFlag = "hash"
|
|
fileFlag = "file"
|
|
)
|
|
|
|
var showCmd = &cobra.Command{
|
|
Use: "show",
|
|
Short: "Show the details of one selected commit",
|
|
Long: `Shows the most recent downloaded key by default.
|
|
If desired, you can select by height, validator hash, or a file.
|
|
`,
|
|
RunE: commands.RequireInit(showCommit),
|
|
SilenceUsage: true,
|
|
}
|
|
|
|
func init() {
|
|
showCmd.Flags().Int(heightFlag, 0, "Show the commit with closest height to this")
|
|
showCmd.Flags().String(hashFlag, "", "Show the commit matching the validator hash")
|
|
showCmd.Flags().String(fileFlag, "", "Show the commit stored in the given file")
|
|
RootCmd.AddCommand(showCmd)
|
|
}
|
|
|
|
func loadCommit(p certifiers.Provider, h int, hash, file string) (fc certifiers.FullCommit, err error) {
|
|
// load the commit from the proper place
|
|
if h != 0 {
|
|
fc, err = p.GetByHeight(h)
|
|
} else if hash != "" {
|
|
var vhash []byte
|
|
vhash, err = hex.DecodeString(hash)
|
|
if err == nil {
|
|
fc, err = p.GetByHash(vhash)
|
|
}
|
|
} else if file != "" {
|
|
fc, err = files.LoadFullCommitJSON(file)
|
|
} else {
|
|
// default is latest commit
|
|
fc, err = p.LatestCommit()
|
|
}
|
|
return
|
|
}
|
|
|
|
func showCommit(cmd *cobra.Command, args []string) error {
|
|
trust, _ := commands.GetProviders()
|
|
|
|
h := viper.GetInt(heightFlag)
|
|
hash := viper.GetString(hashFlag)
|
|
file := viper.GetString(fileFlag)
|
|
fc, err := loadCommit(trust, h, hash, file)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// now render it!
|
|
data, err := json.MarshalIndent(fc, "", " ")
|
|
fmt.Println(string(data))
|
|
return err
|
|
}
|