mirror of
				https://gitea.com/gitea/tea.git
				synced 2025-10-31 09:15:26 +01:00 
			
		
		
		
	tea branches list/protect/unprotect (#645)
Hello, This is a proposal to support consulting / protecting / unprotecting branches for a specific repository. I copied the existing code for "issues" report and adapted to branches. There is no change of legacy code so I do not expect any impact. Supported commands are "list", "protect", "unprotect": - "List" print the list of branches with some available fields from gitea.Branch type. - "protect" creates a gitea.BranchProtection with some default parameters for some specific branches - "unprotect" destroys gitea.BranchProtection for some specific branches What is printed now could be enriched with additional information gitea datatypes already offer. Could you please evaluate this proposal? I would be happy to receive any comment or remark to take into account. **tea branches unprotect** --login opsi --repo opensky main **tea branches list** --login opsi --repo opensky --fields name,protected,user-can-merge,user-can-push,protection [name protected user-can-merge user-can-push protection] +--------+-----------+----------------+---------------+------------+ | NAME | PROTECTED | USER-CAN-MERGE | USER-CAN-PUSH | PROTECTION | +--------+-----------+----------------+---------------+------------+ | b_test | false | true | true | <None> | | main | false | true | true | <None> | +--------+-----------+----------------+---------------+------------+ **tea branches protect** --login opsi --repo opensky main **tea branches list** --login opsi --repo opensky --fields name,protected,user-can-merge,user-can-push,protection [name protected user-can-merge user-can-push protection] +--------+-----------+----------------+---------------+----------------------+ | NAME | PROTECTED | USER-CAN-MERGE | USER-CAN-PUSH | PROTECTION | +--------+-----------+----------------+---------------+----------------------+ | b_test | false | true | true | <None> | | main | true | true | false | - enable-push: false | | | | | | - approving: - | | | | | | merging: - pushing: | | | | | | | +--------+-----------+----------------+---------------+----------------------+ Following commands run OK: > make test > make fmt > make lint Co-authored-by: Leonard Vimond <leonard.vimond.e@thalesdigital.io> Co-authored-by: techknowlogick <techknowlogick@noreply.gitea.com> Reviewed-on: https://gitea.com/gitea/tea/pulls/645 Reviewed-by: techknowlogick <techknowlogick@noreply.gitea.com> Co-authored-by: leonard.vimond <leonard.vimond@noreply.gitea.com> Co-committed-by: leonard.vimond <leonard.vimond@noreply.gitea.com>
This commit is contained in:
		 leonard.vimond
					leonard.vimond
				
			
				
					committed by
					
						 techknowlogick
						techknowlogick
					
				
			
			
				
	
			
			
			 techknowlogick
						techknowlogick
					
				
			
						parent
						
							22370698bf
						
					
				
				
					commit
					20479663f0
				
			
							
								
								
									
										101
									
								
								cmd/branches/protect.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								cmd/branches/protect.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | ||||
| // Copyright 2024 The Gitea Authors. All rights reserved. | ||||
| // SPDX-License-Identifier: MIT | ||||
|  | ||||
| package branches | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
|  | ||||
| 	"code.gitea.io/tea/cmd/flags" | ||||
| 	"code.gitea.io/tea/modules/context" | ||||
|  | ||||
| 	"code.gitea.io/sdk/gitea" | ||||
| 	"github.com/urfave/cli/v2" | ||||
| ) | ||||
|  | ||||
| // CmdBranchesProtectFlags Flags for command protect/unprotect | ||||
| var CmdBranchesProtectFlags = append([]cli.Flag{ | ||||
| 	branchFieldsFlag, | ||||
| 	&flags.PaginationPageFlag, | ||||
| 	&flags.PaginationLimitFlag, | ||||
| }, flags.AllDefaultFlags...) | ||||
|  | ||||
| // CmdBranchesProtect represents a sub command of branches to protect a branch | ||||
| var CmdBranchesProtect = cli.Command{ | ||||
| 	Name:        "protect", | ||||
| 	Aliases:     []string{"P"}, | ||||
| 	Usage:       "Protect branches", | ||||
| 	Description: `Block actions push/merge on specified branches`, | ||||
| 	ArgsUsage:   "<branch>", | ||||
| 	Action:      RunBranchesProtect, | ||||
| 	Flags:       CmdBranchesProtectFlags, | ||||
| } | ||||
|  | ||||
| // CmdBranchesUnprotect represents a sub command of branches to protect a branch | ||||
| var CmdBranchesUnprotect = cli.Command{ | ||||
| 	Name:        "unprotect", | ||||
| 	Aliases:     []string{"U"}, | ||||
| 	Usage:       "Unprotect branches", | ||||
| 	Description: `Suppress existing protections on specified branches`, | ||||
| 	ArgsUsage:   "<branch>", | ||||
| 	Action:      RunBranchesProtect, | ||||
| 	Flags:       CmdBranchesProtectFlags, | ||||
| } | ||||
|  | ||||
| // RunBranchesProtect function to protect/unprotect a list of branches | ||||
| func RunBranchesProtect(cmd *cli.Context) error { | ||||
| 	ctx := context.InitCommand(cmd) | ||||
| 	ctx.Ensure(context.CtxRequirement{RemoteRepo: true}) | ||||
|  | ||||
| 	if !cmd.Args().Present() { | ||||
| 		return fmt.Errorf("must specify at least one branch") | ||||
| 	} | ||||
|  | ||||
| 	owner := ctx.Owner | ||||
| 	if ctx.IsSet("owner") { | ||||
| 		owner = ctx.String("owner") | ||||
| 	} | ||||
|  | ||||
| 	for _, branch := range ctx.Args().Slice() { | ||||
|  | ||||
| 		var err error | ||||
| 		command := ctx.Command.Name | ||||
| 		if command == "protect" { | ||||
| 			_, _, err = ctx.Login.Client().CreateBranchProtection(owner, ctx.Repo, gitea.CreateBranchProtectionOption{ | ||||
| 				BranchName:                    branch, | ||||
| 				RuleName:                      "", | ||||
| 				EnablePush:                    false, | ||||
| 				EnablePushWhitelist:           false, | ||||
| 				PushWhitelistUsernames:        []string{}, | ||||
| 				PushWhitelistTeams:            []string{}, | ||||
| 				PushWhitelistDeployKeys:       false, | ||||
| 				EnableMergeWhitelist:          false, | ||||
| 				MergeWhitelistUsernames:       []string{}, | ||||
| 				MergeWhitelistTeams:           []string{}, | ||||
| 				EnableStatusCheck:             false, | ||||
| 				StatusCheckContexts:           []string{}, | ||||
| 				RequiredApprovals:             1, | ||||
| 				EnableApprovalsWhitelist:      false, | ||||
| 				ApprovalsWhitelistUsernames:   []string{}, | ||||
| 				ApprovalsWhitelistTeams:       []string{}, | ||||
| 				BlockOnRejectedReviews:        false, | ||||
| 				BlockOnOfficialReviewRequests: false, | ||||
| 				BlockOnOutdatedBranch:         false, | ||||
| 				DismissStaleApprovals:         false, | ||||
| 				RequireSignedCommits:          false, | ||||
| 				ProtectedFilePatterns:         "", | ||||
| 				UnprotectedFilePatterns:       "", | ||||
| 			}) | ||||
| 		} else if command == "unprotect" { | ||||
| 			_, err = ctx.Login.Client().DeleteBranchProtection(owner, ctx.Repo, branch) | ||||
| 		} else { | ||||
| 			return fmt.Errorf("command %s is not supported", command) | ||||
| 		} | ||||
|  | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
		Reference in New Issue
	
	Block a user