mirror of
				https://gitea.com/gitea/tea.git
				synced 2025-10-31 01:05:26 +01:00 
			
		
		
		
	Add tea repo create-from-template (#408)
				
					
				
			I went with a new subcommand instead of `tea repo create --template`, as the options are quite different (bool instead of values, partially different set) fixes #362 Co-authored-by: Norwin <git@nroo.de> Reviewed-on: https://gitea.com/gitea/tea/pulls/408 Reviewed-by: Andrew Thornton <art27@cantab.net> Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: Norwin <noerw@noreply.gitea.io> Co-committed-by: Norwin <noerw@noreply.gitea.io>
This commit is contained in:
		
							
								
								
									
										121
									
								
								cmd/repos/create_from_template.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								cmd/repos/create_from_template.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,121 @@ | ||||
| // Copyright 2021 The Gitea Authors. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package repos | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
|  | ||||
| 	"code.gitea.io/tea/cmd/flags" | ||||
| 	"code.gitea.io/tea/modules/context" | ||||
| 	"code.gitea.io/tea/modules/print" | ||||
| 	"code.gitea.io/tea/modules/utils" | ||||
|  | ||||
| 	"code.gitea.io/sdk/gitea" | ||||
| 	"github.com/urfave/cli/v2" | ||||
| ) | ||||
|  | ||||
| // CmdRepoCreateFromTemplate represents a sub command of repos to generate one from a template repo | ||||
| var CmdRepoCreateFromTemplate = cli.Command{ | ||||
| 	Name:        "create-from-template", | ||||
| 	Aliases:     []string{"ct"}, | ||||
| 	Usage:       "Create a repository based on an existing template", | ||||
| 	Description: "Create a repository based on an existing template", | ||||
| 	Action:      runRepoCreateFromTemplate, | ||||
| 	Flags: append([]cli.Flag{ | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:     "template", | ||||
| 			Aliases:  []string{"t"}, | ||||
| 			Required: true, | ||||
| 			Usage:    "source template to copy from", | ||||
| 		}, | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:     "name", | ||||
| 			Aliases:  []string{"n"}, | ||||
| 			Required: true, | ||||
| 			Usage:    "name of new repo", | ||||
| 		}, | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:    "owner", | ||||
| 			Aliases: []string{"O"}, | ||||
| 			Usage:   "name of repo owner", | ||||
| 		}, | ||||
| 		&cli.BoolFlag{ | ||||
| 			Name:  "private", | ||||
| 			Usage: "make new repo private", | ||||
| 		}, | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:    "description", | ||||
| 			Aliases: []string{"desc"}, | ||||
| 			Usage:   "add custom description to repo", | ||||
| 		}, | ||||
| 		&cli.BoolFlag{ | ||||
| 			Name:  "content", | ||||
| 			Value: true, | ||||
| 			Usage: "copy git content from template", | ||||
| 		}, | ||||
| 		&cli.BoolFlag{ | ||||
| 			Name:  "githooks", | ||||
| 			Value: true, | ||||
| 			Usage: "copy git hooks from template", | ||||
| 		}, | ||||
| 		&cli.BoolFlag{ | ||||
| 			Name:  "avatar", | ||||
| 			Value: true, | ||||
| 			Usage: "copy repo avatar from template", | ||||
| 		}, | ||||
| 		&cli.BoolFlag{ | ||||
| 			Name:  "labels", | ||||
| 			Value: true, | ||||
| 			Usage: "copy repo labels from template", | ||||
| 		}, | ||||
| 		&cli.BoolFlag{ | ||||
| 			Name:  "topics", | ||||
| 			Value: true, | ||||
| 			Usage: "copy topics from template", | ||||
| 		}, | ||||
| 		&cli.BoolFlag{ | ||||
| 			Name:  "webhooks", | ||||
| 			Usage: "copy webhooks from template", | ||||
| 		}, | ||||
| 	}, flags.LoginOutputFlags...), | ||||
| } | ||||
|  | ||||
| func runRepoCreateFromTemplate(cmd *cli.Context) error { | ||||
| 	ctx := context.InitCommand(cmd) | ||||
| 	client := ctx.Login.Client() | ||||
|  | ||||
| 	templateOwner, templateRepo := utils.GetOwnerAndRepo(ctx.String("template"), ctx.Login.User) | ||||
| 	owner := ctx.Login.User | ||||
| 	if ctx.IsSet("owner") { | ||||
| 		owner = ctx.String("owner") | ||||
| 	} | ||||
|  | ||||
| 	opts := gitea.CreateRepoFromTemplateOption{ | ||||
| 		Name:        ctx.String("name"), | ||||
| 		Owner:       owner, | ||||
| 		Description: ctx.String("description"), | ||||
| 		Private:     ctx.Bool("private"), | ||||
| 		GitContent:  ctx.Bool("content"), | ||||
| 		GitHooks:    ctx.Bool("githooks"), | ||||
| 		Avatar:      ctx.Bool("avatar"), | ||||
| 		Labels:      ctx.Bool("labels"), | ||||
| 		Topics:      ctx.Bool("topics"), | ||||
| 		Webhooks:    ctx.Bool("webhooks"), | ||||
| 	} | ||||
|  | ||||
| 	repo, _, err := client.CreateRepoFromTemplate(templateOwner, templateRepo, opts) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	topics, _, err := client.ListRepoTopics(repo.Owner.UserName, repo.Name, gitea.ListRepoTopicsOptions{}) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	print.RepoDetails(repo, topics) | ||||
|  | ||||
| 	fmt.Printf("%s\n", repo.HTMLURL) | ||||
| 	return nil | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Norwin
					Norwin