@@ -9,57 +9,63 @@ import (
9
9
"log"
10
10
"os"
11
11
"path/filepath"
12
- "strconv"
13
- "time"
14
12
13
+ clidocstool "github.com/docker/cli-docs-tool"
14
+ "github.com/docker/cli/cli"
15
15
"github.com/docker/cli/cli/command"
16
16
"github.com/docker/cli/cli/command/commands"
17
17
"github.com/spf13/cobra"
18
18
"github.com/spf13/cobra/doc"
19
19
"github.com/spf13/pflag"
20
20
)
21
21
22
- const descriptionSourcePath = "man/src/"
22
+ const defaultSourcePath = "man/src/"
23
23
24
- func generateManPages (opts * options ) error {
24
+ type options struct {
25
+ source string
26
+ target string
27
+ }
28
+
29
+ func gen (opts * options ) error {
25
30
log .SetFlags (0 )
26
31
27
- header := & doc.GenManHeader {
28
- Title : "DOCKER" ,
29
- Section : "1" ,
30
- Source : "Docker Community" ,
31
- Manual : "Docker User Manuals" ,
32
+ dockerCLI , err := command .NewDockerCli ()
33
+ if err != nil {
34
+ return err
32
35
}
33
-
34
- // If SOURCE_DATE_EPOCH is set, in order to allow reproducible package
35
- // builds, we explicitly set the build time to SOURCE_DATE_EPOCH.
36
- if epoch := os .Getenv ("SOURCE_DATE_EPOCH" ); epoch != "" {
37
- unixEpoch , err := strconv .ParseInt (epoch , 10 , 64 )
38
- if err != nil {
39
- return fmt .Errorf ("invalid SOURCE_DATE_EPOCH: %v" , err )
40
- }
41
- now := time .Unix (unixEpoch , 0 )
42
- header .Date = & now
36
+ cmd := & cobra.Command {
37
+ Use : "docker [OPTIONS] COMMAND [ARG...]" ,
38
+ Short : "The base command for the Docker CLI." ,
43
39
}
44
40
45
- dockerCli , err := command . NewDockerCli ( )
46
- if err != nil {
41
+ clientOpts , _ := cli . SetupRootCommand ( cmd )
42
+ if err := dockerCLI . Initialize ( clientOpts ); err != nil {
47
43
return err
48
44
}
49
- cmd := & cobra.Command {Use : "docker" }
50
- commands .AddCommands (cmd , dockerCli )
51
- source := filepath .Join (opts .source , descriptionSourcePath )
52
- if err := loadLongDescription (cmd , source ); err != nil {
45
+ commands .AddCommands (cmd , dockerCLI )
46
+ // TODO(thaJeztah): cli-docs-tool should already be able to do this, but assumes source-files are not in subdirectories (it looks for `src/docker_command_subcommand.md`)
47
+ if err := loadLongDescription (cmd , opts .source ); err != nil {
53
48
return err
54
49
}
55
50
56
- cmd .DisableAutoGenTag = true
57
- cmd .DisableFlagsInUseLine = true
58
- return doc .GenManTreeFromOpts (cmd , doc.GenManTreeOptions {
59
- Header : header ,
60
- Path : opts .target ,
61
- CommandSeparator : "-" ,
51
+ c , err := clidocstool .New (clidocstool.Options {
52
+ Root : cmd ,
53
+ SourceDir : opts .source ,
54
+ TargetDir : opts .target ,
55
+ ManHeader : & doc.GenManHeader {
56
+ Title : "DOCKER" ,
57
+ Section : "1" ,
58
+ Source : "Docker Community" ,
59
+ Manual : "Docker User Manuals" ,
60
+ },
61
+ Plugin : false ,
62
62
})
63
+ if err != nil {
64
+ return err
65
+ }
66
+ fmt .Println ("Manpage source folder:" , opts .source )
67
+ fmt .Println ("Generating man pages into" , opts .target )
68
+ return c .GenManTree (cmd )
63
69
}
64
70
65
71
func loadLongDescription (parentCommand * cobra.Command , path string ) error {
@@ -98,34 +104,24 @@ func loadLongDescription(parentCommand *cobra.Command, path string) error {
98
104
return err
99
105
}
100
106
cmd .Example = string (content )
101
-
102
107
}
103
108
return nil
104
109
}
105
110
106
- type options struct {
107
- source string
108
- target string
109
- }
110
-
111
- func parseArgs () (* options , error ) {
111
+ func run () error {
112
112
opts := & options {}
113
- cwd , _ := os .Getwd ()
114
113
flags := pflag .NewFlagSet (os .Args [0 ], pflag .ContinueOnError )
115
- flags .StringVar (& opts .source , "root " , cwd , "Path to project root " )
114
+ flags .StringVar (& opts .source , "source " , defaultSourcePath , "Manpage source folder " )
116
115
flags .StringVar (& opts .target , "target" , "/tmp" , "Target path for generated man pages" )
117
- err := flags .Parse (os .Args [1 :])
118
- return opts , err
116
+ if err := flags .Parse (os .Args [1 :]); err != nil {
117
+ return err
118
+ }
119
+ return gen (opts )
119
120
}
120
121
121
122
func main () {
122
- opts , err := parseArgs ()
123
- if err != nil {
124
- fmt .Fprintln (os .Stderr , err .Error ())
125
- }
126
- fmt .Printf ("Project root: %s\n " , opts .source )
127
- fmt .Printf ("Generating man pages into %s\n " , opts .target )
128
- if err := generateManPages (opts ); err != nil {
129
- fmt .Fprintf (os .Stderr , "Failed to generate man pages: %s\n " , err .Error ())
123
+ if err := run (); err != nil {
124
+ log .Printf ("ERROR: %+v" , err )
125
+ os .Exit (1 )
130
126
}
131
127
}
0 commit comments