annotate growsync.go @ 5:af840bc25791

impl edit cmd
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 04 Dec 2020 18:27:09 +0900
parents 359eff175bf1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 package growsync
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 import (
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 "context"
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 "flag"
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 "fmt"
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 "io"
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 "log"
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 "github.com/pkg/errors"
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 )
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 const cmdName = "growsync"
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 var (
5
af840bc25791 impl edit cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
16 subCommands = []cmd{&editCmd{}, &pushCmd{}, &rootCmd{}, &versionCmd{}}
0
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 dispatch = make(map[string]cmd, len(subCommands))
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 maxSubcommandName int
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 )
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 func init() {
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 for _, r := range subCommands {
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 n := r.name()
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 l := len(n)
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 if l > maxSubcommandName {
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 maxSubcommandName = l
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 }
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 dispatch[n] = r
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 }
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 }
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 // Run the lectable
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 func Run(ctx context.Context, argv []string, outStream, errStream io.Writer) error {
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 log.SetOutput(errStream)
4
359eff175bf1 add version cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
35 nameAndVer := fmt.Sprintf("%s (v%s)", cmdName, version)
0
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 fs := flag.NewFlagSet(nameAndVer, flag.ContinueOnError)
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 fs.SetOutput(errStream)
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 fs.Usage = func() {
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 fmt.Fprintf(fs.Output(), "Usage of %s:\n", nameAndVer)
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 fs.PrintDefaults()
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 fmt.Fprintf(fs.Output(), "\nCommands:\n")
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 formatCommands(fs.Output())
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 }
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 if err := fs.Parse(argv); err != nil {
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 return err
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 }
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 argv = fs.Args()
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 if len(argv) < 1 {
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 fs.Usage()
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 return errors.New("no subcommand specified")
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 }
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 rnr, ok := dispatch[argv[0]]
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 if !ok {
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 return errors.Errorf("unknown subcommand: %s", argv[0])
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 }
1
76695bcbe426 write cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
57
76695bcbe426 write cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
58 config, err := parseConfig()
76695bcbe426 write cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
59 if err != nil {
76695bcbe426 write cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
60 return err
76695bcbe426 write cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
61 }
76695bcbe426 write cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
62 return rnr.run(context.Background(), argv[1:], config, outStream, errStream)
0
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 }
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 func formatCommands(out io.Writer) {
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 format := fmt.Sprintf(" %%-%ds %%s\n", maxSubcommandName)
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 for _, r := range subCommands {
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 fmt.Fprintf(out, format, r.name(), r.description())
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 }
c0a01cfbf234 init project
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 }