11package main
22
33import (
4- "context"
5- stderrors "errors"
64 "flag"
75 "fmt"
86 "log"
97 "os"
108 "slices"
11- "sort"
12-
13- "github.com/sourcegraph/src-cli/internal/clicompat"
14- "github.com/sourcegraph/src-cli/internal/cmderrors"
15- "github.com/urfave/cli/v3"
16-
17- "github.com/sourcegraph/sourcegraph/lib/errors"
189)
1910
20- var MigratedCommands = map [string ]* cli.Command {
21- "version" : versionCommandv2 ,
22- }
23-
2411// command is a subcommand handler and its flag set.
2512type command struct {
2613 // flagSet is the flag set for the command.
@@ -80,9 +67,9 @@ func (c commander) run(flagSet *flag.FlagSet, cmdName, usageText string, args []
8067 // Find the subcommand to execute.
8168 name := flagSet .Arg (0 )
8269
70+ // Command is legacy, so lets execute the old way
8371 for _ , cmd := range c {
84- _ , isMigratedCmd := MigratedCommands [name ]
85- if ! isMigratedCmd && ! cmd .matches (name ) {
72+ if ! cmd .matches (name ) {
8673 continue
8774 }
8875 // Read global configuration now.
@@ -92,13 +79,7 @@ func (c commander) run(flagSet *flag.FlagSet, cmdName, usageText string, args []
9279 log .Fatal ("reading config: " , err )
9380 }
9481
95- var exitCode int
96-
97- if isMigratedCmd {
98- exitCode , err = runMigrated (flagSet )
99- } else {
100- exitCode , err = runLegacy (cmd , flagSet )
101- }
82+ exitCode , err := runLegacy (cmd , flagSet )
10283 if err != nil {
10384 log .Fatal (err )
10485 }
@@ -108,69 +89,3 @@ func (c commander) run(flagSet *flag.FlagSet, cmdName, usageText string, args []
10889 log .Printf ("%s: unknown subcommand %q" , cmdName , name )
10990 log .Fatalf ("Run '%s help' for usage." , cmdName )
11091}
111-
112- // migratedRootCommand constructs a root 'src' command and adds
113- // MigratedCommands as subcommands to it
114- func migratedRootCommand () * cli.Command {
115- names := make ([]string , 0 , len (MigratedCommands ))
116- for name := range MigratedCommands {
117- names = append (names , name )
118- }
119- sort .Strings (names )
120-
121- commands := make ([]* cli.Command , 0 , len (names ))
122- for _ , name := range names {
123- commands = append (commands , MigratedCommands [name ])
124- }
125-
126- return clicompat .WrapRoot (& cli.Command {
127- Name : "src" ,
128- HideVersion : true ,
129- Commands : commands ,
130- })
131- }
132-
133- // runMigrated runs the command within urfave/cli framework
134- func runMigrated (flagSet * flag.FlagSet ) (int , error ) {
135- ctx := context .Background ()
136- args := append ([]string {"src" }, flagSet .Args ()... )
137-
138- err := migratedRootCommand ().Run (ctx , args )
139- if _ , ok := stderrors.AsType [* cmderrors.UsageError ](err ); ok {
140- return 2 , nil
141- }
142- var exitErr cli.ExitCoder
143- if errors .AsInterface (err , & exitErr ) {
144- return exitErr .ExitCode (), err
145- }
146- return 0 , err
147- }
148-
149- // runLegacy runs the command using the original commander framework
150- func runLegacy (cmd * command , flagSet * flag.FlagSet ) (int , error ) {
151- // Parse subcommand flags.
152- args := flagSet .Args ()[1 :]
153- if err := cmd .flagSet .Parse (args ); err != nil {
154- fmt .Printf ("Error parsing subcommand flags: %s\n " , err )
155- panic (fmt .Sprintf ("all registered commands should use flag.ExitOnError: error: %s" , err ))
156- }
157-
158- // Execute the subcommand.
159- if err := cmd .handler (flagSet .Args ()[1 :]); err != nil {
160- if _ , ok := err .(* cmderrors.UsageError ); ok {
161- log .Printf ("error: %s\n \n " , err )
162- cmd .flagSet .SetOutput (os .Stderr )
163- flag .CommandLine .SetOutput (os .Stderr )
164- cmd .flagSet .Usage ()
165- return 2 , nil
166- }
167- if e , ok := err .(* cmderrors.ExitCodeError ); ok {
168- if e .HasError () {
169- log .Println (e )
170- }
171- return e .Code (), nil
172- }
173- return 1 , err
174- }
175- return 0 , nil
176- }
0 commit comments