github.com/attic-labs/noms@v0.0.0-20210827224422-e5fa29d95e8b/cmd/noms/noms.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 "math/rand" 10 "os" 11 "strings" 12 "time" 13 14 "github.com/attic-labs/kingpin" 15 16 "github.com/attic-labs/noms/cmd/noms/splore" 17 "github.com/attic-labs/noms/cmd/util" 18 "github.com/attic-labs/noms/go/util/profile" 19 "github.com/attic-labs/noms/go/util/verbose" 20 ) 21 22 var kingpinCommands = []util.KingpinCommand{ 23 nomsBlob, 24 nomsCommit, 25 nomsConfig, 26 nomsDiff, 27 nomsDs, 28 nomsList, 29 nomsLog, 30 nomsMerge, 31 nomsJSON, 32 nomsMap, 33 nomsRoot, 34 nomsServe, 35 nomsSet, 36 nomsShow, 37 nomsStats, 38 nomsStruct, 39 nomsSync, 40 splore.Cmd, 41 nomsVersion, 42 } 43 44 var actions = []string{ 45 "interacting with", 46 "poking at", 47 "goofing with", 48 "dancing with", 49 "playing with", 50 "contemplation of", 51 "showing off", 52 "jiggerypokery of", 53 "singing to", 54 "nomming on", 55 } 56 57 func usageString() string { 58 i := rand.New(rand.NewSource(time.Now().UnixNano())).Intn(len(actions)) 59 return fmt.Sprintf(`Noms is a tool for %s Noms data.`, actions[i]) 60 } 61 62 func main() { 63 // allow short (-h) help 64 kingpin.EnableFileExpansion = false 65 kingpin.CommandLine.HelpFlag.Short('h') 66 noms := kingpin.New("noms", usageString()) 67 68 // global flags 69 profile.RegisterProfileFlags(noms) 70 verbose.RegisterVerboseFlags(noms) 71 72 handlers := map[string]util.KingpinHandler{} 73 74 // install kingpin handlers 75 for _, cmdFunction := range kingpinCommands { 76 command, handler := cmdFunction(noms) 77 handlers[command.FullCommand()] = handler 78 } 79 80 input := kingpin.MustParse(noms.Parse(os.Args[1:])) 81 82 if handler := handlers[strings.Split(input, " ")[0]]; handler != nil { 83 handler(input) 84 } 85 }