mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-29 18:38:28 +00:00 
			
		
		
		
	Fix pull request availability check
This commit is contained in:
		| @@ -3,7 +3,7 @@ Gogs - Go Git Service [ | ||||
|  | ||||
| ##### Current version: 0.9.0 | ||||
| ##### Current version: 0.9.1 | ||||
|  | ||||
| | Web | UI  | Preview  | | ||||
| |:-------------:|:-------:|:-------:| | ||||
|   | ||||
							
								
								
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							| @@ -17,7 +17,7 @@ import ( | ||||
| 	"github.com/gogits/gogs/modules/setting" | ||||
| ) | ||||
|  | ||||
| const APP_VER = "0.9.0.0306" | ||||
| const APP_VER = "0.9.1.0306" | ||||
|  | ||||
| func init() { | ||||
| 	runtime.GOMAXPROCS(runtime.NumCPU()) | ||||
|   | ||||
| @@ -27,6 +27,13 @@ import ( | ||||
| 	"github.com/gogits/gogs/modules/setting" | ||||
| ) | ||||
|  | ||||
| type PullRequestContext struct { | ||||
| 	BaseRepo *models.Repository | ||||
| 	Allowed  bool | ||||
| 	SameRepo bool | ||||
| 	HeadInfo string // [<user>:]<branch> | ||||
| } | ||||
|  | ||||
| type RepoContext struct { | ||||
| 	AccessMode   models.AccessMode | ||||
| 	IsWatching   bool | ||||
| @@ -46,6 +53,8 @@ type RepoContext struct { | ||||
| 	CloneLink    models.CloneLink | ||||
| 	CommitsCount int64 | ||||
| 	Mirror       *models.Mirror | ||||
|  | ||||
| 	PullRequest *PullRequestContext | ||||
| } | ||||
|  | ||||
| // Context represents context of a request. | ||||
| @@ -211,7 +220,9 @@ func Contexter() macaron.Handler { | ||||
| 			csrf:    x, | ||||
| 			Flash:   f, | ||||
| 			Session: sess, | ||||
| 			Repo:    &RepoContext{}, | ||||
| 			Repo: &RepoContext{ | ||||
| 				PullRequest: &PullRequestContext{}, | ||||
| 			}, | ||||
| 		} | ||||
| 		// Compute current URL for real-time change language. | ||||
| 		ctx.Data["Link"] = setting.AppSubUrl + strings.TrimSuffix(ctx.Req.URL.Path, "/") | ||||
|   | ||||
| @@ -142,32 +142,6 @@ func RepoAssignment(args ...bool) macaron.Handler { | ||||
| 		ctx.Data["IsRepositoryAdmin"] = ctx.Repo.IsAdmin() | ||||
| 		ctx.Data["IsRepositoryWriter"] = ctx.Repo.IsWriter() | ||||
|  | ||||
| 		if repo.IsFork { | ||||
| 			RetrieveBaseRepo(ctx, repo) | ||||
| 			if ctx.Written() { | ||||
| 				return | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// People who have push access and propose a new pull request. | ||||
| 		if ctx.Repo.IsWriter() { | ||||
| 			// Pull request is allowed if this is a fork repository | ||||
| 			// and base repository accepts pull requests. | ||||
| 			if repo.BaseRepo != nil { | ||||
| 				if repo.BaseRepo.AllowsPulls() { | ||||
| 					ctx.Data["CanPullRequest"] = true | ||||
| 					ctx.Data["BaseRepo"] = repo.BaseRepo | ||||
| 				} | ||||
| 			} else { | ||||
| 				// Or, this is repository accepts pull requests between branches. | ||||
| 				if repo.AllowsPulls() { | ||||
| 					ctx.Data["CanPullRequest"] = true | ||||
| 					ctx.Data["BaseRepo"] = repo | ||||
| 					ctx.Data["IsBetweenBranches"] = true | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		ctx.Data["DisableSSH"] = setting.SSH.Disabled | ||||
| 		ctx.Data["CloneLink"] = repo.CloneLink() | ||||
| 		ctx.Data["WikiCloneLink"] = repo.WikiCloneLink() | ||||
| @@ -209,10 +183,41 @@ func RepoAssignment(args ...bool) macaron.Handler { | ||||
| 				ctx.Repo.BranchName = brs[0] | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		ctx.Data["BranchName"] = ctx.Repo.BranchName | ||||
| 		ctx.Data["CommitID"] = ctx.Repo.CommitID | ||||
|  | ||||
| 		if repo.IsFork { | ||||
| 			RetrieveBaseRepo(ctx, repo) | ||||
| 			if ctx.Written() { | ||||
| 				return | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// People who have push access and propose a new pull request. | ||||
| 		if ctx.Repo.IsWriter() { | ||||
| 			// Pull request is allowed if this is a fork repository | ||||
| 			// and base repository accepts pull requests. | ||||
| 			if repo.BaseRepo != nil { | ||||
| 				if repo.BaseRepo.AllowsPulls() { | ||||
| 					ctx.Data["BaseRepo"] = repo.BaseRepo | ||||
| 					ctx.Repo.PullRequest.BaseRepo = repo.BaseRepo | ||||
| 					ctx.Repo.PullRequest.Allowed = true | ||||
| 					ctx.Repo.PullRequest.HeadInfo = ctx.Repo.Owner.Name + ":" + ctx.Repo.BranchName | ||||
| 				} | ||||
| 			} else { | ||||
| 				// Or, this is repository accepts pull requests between branches. | ||||
| 				if repo.AllowsPulls() { | ||||
| 					ctx.Data["BaseRepo"] = repo | ||||
| 					ctx.Repo.PullRequest.BaseRepo = repo | ||||
| 					ctx.Repo.PullRequest.Allowed = true | ||||
| 					ctx.Repo.PullRequest.SameRepo = true | ||||
| 					ctx.Repo.PullRequest.HeadInfo = ctx.Repo.BranchName | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		fmt.Println(222222, ctx.Repo.PullRequest) | ||||
| 		ctx.Data["PullRequestCtx"] = ctx.Repo.PullRequest | ||||
|  | ||||
| 		if ctx.Query("go-get") == "1" { | ||||
| 			ctx.Data["GoGetImport"] = path.Join(setting.Domain, setting.AppSubUrl, owner.Name, repo.Name) | ||||
| 			prefix := setting.AppUrl + path.Join(owner.Name, repo.Name, "src", ctx.Repo.BranchName) | ||||
|   | ||||
| @@ -55,15 +55,21 @@ var ( | ||||
| func MustEnableIssues(ctx *middleware.Context) { | ||||
| 	if !ctx.Repo.Repository.EnableIssues { | ||||
| 		ctx.Handle(404, "MustEnableIssues", nil) | ||||
| 		return | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func MustAllowPulls(ctx *middleware.Context) { | ||||
| 	if !ctx.Repo.Repository.AllowsPulls() { | ||||
| 		ctx.Handle(404, "MustAllowPulls", nil) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	ctx.Data["HasForkedRepo"] = ctx.IsSigned && ctx.User.HasForkedRepo(ctx.Repo.Repository.ID) | ||||
| 	// User can send pull request if owns a forked repository. | ||||
| 	if ctx.IsSigned && ctx.User.HasForkedRepo(ctx.Repo.Repository.ID) { | ||||
| 		ctx.Repo.PullRequest.Allowed = true | ||||
| 		ctx.Repo.PullRequest.HeadInfo = ctx.User.Name + ":" + ctx.Repo.BranchName | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func RetrieveLabels(ctx *middleware.Context) { | ||||
| @@ -560,14 +566,18 @@ func ViewIssue(ctx *middleware.Context) { | ||||
| 	} | ||||
|  | ||||
| 	if issue.IsPull { | ||||
| 		MustAllowPulls(ctx) | ||||
| 		if ctx.Written() { | ||||
| 			return | ||||
| 		} | ||||
| 		ctx.Data["PageIsPullList"] = true | ||||
|  | ||||
| 		if err = issue.GetPullRequest(); err != nil { | ||||
| 			ctx.Handle(500, "GetPullRequest", err) | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		ctx.Data["PageIsPullList"] = true | ||||
| 		ctx.Data["PageIsPullConversation"] = true | ||||
| 		ctx.Data["HasForkedRepo"] = ctx.IsSigned && ctx.User.HasForkedRepo(ctx.Repo.Repository.ID) | ||||
| 	} else { | ||||
| 		MustEnableIssues(ctx) | ||||
| 		if ctx.Written() { | ||||
|   | ||||
| @@ -462,7 +462,7 @@ func ParseCompareInfo(ctx *middleware.Context) (*models.User, *models.Repository | ||||
| 	} | ||||
| 	ctx.Data["HeadUser"] = headUser | ||||
| 	ctx.Data["HeadBranch"] = headBranch | ||||
| 	ctx.Data["IsBetweenBranches"] = isSameRepo | ||||
| 	ctx.Repo.PullRequest.SameRepo = isSameRepo | ||||
|  | ||||
| 	// Check if base branch is valid. | ||||
| 	if !ctx.Repo.GitRepo.IsBranchExist(baseBranch) { | ||||
|   | ||||
| @@ -1 +1 @@ | ||||
| 0.9.0.0306 | ||||
| 0.9.1.0306 | ||||
| @@ -7,9 +7,9 @@ | ||||
| 			<a class="link" href="{{.Repository.Website}}">{{.Repository.Website}}</a> | ||||
| 		</p> | ||||
| 		<div class="ui secondary menu"> | ||||
| 			{{if .CanPullRequest}} | ||||
| 			{{if .PullRequestCtx.Allowed}} | ||||
| 				<div class="fitted item"> | ||||
| 					<a href="{{.BaseRepo.RepoLink}}/compare/{{.BaseRepo.DefaultBranch}}...{{if not .IsBetweenBranches}}{{$.Owner.Name}}:{{end}}{{$.BranchName}}"> | ||||
| 					<a href="{{.BaseRepo.RepoLink}}/compare/{{.BaseRepo.DefaultBranch}}...{{.PullRequestCtx.HeadInfo}}"> | ||||
| 						<button class="ui green small button"><i class="octicon octicon-git-compare"></i></button> | ||||
| 					</a> | ||||
| 				</div> | ||||
|   | ||||
| @@ -8,7 +8,7 @@ | ||||
| 				{{if .PageIsIssueList}} | ||||
| 					<a class="ui green button" href="{{.RepoLink}}/issues/new">{{.i18n.Tr "repo.issues.new"}}</a> | ||||
| 				{{else}} | ||||
| 					<a class="ui green button {{if not (or .CanPullRequest .HasForkedRepo)}}disabled{{end}}" href="{{.RepoLink}}/compare/{{.Repository.DefaultBranch}}...{{if not (eq .Owner.Name .SignedUserName)}}{{.SignedUserName}}:{{end}}{{.BranchName}}">{{.i18n.Tr "repo.pulls.new"}}</a> | ||||
| 					<a class="ui green button {{if not .PullRequestCtx.Allowed}}disabled{{end}}" href="{{.RepoLink}}/compare/{{.Repository.DefaultBranch}}...{{.PullRequestCtx.HeadInfo}}">{{.i18n.Tr "repo.pulls.new"}}</a> | ||||
| 				{{end}} | ||||
| 			</div> | ||||
| 		</div> | ||||
|   | ||||
| @@ -8,7 +8,7 @@ | ||||
| 				{{if .PageIsIssueList}} | ||||
| 					<a class="ui green button" href="{{.RepoLink}}/issues/new">{{.i18n.Tr "repo.issues.new"}}</a> | ||||
| 				{{else}} | ||||
| 					<a class="ui green button {{if not .HasForkedRepo}}disabled{{end}}" href="{{.RepoLink}}/compare/{{.BranchName}}...{{.SignedUserName}}:{{.BranchName}}">{{.i18n.Tr "repo.pulls.new"}}</a> | ||||
| 					<a class="ui green button {{if not .PullRequestCtx.Allowed}}disabled{{end}}" href="{{.RepoLink}}/compare/{{.BranchName}}...{{.PullRequestCtx.HeadInfo}}">{{.i18n.Tr "repo.pulls.new"}}</a> | ||||
| 				{{end}} | ||||
| 			</div> | ||||
| 		</div> | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| 		<div class="navbar"> | ||||
| 			{{template "repo/issue/navbar" .}} | ||||
| 			<div class="ui right"> | ||||
| 				<a class="ui green button {{if not .HasForkedRepo}}disabled{{end}}" href="{{.RepoLink}}/compare/{{.BranchName}}...{{.SignedUserName}}:{{.BranchName}}">{{.i18n.Tr "repo.pulls.new"}}</a> | ||||
| 				<a class="ui green button {{if not .PullRequestCtx.Allowed}}disabled{{end}}" href="{{.RepoLink}}/compare/{{.BranchName}}...{{.PullRequestCtx.HeadInfo}}">{{.i18n.Tr "repo.pulls.new"}}</a> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 		<div class="ui divider"></div> | ||||
|   | ||||
| @@ -21,7 +21,7 @@ | ||||
| 						</div> | ||||
| 						<div class="scrolling menu"> | ||||
| 							{{range .Branches}} | ||||
| 								<div class="item {{if eq $.BaseBranch .}}selected{{end}}" data-url="{{$.RepoLink}}/compare/{{.}}...{{if not $.IsBetweenBranches}}{{$.HeadUser.Name}}:{{end}}{{$.HeadBranch}}">{{.}}</div> | ||||
| 								<div class="item {{if eq $.BaseBranch .}}selected{{end}}" data-url="{{$.RepoLink}}/compare/{{.}}...{{if not $.PullRequestCtx.SameRepo}}{{$.HeadUser.Name}}:{{end}}{{$.HeadBranch}}">{{.}}</div> | ||||
| 							{{end}} | ||||
| 						</div> | ||||
| 					</div> | ||||
| @@ -39,7 +39,7 @@ | ||||
| 						</div> | ||||
| 						<div class="scrolling menu"> | ||||
| 							{{range .HeadBranches}} | ||||
| 								<div class="{{if eq $.HeadBranch .}}selected{{end}} item" data-url="{{$.RepoLink}}/compare/{{$.BaseBranch}}...{{if not $.IsBetweenBranches}}{{$.HeadUser.Name}}:{{end}}{{.}}">{{.}}</div> | ||||
| 								<div class="{{if eq $.HeadBranch .}}selected{{end}} item" data-url="{{$.RepoLink}}/compare/{{$.BaseBranch}}...{{if not $.PullRequestCtx.SameRepo}}{{$.HeadUser.Name}}:{{end}}{{.}}">{{.}}</div> | ||||
| 							{{end}} | ||||
| 						</div> | ||||
| 					</div> | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| 		<div class="navbar"> | ||||
| 			{{template "repo/issue/navbar" .}} | ||||
| 			<div class="ui right"> | ||||
| 				<a class="ui green button {{if not .HasForkedRepo}}disabled{{end}}" href="{{.RepoLink}}/compare/{{.BranchName}}...{{.SignedUserName}}:{{.BranchName}}">{{.i18n.Tr "repo.pulls.new"}}</a> | ||||
| 				<a class="ui green button {{if not .PullRequestCtx.Allowed}}disabled{{end}}" href="{{.RepoLink}}/compare/{{.BranchName}}...{{.PullRequestCtx.HeadInfo}}">{{.i18n.Tr "repo.pulls.new"}}</a> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 		<div class="ui divider"></div> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user