Merge remote-tracking branch 'upstream/dev'

Conflicts:
	models/repo.go
This commit is contained in:
evolvedlight 2014-10-13 20:30:31 +01:00
commit 8d2a6fc484
79 changed files with 2539 additions and 527 deletions

46
routers/admin/notice.go Normal file
View file

@ -0,0 +1,46 @@
// Copyright 2014 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package admin
import (
"github.com/Unknwon/com"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/middleware"
)
const (
NOTICES base.TplName = "admin/notice"
)
func Notices(ctx *middleware.Context) {
ctx.Data["Title"] = ctx.Tr("admin.notices")
ctx.Data["PageIsAdmin"] = true
ctx.Data["PageIsAdminNotices"] = true
pageNum := 50
p := pagination(ctx, models.CountNotices(), pageNum)
notices, err := models.GetNotices(pageNum, (p-1)*pageNum)
if err != nil {
ctx.Handle(500, "GetNotices", err)
return
}
ctx.Data["Notices"] = notices
ctx.HTML(200, NOTICES)
}
func DeleteNotice(ctx *middleware.Context) {
id := com.StrTo(ctx.Params(":id")).MustInt64()
if err := models.DeleteNotice(id); err != nil {
ctx.Handle(500, "DeleteNotice", err)
return
}
log.Trace("System notice deleted by admin(%s): %d", ctx.User.Name, id)
ctx.Flash.Success(ctx.Tr("admin.notices.delete_success"))
ctx.Redirect("/admin/notices")
}

View file

