mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 02:46:04 +01:00 
			
		
		
		
	Migrate to urfave v3 (#34510)
migrate cli to urfave v3 add more cli tests --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		| @@ -16,87 +16,95 @@ import ( | ||||
| 	"code.gitea.io/gitea/modules/optional" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
|  | ||||
| 	"github.com/urfave/cli/v2" | ||||
| 	"github.com/urfave/cli/v3" | ||||
| ) | ||||
|  | ||||
| var microcmdUserCreate = &cli.Command{ | ||||
| 	Name:   "create", | ||||
| 	Usage:  "Create a new user in database", | ||||
| 	Action: runCreateUser, | ||||
| 	Flags: []cli.Flag{ | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:  "name", | ||||
| 			Usage: "Username. DEPRECATED: use username instead", | ||||
| func microcmdUserCreate() *cli.Command { | ||||
| 	return &cli.Command{ | ||||
| 		Name:   "create", | ||||
| 		Usage:  "Create a new user in database", | ||||
| 		Action: runCreateUser, | ||||
| 		MutuallyExclusiveFlags: []cli.MutuallyExclusiveFlags{ | ||||
| 			{ | ||||
| 				Flags: [][]cli.Flag{ | ||||
| 					{ | ||||
| 						&cli.StringFlag{ | ||||
| 							Name:  "name", | ||||
| 							Usage: "Username. DEPRECATED: use username instead", | ||||
| 						}, | ||||
| 						&cli.StringFlag{ | ||||
| 							Name:  "username", | ||||
| 							Usage: "Username", | ||||
| 						}, | ||||
| 					}, | ||||
| 				}, | ||||
| 				Required: true, | ||||
| 			}, | ||||
| 		}, | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:  "username", | ||||
| 			Usage: "Username", | ||||
| 		Flags: []cli.Flag{ | ||||
| 			&cli.StringFlag{ | ||||
| 				Name:  "user-type", | ||||
| 				Usage: "Set user's type: individual or bot", | ||||
| 				Value: "individual", | ||||
| 			}, | ||||
| 			&cli.StringFlag{ | ||||
| 				Name:  "password", | ||||
| 				Usage: "User password", | ||||
| 			}, | ||||
| 			&cli.StringFlag{ | ||||
| 				Name:     "email", | ||||
| 				Usage:    "User email address", | ||||
| 				Required: true, | ||||
| 			}, | ||||
| 			&cli.BoolFlag{ | ||||
| 				Name:  "admin", | ||||
| 				Usage: "User is an admin", | ||||
| 			}, | ||||
| 			&cli.BoolFlag{ | ||||
| 				Name:  "random-password", | ||||
| 				Usage: "Generate a random password for the user", | ||||
| 			}, | ||||
| 			&cli.BoolFlag{ | ||||
| 				Name:        "must-change-password", | ||||
| 				Usage:       "User must change password after initial login, defaults to true for all users except the first one (can be disabled by --must-change-password=false)", | ||||
| 				HideDefault: true, | ||||
| 			}, | ||||
| 			&cli.IntFlag{ | ||||
| 				Name:  "random-password-length", | ||||
| 				Usage: "Length of the random password to be generated", | ||||
| 				Value: 12, | ||||
| 			}, | ||||
| 			&cli.BoolFlag{ | ||||
| 				Name:  "access-token", | ||||
| 				Usage: "Generate access token for the user", | ||||
| 			}, | ||||
| 			&cli.StringFlag{ | ||||
| 				Name:  "access-token-name", | ||||
| 				Usage: `Name of the generated access token`, | ||||
| 				Value: "gitea-admin", | ||||
| 			}, | ||||
| 			&cli.StringFlag{ | ||||
| 				Name:  "access-token-scopes", | ||||
| 				Usage: `Scopes of the generated access token, comma separated. Examples: "all", "public-only,read:issue", "write:repository,write:user"`, | ||||
| 				Value: "all", | ||||
| 			}, | ||||
| 			&cli.BoolFlag{ | ||||
| 				Name:  "restricted", | ||||
| 				Usage: "Make a restricted user account", | ||||
| 			}, | ||||
| 			&cli.StringFlag{ | ||||
| 				Name:  "fullname", | ||||
| 				Usage: `The full, human-readable name of the user`, | ||||
| 			}, | ||||
| 		}, | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:  "user-type", | ||||
| 			Usage: "Set user's type: individual or bot", | ||||
| 			Value: "individual", | ||||
| 		}, | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:  "password", | ||||
| 			Usage: "User password", | ||||
| 		}, | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:  "email", | ||||
| 			Usage: "User email address", | ||||
| 		}, | ||||
| 		&cli.BoolFlag{ | ||||
| 			Name:  "admin", | ||||
| 			Usage: "User is an admin", | ||||
| 		}, | ||||
| 		&cli.BoolFlag{ | ||||
| 			Name:  "random-password", | ||||
| 			Usage: "Generate a random password for the user", | ||||
| 		}, | ||||
| 		&cli.BoolFlag{ | ||||
| 			Name:               "must-change-password", | ||||
| 			Usage:              "User must change password after initial login, defaults to true for all users except the first one (can be disabled by --must-change-password=false)", | ||||
| 			DisableDefaultText: true, | ||||
| 		}, | ||||
| 		&cli.IntFlag{ | ||||
| 			Name:  "random-password-length", | ||||
| 			Usage: "Length of the random password to be generated", | ||||
| 			Value: 12, | ||||
| 		}, | ||||
| 		&cli.BoolFlag{ | ||||
| 			Name:  "access-token", | ||||
| 			Usage: "Generate access token for the user", | ||||
| 		}, | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:  "access-token-name", | ||||
| 			Usage: `Name of the generated access token`, | ||||
| 			Value: "gitea-admin", | ||||
| 		}, | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:  "access-token-scopes", | ||||
| 			Usage: `Scopes of the generated access token, comma separated. Examples: "all", "public-only,read:issue", "write:repository,write:user"`, | ||||
| 			Value: "all", | ||||
| 		}, | ||||
| 		&cli.BoolFlag{ | ||||
| 			Name:  "restricted", | ||||
| 			Usage: "Make a restricted user account", | ||||
| 		}, | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:  "fullname", | ||||
| 			Usage: `The full, human-readable name of the user`, | ||||
| 		}, | ||||
| 	}, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func runCreateUser(c *cli.Context) error { | ||||
| func runCreateUser(ctx context.Context, c *cli.Command) error { | ||||
| 	// this command highly depends on the many setting options (create org, visibility, etc.), so it must have a full setting load first | ||||
| 	// duplicate setting loading should be safe at the moment, but it should be refactored & improved in the future. | ||||
| 	setting.LoadSettings() | ||||
|  | ||||
| 	if err := argsSet(c, "email"); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	userTypes := map[string]user_model.UserType{ | ||||
| 		"individual": user_model.UserTypeIndividual, | ||||
| 		"bot":        user_model.UserTypeBot, | ||||
| @@ -113,12 +121,6 @@ func runCreateUser(c *cli.Context) error { | ||||
| 			return errors.New("password can only be set for individual users") | ||||
| 		} | ||||
| 	} | ||||
| 	if c.IsSet("name") && c.IsSet("username") { | ||||
| 		return errors.New("cannot set both --name and --username flags") | ||||
| 	} | ||||
| 	if !c.IsSet("name") && !c.IsSet("username") { | ||||
| 		return errors.New("one of --name or --username flags must be set") | ||||
| 	} | ||||
|  | ||||
| 	if c.IsSet("password") && c.IsSet("random-password") { | ||||
| 		return errors.New("cannot set both -random-password and -password flags") | ||||
| @@ -129,16 +131,12 @@ func runCreateUser(c *cli.Context) error { | ||||
| 		username = c.String("username") | ||||
| 	} else { | ||||
| 		username = c.String("name") | ||||
| 		_, _ = fmt.Fprintf(c.App.ErrWriter, "--name flag is deprecated. Use --username instead.\n") | ||||
| 		_, _ = fmt.Fprintf(c.ErrWriter, "--name flag is deprecated. Use --username instead.\n") | ||||
| 	} | ||||
|  | ||||
| 	ctx := c.Context | ||||
| 	if !setting.IsInTesting { | ||||
| 		// FIXME: need to refactor the "installSignals/initDB" related code later | ||||
| 		// FIXME: need to refactor the "initDB" related code later | ||||
| 		// it doesn't make sense to call it in (almost) every command action function | ||||
| 		var cancel context.CancelFunc | ||||
| 		ctx, cancel = installSignals() | ||||
| 		defer cancel() | ||||
| 		if err := initDB(ctx); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user