aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2017-03-23 20:04:20 -0400
committerUnknwon <u@gogs.io>2017-03-23 20:04:20 -0400
commitfdc7cb565d8e862336fd2415bf1cd9057c8bdd17 (patch)
tree9304417be7cedb1559c4f7f8c2e62bf56694cad7
parenta6dbde4c4631573f06d39a2e8ee148e55504d06e (diff)
repo: fix unable to propose pull request from secondary fork (#4324)
-rw-r--r--gogs.go2
-rw-r--r--models/models.go1
-rw-r--r--models/repo.go21
-rw-r--r--modules/context/repo.go37
-rw-r--r--templates/.VERSION2
5 files changed, 25 insertions, 38 deletions
diff --git a/gogs.go b/gogs.go
index 7066334d..4628ca53 100644
--- a/gogs.go
+++ b/gogs.go
@@ -16,7 +16,7 @@ import (
"github.com/gogits/gogs/modules/setting"
)
-const APP_VER = "0.10.27.0323"
+const APP_VER = "0.10.28.0323"
func init() {
setting.AppVer = APP_VER
diff --git a/models/models.go b/models/models.go
index e946105d..1d0d5740 100644
--- a/models/models.go
+++ b/models/models.go
@@ -194,7 +194,6 @@ func SetEngine() (err error) {
// WARNING: for serv command, MUST remove the output to os.stdout,
// so use log file to instead print to stdout.
sec := setting.Cfg.Section("log.xorm")
- fmt.Println(sec.Key("ROTATE_DAILY").MustBool(true))
logger, err := log.NewFileWriter(path.Join(setting.LogRootPath, "xorm.log"),
log.FileRotationConfig{
Rotate: sec.Key("ROTATE").MustBool(true),
diff --git a/models/repo.go b/models/repo.go
index 925a6f90..0eb79577 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -236,6 +236,18 @@ func (repo *Repository) loadAttributes(e Engine) (err error) {
}
}
+ if repo.IsFork && repo.BaseRepo == nil {
+ repo.BaseRepo, err = getRepositoryByID(e, repo.ForkID)
+ if err != nil {
+ if errors.IsRepoNotExist(err) {
+ repo.IsFork = false
+ repo.ForkID = 0
+ } else {
+ return fmt.Errorf("getRepositoryByID [%d]: %v", repo.ForkID, err)
+ }
+ }
+ }
+
return nil
}
@@ -418,15 +430,6 @@ func (repo *Repository) GetMirror() (err error) {
return err
}
-func (repo *Repository) GetBaseRepo() (err error) {
- if !repo.IsFork {
- return nil
- }
-
- repo.BaseRepo, err = GetRepositoryByID(repo.ForkID)
- return err
-}
-
func (repo *Repository) repoPath(e Engine) string {
return RepoPath(repo.mustOwner(e).Name, repo.Name)
}
diff --git a/modules/context/repo.go b/modules/context/repo.go
index d3475e43..7c20d185 100644
--- a/modules/context/repo.go
+++ b/modules/context/repo.go
@@ -108,22 +108,6 @@ func (r *Repository) PullRequestURL(baseBranch, headBranch string) string {
return fmt.Sprintf("%s/compare/%s...%s:%s", repoLink, baseBranch, r.Owner.Name, headBranch)
}
-func RetrieveBaseRepo(ctx *Context, repo *models.Repository) {
- // Non-fork repository will not return error in this method.
- if err := repo.GetBaseRepo(); err != nil {
- if errors.IsRepoNotExist(err) {
- repo.IsFork = false
- repo.ForkID = 0
- return
- }
- ctx.Handle(500, "GetBaseRepo", err)
- return
- } else if err = repo.BaseRepo.GetOwner(); err != nil {
- ctx.Handle(500, "BaseRepo.GetOwner", err)
- return
- }
-}
-
// composeGoGetImport returns go-get-import meta content.
func composeGoGetImport(owner, repo string) string {
return path.Join(setting.Domain, setting.AppSubUrl, owner, repo)
@@ -410,23 +394,24 @@ func RepoRef() macaron.Handler {
ctx.Data["IsViewTag"] = ctx.Repo.IsViewTag
ctx.Data["IsViewCommit"] = ctx.Repo.IsViewCommit
- if ctx.Repo.Repository.IsFork {
- RetrieveBaseRepo(ctx, ctx.Repo.Repository)
- if ctx.Written() {
- return
- }
- }
-
// People who have push access or have fored repository can propose a new pull request.
if ctx.Repo.IsWriter() || (ctx.IsSigned && ctx.User.HasForkedRepo(ctx.Repo.Repository.ID)) {
// Pull request is allowed if this is a fork repository
// and base repository accepts pull requests.
if ctx.Repo.Repository.BaseRepo != nil {
if ctx.Repo.Repository.BaseRepo.AllowsPulls() {
- ctx.Data["BaseRepo"] = ctx.Repo.Repository.BaseRepo
- ctx.Repo.PullRequest.BaseRepo = ctx.Repo.Repository.BaseRepo
ctx.Repo.PullRequest.Allowed = true
- ctx.Repo.PullRequest.HeadInfo = ctx.Repo.Owner.Name + ":" + ctx.Repo.BranchName
+ // In-repository pull requests has higher priority than cross-repository if user is viewing
+ // base repository and 1) has write access to it 2) has forked it.
+ if ctx.Repo.IsWriter() {
+ ctx.Data["BaseRepo"] = ctx.Repo.Repository.BaseRepo
+ ctx.Repo.PullRequest.BaseRepo = ctx.Repo.Repository.BaseRepo
+ ctx.Repo.PullRequest.HeadInfo = ctx.Repo.Owner.Name + ":" + ctx.Repo.BranchName
+ } else {
+ ctx.Data["BaseRepo"] = ctx.Repo.Repository
+ ctx.Repo.PullRequest.BaseRepo = ctx.Repo.Repository
+ ctx.Repo.PullRequest.HeadInfo = ctx.User.Name + ":" + ctx.Repo.BranchName
+ }
}
} else {
// Or, this is repository accepts pull requests between branches.
diff --git a/templates/.VERSION b/templates/.VERSION
index 66b6c51c..41542a93 100644
--- a/templates/.VERSION
+++ b/templates/.VERSION
@@ -1 +1 @@
-0.10.27.0323 \ No newline at end of file
+0.10.28.0323 \ No newline at end of file