@ -25,7 +25,7 @@ func Organizations(ctx *middleware.Context) {
var err error
ctx.Data["Orgs"], err = models.GetOrganizations(pageNum, (p-1)*pageNum)
if err != nil {
ctx.Handle(500, "GetUsers", err)
ctx.Handle(500, "GetOrganizations", err)
return
}
ctx.HTML(200, ORGS)

View file

@ -24,14 +24,14 @@ const (
)
func pagination(ctx *middleware.Context, count int64, pageNum int) int {
p := com.StrTo(ctx.Query("p")).MustInt()
p := ctx.QueryInt("p")
if p < 1 {
p = 1
}
curCount := int64((p-1)*pageNum + pageNum)
if curCount > count {
if curCount >= count {
p = int(count) / pageNum
} else if count > curCount {
} else {
ctx.Data["NextPageNum"] = p + 1
}
if p > 1 {
@ -48,12 +48,12 @@ func Users(ctx *middleware.Context) {
pageNum := 50
p := pagination(ctx, models.CountUsers(), pageNum)
var err error
ctx.Data["Users"], err = models.GetUsers(pageNum, (p-1)*pageNum)
users, err := models.GetUsers(pageNum, (p-1)*pageNum)
if err != nil {
ctx.Handle(500, "GetUsers", err)
return
}
ctx.Data["Users"] = users
ctx.HTML(200, USERS)
}

View file

@ -92,7 +92,7 @@ func SettingsDelete(ctx *middleware.Context) {
ctx.Handle(500, "DeleteOrganization", err)
}
} else {
log.Trace("Organization deleted: %s", ctx.User.Name)
log.Trace("Organization deleted: %s", org.Name)
ctx.Redirect(setting.AppSubUrl + "/")
}
return

View file

@ -124,6 +124,11 @@ func TeamsRepoAction(ctx *middleware.Context) {
var repo *models.Repository
repo, err = models.GetRepositoryByName(ctx.Org.Organization.Id, repoName)
if err != nil {
if err == models.ErrRepoNotExist {
ctx.Flash.Error(ctx.Tr("org.teams.add_nonexistent_repo"))
ctx.Redirect(ctx.Org.OrgLink + "/teams/" + ctx.Org.Team.LowerName + "/repositories")
return
}
ctx.Handle(500, "GetRepositoryByName", err)
return
}

View file

@ -159,6 +159,7 @@ func Diff(ctx *middleware.Context) {
ctx.Data["IsImageFile"] = isImageFile
ctx.Data["Title"] = commit.Summary() + " · " + base.ShortSha(commitId)
ctx.Data["Commit"] = commit
ctx.Data["Author"] = models.ValidateCommitWithEmail(commit)
ctx.Data["Diff"] = diff
ctx.Data["Parents"] = parents
ctx.Data["DiffNotAvailable"] = diff.NumFiles() == 0
@ -212,6 +213,7 @@ func CompareDiff(ctx *middleware.Context) {
ctx.Handle(500, "CommitsBeforeUntil", err)
return
}
commits = models.ValidateCommitsWithEmails(commits)
ctx.Data["Commits"] = commits
ctx.Data["CommitCount"] = commits.Len()
@ -274,13 +276,15 @@ func FileHistory(ctx *middleware.Context) {
nextPage = 0
}
ctx.Data["Commits"], err = ctx.Repo.GitRepo.CommitsByFileAndRange(
commits, err := ctx.Repo.GitRepo.CommitsByFileAndRange(
branchName, fileName, page)
if err != nil {
ctx.Handle(500, "repo.FileHistory(CommitsByRange)", err)
return
}
commits = models.ValidateCommitsWithEmails(commits)
ctx.Data["Commits"] = commits
ctx.Data["Username"] = userName
ctx.Data["Reponame"] = repoName
ctx.Data["FileName"] = fileName

View file

@ -16,6 +16,7 @@ import (
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/git"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/mailer"
"github.com/gogits/gogs/modules/middleware"
@ -26,6 +27,8 @@ const (
SETTINGS_OPTIONS base.TplName = "repo/settings/options"
COLLABORATION base.TplName = "repo/settings/collaboration"
HOOKS base.TplName = "repo/settings/hooks"
GITHOOKS base.TplName = "repo/settings/githooks"
GITHOOK_EDIT base.TplName = "repo/settings/githook_edit"
HOOK_NEW base.TplName = "repo/settings/hook_new"
ORG_HOOK_NEW base.TplName = "org/settings/hook_new"
)
@ -193,9 +196,16 @@ func SettingsCollaboration(ctx *middleware.Context) {
return
}
// Check if user is organization member.
if ctx.Repo.Owner.IsOrganization() && ctx.Repo.Owner.IsOrgMember(u.Id) {
ctx.Flash.Info(ctx.Tr("repo.settings.user_is_org_member"))
ctx.Redirect(ctx.Repo.RepoLink + "/settings/collaboration")
return
}
if err = models.AddAccess(&models.Access{UserName: name, RepoName: repoLink,
Mode: models.WRITABLE}); err != nil {
ctx.Handle(500, "AddAccess2", err)
ctx.Handle(500, "AddAccess", err)
return
}
@ -244,16 +254,20 @@ func SettingsCollaboration(ctx *middleware.Context) {
return
}
us := make([]*models.User, len(names))
for i, name := range names {
us[i], err = models.GetUserByName(name)
collaborators := make([]*models.User, 0, len(names))
for _, name := range names {
u, err := models.GetUserByName(name)
if err != nil {
ctx.Handle(500, "GetUserByName", err)
return
}
// Does not show organization members.
if ctx.Repo.Owner.IsOrganization() && ctx.Repo.Owner.IsOrgMember(u.Id) {
continue
}
collaborators = append(collaborators, u)
}
ctx.Data["Collaborators"] = us
ctx.Data["Collaborators"] = collaborators
ctx.HTML(200, COLLABORATION)
}
@ -591,3 +605,54 @@ func getOrgRepoCtx(ctx *middleware.Context) (*OrgRepoCtx, error) {
return &OrgRepoCtx{}, errors.New("Unable to set OrgRepo context")
}
}
func GitHooks(ctx *middleware.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings")
ctx.Data["PageIsSettingsGitHooks"] = true
hooks, err := ctx.Repo.GitRepo.Hooks()
if err != nil {
ctx.Handle(500, "Hooks", err)
return
}
ctx.Data["Hooks"] = hooks
ctx.HTML(200, GITHOOKS)
}
func GitHooksEdit(ctx *middleware.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings")
ctx.Data["PageIsSettingsGitHooks"] = true
name := ctx.Params(":name")
hook, err := ctx.Repo.GitRepo.GetHook(name)
if err != nil {
if err == git.ErrNotValidHook {
ctx.Handle(404, "GetHook", err)
} else {
ctx.Handle(500, "GetHook", err)
}
return
}
ctx.Data["Hook"] = hook
ctx.HTML(200, GITHOOK_EDIT)
}
func GitHooksEditPost(ctx *middleware.Context) {
name := ctx.Params(":name")
hook, err := ctx.Repo.GitRepo.GetHook(name)
if err != nil {
if err == git.ErrNotValidHook {
ctx.Handle(404, "GetHook", err)
} else {
ctx.Handle(500, "GetHook", err)
}
return
}
hook.Content = ctx.Query("content")
if err = hook.Update(); err != nil {
ctx.Handle(500, "hook.Update", err)
return
}
ctx.Redirect(ctx.Repo.RepoLink + "/settings/hooks/git")
}

View file

@ -166,7 +166,7 @@ func Home(ctx *middleware.Context) {
}
if readmeFile != nil {
ctx.Data["ReadmeInHome"] = true
ctx.Data["ReadmeInList"] = true
ctx.Data["ReadmeExist"] = true
if dataRc, err := readmeFile.Data(); err != nil {
ctx.Handle(404, "repo.SinglereadmeFile.LookupBlob", err)

View file

@ -177,9 +177,13 @@ func SettingsSSHKeysPost(ctx *middleware.Context, form auth.AddSSHKeyForm) {
cleanContent := strings.Replace(form.Content, "\n", "", -1)
if ok, err := models.CheckPublicKeyString(cleanContent); !ok {
ctx.Flash.Error(ctx.Tr("form.invalid_ssh_key", err.Error()))
ctx.Redirect(setting.AppSubUrl + "/user/settings/ssh")
return
if err == models.ErrKeyUnableVerify {
ctx.Flash.Info(ctx.Tr("form.unable_verify_ssh_key"))
} else {
ctx.Flash.Error(ctx.Tr("form.invalid_ssh_key", err.Error()))
ctx.Redirect(setting.AppSubUrl + "/user/settings/ssh")
return
}
}
k := &models.PublicKey{