aboutsummaryrefslogtreecommitdiff
path: root/routers/repo/repo.go
diff options
context:
space:
mode:
authorDon Bowman <don.waterloo@gmail.com>2015-08-12 21:10:00 +0000
committerDon Bowman <don.waterloo@gmail.com>2015-08-12 21:10:00 +0000
commit1cb46ede1acf4f8527e64fcae7e92672cad764b2 (patch)
treefabb54ee5f040be2a4ee5c95f87cb3e9fbf7bdea /routers/repo/repo.go
parent9e6bd31d76aa6d6495a2144466af78773f34d07c (diff)
parentaede5cdb04fdbf74d9c602062fdece9f408e90f4 (diff)
Merge branch 'master' of https://github.com/gogits/gogs
Conflicts: routers/repo/download.go
Diffstat (limited to 'routers/repo/repo.go')
-rw-r--r--routers/repo/repo.go218
1 files changed, 59 insertions, 159 deletions
diff --git a/routers/repo/repo.go b/routers/repo/repo.go
index 73c9277d..dde8b584 100644
--- a/routers/repo/repo.go
+++ b/routers/repo/repo.go
@@ -25,21 +25,27 @@ import (
const (
CREATE base.TplName = "repo/create"
MIGRATE base.TplName = "repo/migrate"
- FORK base.TplName = "repo/fork"
)
-func checkContextUser(ctx *middleware.Context, uid int64) (*models.User, error) {
- ctxUser := ctx.User
- if uid > 0 {
- org, err := models.GetUserById(uid)
- if err != models.ErrUserNotExist {
- if err != nil {
- return nil, fmt.Errorf("GetUserById: %v", err)
- }
- ctxUser = org
- }
+func checkContextUser(ctx *middleware.Context, uid int64) *models.User {
+ // Not equal means current user is an organization.
+ if uid == ctx.User.Id || uid == 0 {
+ return ctx.User
+ }
+
+ org, err := models.GetUserById(uid)
+ if models.IsErrUserNotExist(err) {
+ return ctx.User
+ }
+
+ if err != nil {
+ ctx.Handle(500, "checkContextUser", fmt.Errorf("GetUserById(%d): %v", uid, err))
+ return nil
+ } else if !org.IsOrganization() {
+ ctx.Error(403)
+ return nil
}
- return ctxUser, nil
+ return org
}
func Create(ctx *middleware.Context) {
@@ -51,9 +57,8 @@ func Create(ctx *middleware.Context) {
ctx.Data["Gitignores"] = models.Gitignores
ctx.Data["Licenses"] = models.Licenses
- ctxUser, err := checkContextUser(ctx, ctx.QueryInt64("org"))
- if err != nil {
- ctx.Handle(500, "checkContextUser", err)
+ ctxUser := checkContextUser(ctx, ctx.QueryInt64("org"))
+ if ctx.Written() {
return
}
ctx.Data["ContextUser"] = ctxUser
@@ -73,15 +78,9 @@ func CreatePost(ctx *middleware.Context, form auth.CreateRepoForm) {
ctx.Data["Gitignores"] = models.Gitignores
ctx.Data["Licenses"] = models.Licenses
- ctxUser := ctx.User
- // Not equal means current user is an organization.
- if form.Uid != ctx.User.Id {
- var err error
- ctxUser, err = checkContextUser(ctx, form.Uid)
- if err != nil {
- ctx.Handle(500, "checkContextUser", err)
- return
- }
+ ctxUser := checkContextUser(ctx, form.Uid)
+ if ctx.Written() {
+ return
}
ctx.Data["ContextUser"] = ctxUser
@@ -110,14 +109,6 @@ func CreatePost(ctx *middleware.Context, form auth.CreateRepoForm) {
log.Trace("Repository created: %s/%s", ctxUser.Name, repo.Name)
ctx.Redirect(setting.AppSubUrl + "/" + ctxUser.Name + "/" + repo.Name)
return
- } else if err == models.ErrRepoAlreadyExist {
- ctx.Data["Err_RepoName"] = true
- ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), CREATE, &form)
- return
- } else if err == models.ErrRepoNameIllegal {
- ctx.Data["Err_RepoName"] = true
- ctx.RenderWithErr(ctx.Tr("form.illegal_repo_name"), CREATE, &form)
- return
}
if repo != nil {
@@ -125,15 +116,27 @@ func CreatePost(ctx *middleware.Context, form auth.CreateRepoForm) {
log.Error(4, "DeleteRepository: %v", errDelete)
}
}
- ctx.Handle(500, "CreatePost", err)
+
+ switch {
+ case models.IsErrRepoAlreadyExist(err):
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), CREATE, &form)
+ case models.IsErrNameReserved(err):
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), CREATE, &form)
+ case models.IsErrNamePatternNotAllowed(err):
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), CREATE, &form)
+ default:
+ ctx.Handle(500, "CreatePost", err)
+ }
}
func Migrate(ctx *middleware.Context) {
ctx.Data["Title"] = ctx.Tr("new_migrate")
- ctxUser, err := checkContextUser(ctx, ctx.QueryInt64("org"))
- if err != nil {
- ctx.Handle(500, "checkContextUser", err)
+ ctxUser := checkContextUser(ctx, ctx.QueryInt64("org"))
+ if ctx.Written() {
return
}
ctx.Data["ContextUser"] = ctxUser
@@ -150,15 +153,9 @@ func Migrate(ctx *middleware.Context) {
func MigratePost(ctx *middleware.Context, form auth.MigrateRepoForm) {
ctx.Data["Title"] = ctx.Tr("new_migrate")
- ctxUser := ctx.User
- // Not equal means current user is an organization.
- if form.Uid != ctx.User.Id {
- var err error
- ctxUser, err = checkContextUser(ctx, form.Uid)
- if err != nil {
- ctx.Handle(500, "checkContextUser", err)
- return
- }
+ ctxUser := checkContextUser(ctx, form.Uid)
+ if ctx.Written() {
+ return
}
ctx.Data["ContextUser"] = ctxUser
@@ -209,14 +206,6 @@ func MigratePost(ctx *middleware.Context, form auth.MigrateRepoForm) {
log.Trace("Repository migrated: %s/%s", ctxUser.Name, form.RepoName)
ctx.Redirect(setting.AppSubUrl + "/" + ctxUser.Name + "/" + form.RepoName)
return
- } else if err == models.ErrRepoAlreadyExist {
- ctx.Data["Err_RepoName"] = true
- ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), MIGRATE, &form)
- return
- } else if err == models.ErrRepoNameIllegal {
- ctx.Data["Err_RepoName"] = true
- ctx.RenderWithErr(ctx.Tr("form.illegal_repo_name"), MIGRATE, &form)
- return
}
if repo != nil {
@@ -230,115 +219,20 @@ func MigratePost(ctx *middleware.Context, form auth.MigrateRepoForm) {
ctx.RenderWithErr(ctx.Tr("form.auth_failed", err), MIGRATE, &form)
return
}
- ctx.Handle(500, "MigratePost", err)
-}
-
-func getForkRepository(ctx *middleware.Context) (*models.Repository, error) {
- forkId := ctx.QueryInt64("fork_id")
- ctx.Data["ForkId"] = forkId
-
- forkRepo, err := models.GetRepositoryById(forkId)
- if err != nil {
- return nil, fmt.Errorf("GetRepositoryById: %v", err)
- }
- ctx.Data["repo_name"] = forkRepo.Name
- ctx.Data["desc"] = forkRepo.Description
-
- if err = forkRepo.GetOwner(); err != nil {
- return nil, fmt.Errorf("GetOwner: %v", err)
- }
- ctx.Data["ForkFrom"] = forkRepo.Owner.Name + "/" + forkRepo.Name
- return forkRepo, nil
-}
-
-func Fork(ctx *middleware.Context) {
- ctx.Data["Title"] = ctx.Tr("new_fork")
-
- if _, err := getForkRepository(ctx); err != nil {
- if models.IsErrRepoNotExist(err) {
- ctx.Redirect(setting.AppSubUrl + "/")
- } else {
- ctx.Handle(500, "getForkRepository", err)
- }
- return
- }
-
- // FIXME: maybe sometime can directly fork to organization?
- ctx.Data["ContextUser"] = ctx.User
- if err := ctx.User.GetOrganizations(); err != nil {
- ctx.Handle(500, "GetOrganizations", err)
- return
- }
- ctx.Data["Orgs"] = ctx.User.Orgs
-
- ctx.HTML(200, FORK)
-}
-
-func ForkPost(ctx *middleware.Context, form auth.CreateRepoForm) {
- ctx.Data["Title"] = ctx.Tr("new_fork")
-
- forkRepo, err := getForkRepository(ctx)
- if err != nil {
- if models.IsErrRepoNotExist(err) {
- ctx.Redirect(setting.AppSubUrl + "/")
- } else {
- ctx.Handle(500, "getForkRepository", err)
- }
- return
- }
-
- ctxUser := ctx.User
- // Not equal means current user is an organization.
- if form.Uid != ctx.User.Id {
- var err error
- ctxUser, err = checkContextUser(ctx, form.Uid)
- if err != nil {
- ctx.Handle(500, "checkContextUser", err)
- return
- }
- }
- ctx.Data["ContextUser"] = ctxUser
-
- if err := ctx.User.GetOrganizations(); err != nil {
- ctx.Handle(500, "GetOrganizations", err)
- return
- }
- ctx.Data["Orgs"] = ctx.User.Orgs
-
- if ctx.HasError() {
- ctx.HTML(200, CREATE)
- return
- }
-
- if ctxUser.IsOrganization() {
- // Check ownership of organization.
- if !ctxUser.IsOwnedBy(ctx.User.Id) {
- ctx.Error(403)
- return
- }
- }
- repo, err := models.ForkRepository(ctxUser, forkRepo, form.RepoName, form.Description)
- if err == nil {
- log.Trace("Repository forked: %s/%s", ctxUser.Name, repo.Name)
- ctx.Redirect(setting.AppSubUrl + "/" + ctxUser.Name + "/" + repo.Name)
- return
- } else if err == models.ErrRepoAlreadyExist {
+ switch {
+ case models.IsErrRepoAlreadyExist(err):
ctx.Data["Err_RepoName"] = true
- ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), FORK, &form)
- return
- } else if err == models.ErrRepoNameIllegal {
+ ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), MIGRATE, &form)
+ case models.IsErrNameReserved(err):
ctx.Data["Err_RepoName"] = true
- ctx.RenderWithErr(ctx.Tr("form.illegal_repo_name"), CREATE, &form)
- return
- }
-
- if repo != nil {
- if errDelete := models.DeleteRepository(ctxUser.Id, repo.Id, ctxUser.Name); errDelete != nil {
- log.Error(4, "DeleteRepository: %v", errDelete)
- }
+ ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), MIGRATE, &form)
+ case models.IsErrNamePatternNotAllowed(err):
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), MIGRATE, &form)
+ default:
+ ctx.Handle(500, "MigratePost", err)
}
- ctx.Handle(500, "ForkPost", err)
}
func Action(ctx *middleware.Context) {
@@ -371,7 +265,13 @@ func Action(ctx *middleware.Context) {
})
return
}
- ctx.Redirect(ctx.Repo.RepoLink)
+
+ redirectTo := ctx.Query("redirect_to")
+ if len(redirectTo) == 0 {
+ redirectTo = ctx.Repo.RepoLink
+ }
+ ctx.Redirect(redirectTo)
+
return
ctx.JSON(200, map[string]interface{}{
"ok": true,