aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--modules/context/repo.go3
-rw-r--r--routers/repo/http.go19
2 files changed, 20 insertions, 2 deletions
diff --git a/modules/context/repo.go b/modules/context/repo.go
index 4670e01564..770296b390 100644
--- a/modules/context/repo.go
+++ b/modules/context/repo.go
@@ -223,6 +223,9 @@ func RedirectToRepo(ctx *Context, redirectRepoID int64) {
fmt.Sprintf("%s/%s", repo.MustOwnerName(), repo.Name),
1,
)
+ if ctx.Req.URL.RawQuery != "" {
+ redirectPath += "?" + ctx.Req.URL.RawQuery
+ }
ctx.Redirect(redirectPath)
}
diff --git a/routers/repo/http.go b/routers/repo/http.go
index 9475c25893..2bc50efd83 100644
--- a/routers/repo/http.go
+++ b/routers/repo/http.go
@@ -89,9 +89,24 @@ func HTTP(ctx *context.Context) {
reponame = reponame[:len(reponame)-5]
}
- repo, err := models.GetRepositoryByOwnerAndName(username, reponame)
+ owner, err := models.GetUserByName(username)
if err != nil {
- ctx.NotFoundOrServerError("GetRepositoryByOwnerAndName", models.IsErrRepoNotExist, err)
+ ctx.NotFoundOrServerError("GetUserByName", models.IsErrUserNotExist, err)
+ return
+ }
+
+ repo, err := models.GetRepositoryByName(owner.ID, reponame)
+ if err != nil {
+ if models.IsErrRepoNotExist(err) {
+ redirectRepoID, err := models.LookupRepoRedirect(owner.ID, reponame)
+ if err == nil {
+ context.RedirectToRepo(ctx, redirectRepoID)
+ } else {
+ ctx.NotFoundOrServerError("GetRepositoryByName", models.IsErrRepoRedirectNotExist, err)
+ }
+ } else {
+ ctx.ServerError("GetRepositoryByName", err)
+ }
return
}