Explorar el Código

Handle redirects in git clone commands (#6688)

Add support for repo_redirect objects in the git smart http
handler so that when a user clones a repo that has been moved
or renamed, they are redirected to the new location.

This requires that the query string be included in the redirect
as well, so that is added.

Signed-off-by: James E. Blair <jeblair@redhat.com>
tags/v1.9.0-rc1
James E. Blair hace 5 años
padre
commit
dabee9b1a4
Se han modificado 2 ficheros con 20 adiciones y 2 borrados
  1. 3
    0
      modules/context/repo.go
  2. 17
    2
      routers/repo/http.go

+ 3
- 0
modules/context/repo.go Ver fichero

@@ -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)
}


+ 17
- 2
routers/repo/http.go Ver fichero

@@ -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
}


Cargando…
Cancelar
Guardar