Huge updates!!!!! Be careful to merge!!!!

release/v0.9
Unknwon 10 years ago
parent 3f38ff6c09
commit 5c4bc3c848

@ -30,7 +30,7 @@ import (
"github.com/gogits/gogs/routers/admin"
"github.com/gogits/gogs/routers/api/v1"
"github.com/gogits/gogs/routers/dev"
// "github.com/gogits/gogs/routers/org"
"github.com/gogits/gogs/routers/org"
"github.com/gogits/gogs/routers/repo"
"github.com/gogits/gogs/routers/user"
)
@ -101,8 +101,8 @@ func runWeb(*cli.Context) {
// Routers.
m.Get("/", ignSignIn, routers.Home)
// m.Get("/install", bindIgnErr(auth.InstallForm{}), routers.Install)
// m.Post("/install", bindIgnErr(auth.InstallForm{}), routers.InstallPost)
m.Get("/install", bindIgnErr(auth.InstallForm{}), routers.Install)
m.Post("/install", bindIgnErr(auth.InstallForm{}), routers.InstallPost)
m.Group("", func(r *macaron.Router) {
r.Get("/issues", user.Issues)
r.Get("/pulls", user.Pulls)
@ -151,6 +151,7 @@ func runWeb(*cli.Context) {
r.Get("/ssh", user.SettingsSSHKeys)
r.Post("/ssh", bindIgnErr(auth.AddSSHKeyForm{}), user.SettingsSSHKeysPost)
r.Get("/social", user.SettingsSocial)
r.Get("/orgs", user.SettingsOrgs)
r.Route("/delete", "GET,POST", user.SettingsDelete)
})
}, reqSignIn)
@ -173,8 +174,8 @@ func runWeb(*cli.Context) {
m.Group("/repo", func(r *macaron.Router) {
r.Get("/create", repo.Create)
r.Post("/create", bindIgnErr(auth.CreateRepoForm{}), repo.CreatePost)
// r.Get("/migrate", repo.Migrate)
// r.Post("/migrate", bindIgnErr(auth.MigrateRepoForm{}), repo.MigratePost)
r.Get("/migrate", repo.Migrate)
r.Post("/migrate", bindIgnErr(auth.MigrateRepoForm{}), repo.MigratePost)
}, reqSignIn)
adminReq := middleware.Toggle(&middleware.ToggleOptions{SignInRequire: true, AdminRequire: true})
@ -210,91 +211,92 @@ func runWeb(*cli.Context) {
dev.RegisterDebugRoutes(m)
}
// reqTrueOwner := middleware.RequireTrueOwner()
// m.Group("/org", func(r *macaron.Router) {
// r.Get("/create", org.New)
// r.Post("/create", bindIgnErr(auth.CreateOrgForm{}), org.NewPost)
// r.Get("/:org", org.Home)
// r.Get("/:org/dashboard", org.Dashboard)
// r.Get("/:org/members", org.Members)
// r.Get("/:org/teams", org.Teams)
// r.Get("/:org/teams/new", org.NewTeam)
// r.Post("/:org/teams/new", bindIgnErr(auth.CreateTeamForm{}), org.NewTeamPost)
// r.Get("/:org/teams/:team/edit", org.EditTeam)
// r.Get("/:org/team/:team", org.SingleTeam)
// r.Get("/:org/settings", org.Settings)
// r.Post("/:org/settings", bindIgnErr(auth.OrgSettingForm{}), org.SettingsPost)
// r.Post("/:org/settings/delete", org.DeletePost)
// }, reqSignIn)
// m.Group("/:username/:reponame", func(r *macaron.Router) {
// r.Get("/settings", repo.Setting)
// r.Post("/settings", bindIgnErr(auth.RepoSettingForm{}), repo.SettingPost)
// m.Group("/settings", func(r *macaron.Router) {
// r.Get("/collaboration", repo.Collaboration)
// r.Post("/collaboration", repo.CollaborationPost)
// r.Get("/hooks", repo.WebHooks)
// r.Get("/hooks/add", repo.WebHooksAdd)
// r.Post("/hooks/add", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksAddPost)
// r.Get("/hooks/:id", repo.WebHooksEdit)
// r.Post("/hooks/:id", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksEditPost)
// })
// }, reqSignIn, middleware.RepoAssignment(true), reqTrueOwner)
// m.Group("/:username/:reponame", func(r *macaron.Router) {
// r.Get("/action/:action", repo.Action)
// m.Group("/issues", func(r *macaron.Router) {
// r.Get("/new", repo.CreateIssue)
// r.Post("/new", bindIgnErr(auth.CreateIssueForm{}), repo.CreateIssuePost)
// r.Post("/:index", bindIgnErr(auth.CreateIssueForm{}), repo.UpdateIssue)
// r.Post("/:index/label", repo.UpdateIssueLabel)
// r.Post("/:index/milestone", repo.UpdateIssueMilestone)
// r.Post("/:index/assignee", repo.UpdateAssignee)
// r.Get("/:index/attachment/:id", repo.IssueGetAttachment)
// r.Post("/labels/new", bindIgnErr(auth.CreateLabelForm{}), repo.NewLabel)
// r.Post("/labels/edit", bindIgnErr(auth.CreateLabelForm{}), repo.UpdateLabel)
// r.Post("/labels/delete", repo.DeleteLabel)
// r.Get("/milestones", repo.Milestones)
// r.Get("/milestones/new", repo.NewMilestone)
// r.Post("/milestones/new", bindIgnErr(auth.CreateMilestoneForm{}), repo.NewMilestonePost)
// r.Get("/milestones/:index/edit", repo.UpdateMilestone)
// r.Post("/milestones/:index/edit", bindIgnErr(auth.CreateMilestoneForm{}), repo.UpdateMilestonePost)
// r.Get("/milestones/:index/:action", repo.UpdateMilestone)
// })
// r.Post("/comment/:action", repo.Comment)
// r.Get("/releases/new", repo.NewRelease)
// r.Get("/releases/edit/:tagname", repo.EditRelease)
// }, reqSignIn, middleware.RepoAssignment(true))
// m.Group("/:username/:reponame", func(r *macaron.Router) {
// r.Post("/releases/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost)
// r.Post("/releases/edit/:tagname", bindIgnErr(auth.EditReleaseForm{}), repo.EditReleasePost)
// }, reqSignIn, middleware.RepoAssignment(true, true))
// m.Group("/:username/:reponame", func(r *macaron.Router) {
// r.Get("/issues", repo.Issues)
// r.Get("/issues/:index", repo.ViewIssue)
// r.Get("/pulls", repo.Pulls)
// r.Get("/branches", repo.Branches)
// }, ignSignIn, middleware.RepoAssignment(true))
reqTrueOwner := middleware.RequireTrueOwner()
// Organization routers.
m.Group("/org", func(r *macaron.Router) {
r.Get("/create", org.New)
r.Post("/create", bindIgnErr(auth.CreateOrgForm{}), org.NewPost)
r.Get("/:org", org.Home)
r.Get("/:org/dashboard", org.Dashboard)
r.Get("/:org/members", org.Members)
r.Get("/:org/teams", org.Teams)
r.Get("/:org/teams/new", org.NewTeam)
r.Post("/:org/teams/new", bindIgnErr(auth.CreateTeamForm{}), org.NewTeamPost)
r.Get("/:org/teams/:team/edit", org.EditTeam)
r.Get("/:org/team/:team", org.SingleTeam)
r.Get("/:org/settings", org.Settings)
r.Post("/:org/settings", bindIgnErr(auth.OrgSettingForm{}), org.SettingsPost)
r.Post("/:org/settings/delete", org.DeletePost)
}, reqSignIn)
m.Group("/:username/:reponame", func(r *macaron.Router) {
r.Get("/settings", repo.Setting)
r.Post("/settings", bindIgnErr(auth.RepoSettingForm{}), repo.SettingPost)
m.Group("/settings", func(r *macaron.Router) {
r.Get("/collaboration", repo.Collaboration)
r.Post("/collaboration", repo.CollaborationPost)
r.Get("/hooks", repo.WebHooks)
r.Get("/hooks/add", repo.WebHooksAdd)
r.Post("/hooks/add", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksAddPost)
r.Get("/hooks/:id", repo.WebHooksEdit)
r.Post("/hooks/:id", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksEditPost)
})
}, reqSignIn, middleware.RepoAssignment(true), reqTrueOwner)
m.Group("/:username/:reponame", func(r *macaron.Router) {
// r.Get("/action/:action", repo.Action)
m.Group("/issues", func(r *macaron.Router) {
r.Get("/new", repo.CreateIssue)
r.Post("/new", bindIgnErr(auth.CreateIssueForm{}), repo.CreateIssuePost)
r.Post("/:index", bindIgnErr(auth.CreateIssueForm{}), repo.UpdateIssue)
r.Post("/:index/label", repo.UpdateIssueLabel)
r.Post("/:index/milestone", repo.UpdateIssueMilestone)
r.Post("/:index/assignee", repo.UpdateAssignee)
r.Get("/:index/attachment/:id", repo.IssueGetAttachment)
r.Post("/labels/new", bindIgnErr(auth.CreateLabelForm{}), repo.NewLabel)
r.Post("/labels/edit", bindIgnErr(auth.CreateLabelForm{}), repo.UpdateLabel)
r.Post("/labels/delete", repo.DeleteLabel)
r.Get("/milestones", repo.Milestones)
r.Get("/milestones/new", repo.NewMilestone)
r.Post("/milestones/new", bindIgnErr(auth.CreateMilestoneForm{}), repo.NewMilestonePost)
r.Get("/milestones/:index/edit", repo.UpdateMilestone)
r.Post("/milestones/:index/edit", bindIgnErr(auth.CreateMilestoneForm{}), repo.UpdateMilestonePost)
r.Get("/milestones/:index/:action", repo.UpdateMilestone)
})
r.Post("/comment/:action", repo.Comment)
r.Get("/releases/new", repo.NewRelease)
r.Get("/releases/edit/:tagname", repo.EditRelease)
}, reqSignIn, middleware.RepoAssignment(true))
m.Group("/:username/:reponame", func(r *macaron.Router) {
r.Post("/releases/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost)
r.Post("/releases/edit/:tagname", bindIgnErr(auth.EditReleaseForm{}), repo.EditReleasePost)
}, reqSignIn, middleware.RepoAssignment(true, true))
m.Group("/:username/:reponame", func(r *macaron.Router) {
r.Get("/issues", repo.Issues)
r.Get("/issues/:index", repo.ViewIssue)
r.Get("/pulls", repo.Pulls)
r.Get("/branches", repo.Branches)
}, ignSignIn, middleware.RepoAssignment(true))
m.Group("/:username/:reponame", func(r *macaron.Router) {
r.Get("/src/:branchname", repo.Home)
r.Get("/src/:branchname/*", repo.Home)
r.Get("/raw/:branchname/**", repo.SingleDownload)
// r.Get("/commits/:branchname", repo.Commits)
// r.Get("/commits/:branchname/search", repo.SearchCommits)
// r.Get("/commits/:branchname/**", repo.FileHistory)
// r.Get("/commit/:branchname", repo.Diff)
// r.Get("/commit/:branchname/**", repo.Diff)
// r.Get("/releases", repo.Releases)
r.Get("/raw/:branchname/*", repo.SingleDownload)
r.Get("/commits/:branchname", repo.Commits)
r.Get("/commits/:branchname/search", repo.SearchCommits)
r.Get("/commits/:branchname/*", repo.FileHistory)
r.Get("/commit/:branchname", repo.Diff)
r.Get("/commit/:branchname/*", repo.Diff)
r.Get("/releases", repo.Releases)
r.Get("/archive/*.*", repo.Download)
}, ignSignIn, middleware.RepoAssignment(true, true))

@ -89,6 +89,7 @@ profile = Profile
password = Password
ssh_keys = SSH Keys
social = Social Accounts
orgs = Organizations
delete = Delete Accoount
public_profile = Public Profile
@ -118,6 +119,7 @@ add_on = Added on
last_used = Last used on
no_activity = No recent activity
manage_orgs = Manage Organizations
manage_social = Manage Associated Social Accounts
delete_account = Delete Your Account

@ -89,6 +89,7 @@ profile = 个人信息
password = 修改密码
ssh_keys = 管理 SSH 密钥
social = 社交帐号绑定
orgs = 管理组织
delete = 删除帐户
public_profile = 公开信息
@ -118,6 +119,7 @@ add_on = 增加于
last_used = 上次使用在
no_activity = 没有最近活动
manage_orgs = 管理我的组织
manage_social = 管理关联社交帐户
delete_account = 删除当前帐户

@ -17,7 +17,7 @@ import (
"github.com/gogits/gogs/modules/setting"
)
const APP_VER = "0.4.7.0725 Alpha"
const APP_VER = "0.4.7.0726 Alpha"
func init() {
runtime.GOMAXPROCS(runtime.NumCPU())

@ -10,7 +10,7 @@ import (
"strings"
"time"
"github.com/gogits/git"
"github.com/gogits/gogs/modules/git"
)
var (

@ -106,7 +106,6 @@ var TemplateFuncs template.FuncMap = map[string]interface{}{
"CreateCaptcha": func() string { return "" },
}
// TODO: Legacy
type Actioner interface {
GetOpType() int
GetActUserName() string

@ -73,6 +73,14 @@ func (c *Commit) CommitsCount() (int, error) {
return c.repo.commitsCount(c.Id)
}
func (c *Commit) SearchCommits(keyword string) (*list.List, error) {
return c.repo.searchCommits(c.Id, keyword)
}
func (c *Commit) CommitsByRange(page int) (*list.List, error) {
return c.repo.commitsByRange(c.Id, page)
}
func (c *Commit) GetCommitOfRelPath(relPath string) (*Commit, error) {
return c.repo.getCommitOfRelPath(c.Id, relPath)
}

@ -32,7 +32,18 @@ func (repo *Repository) GetCommitOfBranch(branchName string) (*Commit, error) {
if err != nil {
return nil, err
}
return repo.GetCommit(commitId)
}
func (repo *Repository) GetCommitIdOfTag(tagName string) (string, error) {
return repo.getCommitIdOfRef("refs/tags/" + tagName)
}
func (repo *Repository) GetCommitOfTag(tagName string) (*Commit, error) {
commitId, err := repo.GetCommitIdOfTag(tagName)
if err != nil {
return nil, err
}
return repo.GetCommit(commitId)
}
@ -212,6 +223,32 @@ func (repo *Repository) commitsBefore(lock *sync.Mutex, l *list.List, parent *li
return nil
}
func (repo *Repository) CommitsCount(commitId string) (int, error) {
id, err := NewIdFromString(commitId)
if err != nil {
return 0, err
}
return repo.commitsCount(id)
}
func (repo *Repository) FileCommitsCount(branch, file string) (int, error) {
stdout, stderr, err := com.ExecCmdDir(repo.Path, "git", "rev-list", "--count",
branch, "--", file)
if err != nil {
return 0, errors.New(stderr)
}
return com.StrTo(strings.TrimSpace(stdout)).Int()
}
func (repo *Repository) CommitsByFileAndRange(branch, file string, page int) (*list.List, error) {
stdout, stderr, err := com.ExecCmdDirBytes(repo.Path, "git", "log", branch,
"--skip="+com.ToStr((page-1)*50), "--max-count=50", prettyLogFormat, "--", file)
if err != nil {
return nil, errors.New(string(stderr))
}
return parsePrettyFormatLog(repo, stdout)
}
func (repo *Repository) getCommitsBefore(id sha1) (*list.List, error) {
l := list.New()
lock := new(sync.Mutex)
@ -219,6 +256,26 @@ func (repo *Repository) getCommitsBefore(id sha1) (*list.List, error) {
return l, err
}
func (repo *Repository) searchCommits(id sha1, keyword string) (*list.List, error) {
stdout, stderr, err := com.ExecCmdDirBytes(repo.Path, "git", "log", id.String(), "-100",
"-i", "--grep="+keyword, prettyLogFormat)
if err != nil {
return nil, err
} else if len(stderr) > 0 {
return nil, errors.New(string(stderr))
}
return parsePrettyFormatLog(repo, stdout)
}
func (repo *Repository) commitsByRange(id sha1, page int) (*list.List, error) {
stdout, stderr, err := com.ExecCmdDirBytes(repo.Path, "git", "log", id.String(),
"--skip="+com.ToStr((page-1)*50), "--max-count=50", prettyLogFormat)
if err != nil {
return nil, errors.New(string(stderr))
}
return parsePrettyFormatLog(repo, stdout)
}
func (repo *Repository) getCommitOfRelPath(id sha1, relPath string) (*Commit, error) {
stdout, _, err := com.ExecCmdDir(repo.Path, "git", "log", "-1", prettyLogFormat, id.String(), "--", relPath)
if err != nil {

@ -30,6 +30,14 @@ func (repo *Repository) GetTags() ([]string, error) {
return tags[:len(tags)-1], nil
}
func (repo *Repository) CreateTag(tagName, idStr string) error {
_, stderr, err := com.ExecCmdDir(repo.Path, "git", "tag", tagName, idStr)
if err != nil {
return errors.New(stderr)
}
return nil
}
func (repo *Repository) getTag(id sha1) (*Tag, error) {
if repo.tagCache != nil {
if t, ok := repo.tagCache[id]; ok {

@ -44,3 +44,16 @@ func (t *Tree) GetTreeEntryByPath(relpath string) (*TreeEntry, error) {
}
return nil, fmt.Errorf("GetTreeEntryByPath: %v", ErrNotExist)
}
func (t *Tree) GetBlobByPath(rpath string) (*Blob, error) {
entry, err := t.GetTreeEntryByPath(rpath)
if err != nil {
return nil, err
}
if !entry.IsDir() {
return entry.Blob(), nil
}
return nil, ErrNotExist
}

@ -5,12 +5,33 @@
package git
import (
"bytes"
"container/list"
"path/filepath"
"strings"
)
const prettyLogFormat = `--pretty=format:%H`
func parsePrettyFormatLog(repo *Repository, logByts []byte) (*list.List, error) {
l := list.New()
if len(logByts) == 0 {
return l, nil
}
parts := bytes.Split(logByts, []byte{'\n'})
for _, commitId := range parts {
commit, err := repo.GetCommit(string(commitId))
if err != nil {
return nil, err
}
l.PushBack(commit)
}
return l, nil
}
func RefEndName(refStr string) string {
index := strings.LastIndex(refStr, "/")
if index != -1 {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

File diff suppressed because one or more lines are too long

@ -373,7 +373,7 @@ img.avatar-30 {
display: inline-block;
text-decoration: none;
-webkit-font-smoothing: antialiased;
margin-right: 8px;
margin-left: 30px;
}
.markdown a span.octicon-link {
opacity: 0;
@ -1058,6 +1058,9 @@ The register and sign-in page style
}
#repo-bare-start pre {
margin: 0 40px;
padding: 6px 10px;
border: 1px solid #ddd;
background: #f8f8f8;
}
.repo-bare #repo-bare-start h2 {
margin-top: 30px;
@ -1073,6 +1076,7 @@ The register and sign-in page style
margin-right: 200px;
}
.repo-bare #repo-clone-help {
clear: both;
width: 100%;
}
.repo-bare #repo-clone-url {

@ -5,12 +5,10 @@
package org
import (
"github.com/go-martini/martini"
"github.com/gogits/gogs/modules/middleware"
)
func Members(ctx *middleware.Context, params martini.Params) {
ctx.Data["Title"] = "Organization " + params["org"] + " Members"
func Members(ctx *middleware.Context) {
ctx.Data["Title"] = "Organization " + ctx.Params(":org") + " Members"
ctx.HTML(200, "org/members")
}

@ -5,9 +5,7 @@
package org
import (
"github.com/go-martini/martini"
"github.com/gogits/gogs-ng/models"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log"
@ -21,10 +19,10 @@ const (
SETTINGS base.TplName = "org/settings"
)
func Home(ctx *middleware.Context, params martini.Params) {
ctx.Data["Title"] = "Organization " + params["org"]
func Home(ctx *middleware.Context) {
ctx.Data["Title"] = "Organization " + ctx.Params(":org")
org, err := models.GetUserByName(params["org"])
org, err := models.GetUserByName(ctx.Params(":org"))
if err != nil {
if err == models.ErrUserNotExist {
ctx.Handle(404, "org.Home(GetUserByName)", err)
@ -99,12 +97,12 @@ func NewPost(ctx *middleware.Context, form auth.CreateOrgForm) {
ctx.Redirect("/org/" + form.OrgName + "/dashboard")
}
func Dashboard(ctx *middleware.Context, params martini.Params) {
func Dashboard(ctx *middleware.Context) {
ctx.Data["Title"] = "Dashboard"
ctx.Data["PageIsUserDashboard"] = true
ctx.Data["PageIsOrgDashboard"] = true
org, err := models.GetUserByName(params["org"])
org, err := models.GetUserByName(ctx.Params(":org"))
if err != nil {
if err == models.ErrUserNotExist {
ctx.Handle(404, "org.Dashboard(GetUserByName)", err)
@ -114,11 +112,11 @@ func Dashboard(ctx *middleware.Context, params martini.Params) {
return
}
// if err := ctx.User.GetOrganizations(); err != nil {
// ctx.Handle(500, "home.Dashboard(GetOrganizations)", err)
// return
// }
// ctx.Data["Orgs"] = ctx.User.Orgs
if err := ctx.User.GetOrganizations(); err != nil {
ctx.Handle(500, "home.Dashboard(GetOrganizations)", err)
return
}
ctx.Data["Orgs"] = ctx.User.Orgs
ctx.Data["ContextUser"] = org
ctx.Data["MyRepos"], err = models.GetRepositories(org.Id, true)
@ -137,10 +135,10 @@ func Dashboard(ctx *middleware.Context, params martini.Params) {
ctx.HTML(200, user.DASHBOARD)
}
func Settings(ctx *middleware.Context, params martini.Params) {
func Settings(ctx *middleware.Context) {
ctx.Data["Title"] = "Settings"
org, err := models.GetUserByName(params["org"])
org, err := models.GetUserByName(ctx.Params(":org"))
if err != nil {
if err == models.ErrUserNotExist {
ctx.Handle(404, "org.Settings(GetUserByName)", err)
@ -154,10 +152,10 @@ func Settings(ctx *middleware.Context, params martini.Params) {
ctx.HTML(200, SETTINGS)
}
func SettingsPost(ctx *middleware.Context, params martini.Params, form auth.OrgSettingForm) {
func SettingsPost(ctx *middleware.Context, form auth.OrgSettingForm) {
ctx.Data["Title"] = "Settings"
org, err := models.GetUserByName(params["org"])
org, err := models.GetUserByName(ctx.Params(":org"))
if err != nil {
if err == models.ErrUserNotExist {
ctx.Handle(404, "org.SettingsPost(GetUserByName)", err)
@ -187,10 +185,10 @@ func SettingsPost(ctx *middleware.Context, params martini.Params, form auth.OrgS
ctx.Redirect("/org/" + org.Name + "/settings")
}
func DeletePost(ctx *middleware.Context, params martini.Params) {
func DeletePost(ctx *middleware.Context) {
ctx.Data["Title"] = "Settings"
org, err := models.GetUserByName(params["org"])
org, err := models.GetUserByName(ctx.Params(":org"))
if err != nil {
if err == models.ErrUserNotExist {
ctx.Handle(404, "org.DeletePost(GetUserByName)", err)

@ -5,8 +5,6 @@
package org
import (
"github.com/go-martini/martini"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/base"
@ -19,10 +17,10 @@ const (
TEAM_NEW base.TplName = "org/team_new"
)
func Teams(ctx *middleware.Context, params martini.Params) {
ctx.Data["Title"] = "Organization " + params["org"] + " Teams"
func Teams(ctx *middleware.Context) {
ctx.Data["Title"] = "Organization " + ctx.Params(":org") + " Teams"
org, err := models.GetUserByName(params["org"])
org, err := models.GetUserByName(ctx.Params(":org"))
if err != nil {
if err == models.ErrUserNotExist {
ctx.Handle(404, "org.Teams(GetUserByName)", err)
@ -48,8 +46,8 @@ func Teams(ctx *middleware.Context, params martini.Params) {
ctx.HTML(200, TEAMS)
}
func NewTeam(ctx *middleware.Context, params martini.Params) {
org, err := models.GetUserByName(params["org"])
func NewTeam(ctx *middleware.Context) {
org, err := models.GetUserByName(ctx.Params(":org"))
if err != nil {
if err == models.ErrUserNotExist {
ctx.Handle(404, "org.NewTeam(GetUserByName)", err)
@ -69,8 +67,8 @@ func NewTeam(ctx *middleware.Context, params martini.Params) {
ctx.HTML(200, TEAM_NEW)
}
func NewTeamPost(ctx *middleware.Context, params martini.Params, form auth.CreateTeamForm) {
org, err := models.GetUserByName(params["org"])
func NewTeamPost(ctx *middleware.Context, form auth.CreateTeamForm) {
org, err := models.GetUserByName(ctx.Params(":org"))
if err != nil {
if err == models.ErrUserNotExist {
ctx.Handle(404, "org.NewTeamPost(GetUserByName)", err)
@ -125,12 +123,12 @@ func NewTeamPost(ctx *middleware.Context, params martini.Params, form auth.Creat
ctx.Redirect("/org/" + org.LowerName + "/teams/" + t.LowerName)
}
func EditTeam(ctx *middleware.Context, params martini.Params) {
ctx.Data["Title"] = "Organization " + params["org"] + " Edit Team"
func EditTeam(ctx *middleware.Context) {
ctx.Data["Title"] = "Organization " + ctx.Params(":org") + " Edit Team"
ctx.HTML(200, "org/edit_team")
}
func SingleTeam(ctx *middleware.Context,params martini.Params){
ctx.Data["Title"] = "single-team"+params["org"]
ctx.HTML(200,"org/team")
func SingleTeam(ctx *middleware.Context) {
ctx.Data["Title"] = "single-team" + ctx.Params(":org")
ctx.HTML(200, "org/team")
}

@ -4,224 +4,221 @@
package repo
// import (
// "path"
// "github.com/Unknwon/com"
// "github.com/go-martini/martini"
// "github.com/gogits/gogs/models"
// "github.com/gogits/gogs/modules/base"
// "github.com/gogits/gogs/modules/middleware"
// )
// const (
// COMMITS base.TplName = "repo/commits"
// DIFF base.TplName = "repo/diff"
// )
// func Commits(ctx *middleware.Context, params martini.Params) {
// ctx.Data["IsRepoToolbarCommits"] = true
// userName := ctx.Repo.Owner.Name
// repoName := ctx.Repo.Repository.Name
// brs, err := ctx.Repo.GitRepo.GetBranches()
// if err != nil {
// ctx.Handle(500, "repo.Commits(GetBranches)", err)
// return
// } else if len(brs) == 0 {
// ctx.Handle(404, "repo.Commits(GetBranches)", nil)
// return
// }
// commitsCount, err := ctx.Repo.Commit.CommitsCount()
// if err != nil {
// ctx.Handle(500, "repo.Commits(GetCommitsCount)", err)
// return
// }
// // Calculate and validate page number.
// page, _ := com.StrTo(ctx.Query("p")).Int()
// if page < 1 {
// page = 1
// }
// lastPage := page - 1
// if lastPage < 0 {
// lastPage = 0
// }
// nextPage := page + 1
// if nextPage*50 > commitsCount {
// nextPage = 0
// }
// // Both `git log branchName` and `git log commitId` work.
// // ctx.Data["Commits"], err = ctx.Repo.Commit.CommitsByRange(page)
// // if err != nil {
// // ctx.Handle(500, "repo.Commits(CommitsByRange)", err)
// // return
// // }
// ctx.Data["Username"] = userName
// ctx.Data["Reponame"] = repoName
// ctx.Data["CommitCount"] = commitsCount
// ctx.Data["LastPageNum"] = lastPage
// ctx.Data["NextPageNum"] = nextPage
// ctx.HTML(200, COMMITS)
// }
// func SearchCommits(ctx *middleware.Context, params martini.Params) {
// ctx.Data["IsSearchPage"] = true
// ctx.Data["IsRepoToolbarCommits"] = true
// keyword := ctx.Query("q")
// if len(keyword) == 0 {
// ctx.Redirect(ctx.Repo.RepoLink + "/commits/" + ctx.Repo.BranchName)
// return
// }
// userName := params["username"]
// repoName := params["reponame"]
// brs, err := ctx.Repo.GitRepo.GetBranches()
// if err != nil {
// ctx.Handle(500, "repo.SearchCommits(GetBranches)", err)
// return
// } else if len(brs) == 0 {
// ctx.Handle(404, "repo.SearchCommits(GetBranches)", nil)
// return
// }
// // commits, err := ctx.Repo.Commit.SearchCommits(keyword)
// // if err != nil {
// // ctx.Handle(500, "repo.SearchCommits(SearchCommits)", err)
// // return
// // }
// ctx.Data["Keyword"] = keyword
// ctx.Data["Username"] = userName
// ctx.Data["Reponame"] = repoName
// // ctx.Data["CommitCount"] = commits.Len()
// // ctx.Data["Commits"] = commits
// ctx.HTML(200, COMMITS)
// }
// func Diff(ctx *middleware.Context, params martini.Params) {
// ctx.Data["IsRepoToolbarCommits"] = true
// userName := ctx.Repo.Owner.Name
// repoName := ctx.Repo.Repository.Name
// commitId := ctx.Repo.CommitId
// commit := ctx.Repo.Commit
// diff, err := models.GetDiff(models.RepoPath(userName, repoName), commitId)
// if err != nil {
// ctx.Handle(404, "repo.Diff(GetDiff)", err)
// return
// }
// isImageFile := func(name string) bool {
// // blob, err := ctx.Repo.Commit.GetBlobByPath(name)
// // if err != nil {
// // return false
// // }
// // dataRc, err := blob.Data()
// // if err != nil {
// // return false
// // }
// // buf := make([]byte, 1024)
// // n, _ := dataRc.Read(buf)
// // if n > 0 {
// // buf = buf[:n]
// // }
// // dataRc.Close()
// // _, isImage := base.IsImageFile(buf)
// // return isImage
// return false
// }
// parents := make([]string, commit.ParentCount())
// for i := 0; i < commit.ParentCount(); i++ {
// sha, err := commit.ParentId(i)
// parents[i] = sha.String()
// if err != nil {
// ctx.Handle(404, "repo.Diff", err)
// return
// }
// }
// ctx.Data["Username"] = userName
// ctx.Data["Reponame"] = repoName
// ctx.Data["IsImageFile"] = isImageFile
// ctx.Data["Title"] = commit.Summary() + " · " + base.ShortSha(commitId)
// ctx.Data["Commit"] = commit
// ctx.Data["Diff"] = diff
// ctx.Data["Parents"] = parents
// ctx.Data["DiffNotAvailable"] = diff.NumFiles() == 0
// ctx.Data["SourcePath"] = "/" + path.Join(userName, repoName, "src", commitId)
// ctx.Data["RawPath"] = "/" + path.Join(userName, repoName, "raw", commitId)
// ctx.HTML(200, DIFF)
// }
// func FileHistory(ctx *middleware.Context, params martini.Params) {
// ctx.Data["IsRepoToolbarCommits"] = true
// fileName := params["_1"]
// if len(fileName) == 0 {
// Commits(ctx, params)
// return
// }
// userName := ctx.Repo.Owner.Name
// repoName := ctx.Repo.Repository.Name
// branchName := params["branchname"]
// brs, err := ctx.Repo.GitRepo.GetBranches()
// if err != nil {
// ctx.Handle(500, "repo.FileHistory", err)
// return
// } else if len(brs) == 0 {
// ctx.Handle(404, "repo.FileHistory", nil)
// return
// }
// // commitsCount, err := ctx.Repo.GitRepo.FileCommitsCount(branchName, fileName)
// // if err != nil {
// // ctx.Handle(500, "repo.FileHistory(GetCommitsCount)", err)
// // return
// // } else if commitsCount == 0 {
// // ctx.Handle(404, "repo.FileHistory", nil)
// // return
// // }
// // Calculate and validate page number.
// // page, _ := base.StrTo(ctx.Query("p")).Int()
// // if page < 1 {
// // page = 1
// // }
// // lastPage := page - 1
// // if lastPage < 0 {
// // lastPage = 0
// // }
// // nextPage := page + 1
// // if nextPage*50 > commitsCount {
// // nextPage = 0
// // }
// // ctx.Data["Commits"], err = ctx.Repo.GitRepo.CommitsByFileAndRange(
// // branchName, fileName, page)
// // if err != nil {
// // ctx.Handle(500, "repo.FileHistory(CommitsByRange)", err)
// // return
// // }
// ctx.Data["Username"] = userName
// ctx.Data["Reponame"] = repoName
// ctx.Data["FileName"] = fileName
// // ctx.Data["CommitCount"] = commitsCount
// // ctx.Data["LastPageNum"] = lastPage
// // ctx.Data["NextPageNum"] = nextPage
// ctx.HTML(200, COMMITS)
// }
import (
"path"
"github.com/Unknwon/com"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/middleware"
)
const (
COMMITS base.TplName = "repo/commits"
DIFF base.TplName = "repo/diff"
)
func Commits(ctx *middleware.Context) {
ctx.Data["IsRepoToolbarCommits"] = true
userName := ctx.Repo.Owner.Name
repoName := ctx.Repo.Repository.Name
brs, err := ctx.Repo.GitRepo.GetBranches()
if err != nil {
ctx.Handle(500, "GetBranches", err)
return
} else if len(brs) == 0 {
ctx.Handle(404, "GetBranches", nil)
return
}
commitsCount, err := ctx.Repo.Commit.CommitsCount()
if err != nil {
ctx.Handle(500, "GetCommitsCount", err)
return
}
// Calculate and validate page number.
page, _ := com.StrTo(ctx.Query("p")).Int()
if page < 1 {
page = 1
}
lastPage := page - 1
if lastPage < 0 {
lastPage = 0
}
nextPage := page + 1
if nextPage*50 > commitsCount {
nextPage = 0
}
// Both `git log branchName` and `git log commitId` work.
ctx.Data["Commits"], err = ctx.Repo.Commit.CommitsByRange(page)
if err != nil {
ctx.Handle(500, "CommitsByRange", err)
return
}
ctx.Data["Username"] = userName
ctx.Data["Reponame"] = repoName
ctx.Data["CommitCount"] = commitsCount
ctx.Data["LastPageNum"] = lastPage
ctx.Data["NextPageNum"] = nextPage
ctx.HTML(200, COMMITS)
}
func SearchCommits(ctx *middleware.Context) {
ctx.Data["IsSearchPage"] = true
ctx.Data["IsRepoToolbarCommits"] = true
keyword := ctx.Query("q")
if len(keyword) == 0 {
ctx.Redirect(ctx.Repo.RepoLink + "/commits/" + ctx.Repo.BranchName)
return
}
userName := ctx.Params(":username")
repoName := ctx.Params(":reponame")
brs, err := ctx.Repo.GitRepo.GetBranches()
if err != nil {
ctx.Handle(500, "GetBranches", err)
return
} else if len(brs) == 0 {
ctx.Handle(404, "GetBranches", nil)
return
}
commits, err := ctx.Repo.Commit.SearchCommits(keyword)
if err != nil {
ctx.Handle(500, "repo.SearchCommits(SearchCommits)", err)
return
}
ctx.Data["Keyword"] = keyword
ctx.Data["Username"] = userName
ctx.Data["Reponame"] = repoName
ctx.Data["CommitCount"] = commits.Len()
ctx.Data["Commits"] = commits
ctx.HTML(200, COMMITS)
}
func Diff(ctx *middleware.Context) {
ctx.Data["IsRepoToolbarCommits"] = true
userName := ctx.Repo.Owner.Name
repoName := ctx.Repo.Repository.Name
commitId := ctx.Repo.CommitId
commit := ctx.Repo.Commit
diff, err := models.GetDiff(models.RepoPath(userName, repoName), commitId)
if err != nil {
ctx.Handle(404, "GetDiff", err)
return
}
isImageFile := func(name string) bool {
blob, err := ctx.Repo.Commit.GetBlobByPath(name)
if err != nil {
return false
}
dataRc, err := blob.Data()
if err != nil {
return false
}
buf := make([]byte, 1024)
n, _ := dataRc.Read(buf)
if n > 0 {
buf = buf[:n]
}
_, isImage := base.IsImageFile(buf)
return isImage
}
parents := make([]string, commit.ParentCount())
for i := 0; i < commit.ParentCount(); i++ {
sha, err := commit.ParentId(i)
parents[i] = sha.String()
if err != nil {
ctx.Handle(404, "repo.Diff", err)
return
}
}
ctx.Data["Username"] = userName
ctx.Data["Reponame"] = repoName
ctx.Data["IsImageFile"] = isImageFile
ctx.Data["Title"] = commit.Summary() + " · " + base.ShortSha(commitId)
ctx.Data["Commit"] = commit
ctx.Data["Diff"] = diff
ctx.Data["Parents"] = parents
ctx.Data["DiffNotAvailable"] = diff.NumFiles() == 0
ctx.Data["SourcePath"] = "/" + path.Join(userName, repoName, "src", commitId)
ctx.Data["RawPath"] = "/" + path.Join(userName, repoName, "raw", commitId)
ctx.HTML(200, DIFF)
}
func FileHistory(ctx *middleware.Context) {
ctx.Data["IsRepoToolbarCommits"] = true
fileName := ctx.Params("*")
if len(fileName) == 0 {
Commits(ctx)
return
}
userName := ctx.Repo.Owner.Name
repoName := ctx.Repo.Repository.Name
branchName := ctx.Params(":branchname")
brs, err := ctx.Repo.GitRepo.GetBranches()
if err != nil {
ctx.Handle(500, "GetBranches", err)
return
} else if len(brs) == 0 {
ctx.Handle(404, "GetBranches", nil)
return
}
commitsCount, err := ctx.Repo.GitRepo.FileCommitsCount(branchName, fileName)
if err != nil {
ctx.Handle(500, "repo.FileHistory(GetCommitsCount)", err)
return
} else if commitsCount == 0 {
ctx.Handle(404, "repo.FileHistory", nil)
return
}
// Calculate and validate page number.
page := com.StrTo(ctx.Query("p")).MustInt()
if page < 1 {
page = 1
}
lastPage := page - 1
if lastPage < 0 {
lastPage = 0
}
nextPage := page + 1
if nextPage*50 > commitsCount {
nextPage = 0
}
ctx.Data["Commits"], err = ctx.Repo.GitRepo.CommitsByFileAndRange(
branchName, fileName, page)
if err != nil {
ctx.Handle(500, "repo.FileHistory(CommitsByRange)", err)
return
}
ctx.Data["Username"] = userName
ctx.Data["Reponame"] = repoName
ctx.Data["FileName"] = fileName
ctx.Data["CommitCount"] = commitsCount
ctx.Data["LastPageNum"] = lastPage
ctx.Data["NextPageNum"] = nextPage
ctx.HTML(200, COMMITS)
}

@ -5,50 +5,41 @@
package repo
import (
// "io"
// "os"
// "path/filepath"
"io"
"path"
// "github.com/Unknwon/com"
// "github.com/gogits/git"
// "github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/middleware"
)
func SingleDownload(ctx *middleware.Context) {
// treename := params["_1"]
// blob, err := ctx.Repo.Commit.GetBlobByPath(treename)
// if err != nil {
// ctx.Handle(500, "repo.SingleDownload(GetBlobByPath)", err)
// return
// }
// dataRc, err := blob.Data()
// if err != nil {
// ctx.Handle(500, "repo.SingleDownload(Data)", err)
// return
// }
// buf := make([]byte, 1024)
// n, _ := dataRc.Read(buf)
// if n > 0 {
// buf = buf[:n]
// }
// defer func() {
// dataRc.Close()
// }()
// contentType, isTextFile := base.IsTextFile(buf)
// _, isImageFile := base.IsImageFile(buf)
// ctx.Res.Header().Set("Content-Type", contentType)
// if !isTextFile && !isImageFile {
// ctx.Res.Header().Set("Content-Disposition", "attachment; filename="+filepath.Base(treename))
// ctx.Res.Header().Set("Content-Transfer-Encoding", "binary")
// }
// ctx.Res.Write(buf)
// io.Copy(ctx.Res, dataRc)
treename := ctx.Params("*")
blob, err := ctx.Repo.Commit.GetBlobByPath(treename)
if err != nil {
ctx.Handle(500, "GetBlobByPath", err)
return
}
dataRc, err := blob.Data()
if err != nil {
ctx.Handle(500, "repo.SingleDownload(Data)", err)
return
}
buf := make([]byte, 1024)
n, _ := dataRc.Read(buf)
if n > 0 {
buf = buf[:n]
}
contentType, isTextFile := base.IsTextFile(buf)
_, isImageFile := base.IsImageFile(buf)
ctx.Resp.Header().Set("Content-Type", contentType)
if !isTextFile && !isImageFile {
ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+path.Base(treename))
ctx.Resp.Header().Set("Content-Transfer-Encoding", "binary")
}
ctx.Resp.Write(buf)
io.Copy(ctx.Resp, dataRc)
}

File diff suppressed because it is too large Load Diff

@ -5,13 +5,11 @@
package repo
import (
// "github.com/go-martini/martini"
// "github.com/gogits/gogs/models"
// "github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/base"
// "github.com/gogits/gogs/modules/log"
// "github.com/gogits/gogs/modules/middleware"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/middleware"
)
const (
@ -20,215 +18,215 @@ const (
RELEASE_EDIT base.TplName = "repo/release/edit"
)
// func Releases(ctx *middleware.Context) {
// ctx.Data["Title"] = "Releases"
// ctx.Data["IsRepoToolbarReleases"] = true
// ctx.Data["IsRepoReleaseNew"] = false
// rawTags, err := ctx.Repo.GitRepo.GetTags()
// if err != nil {
// ctx.Handle(500, "release.Releases(GetTags)", err)
// return
// }
// rels, err := models.GetReleasesByRepoId(ctx.Repo.Repository.Id)
// if err != nil {
// ctx.Handle(500, "release.Releases(GetReleasesByRepoId)", err)
// return
// }
// commitsCount, err := ctx.Repo.Commit.CommitsCount()
// if err != nil {
// ctx.Handle(500, "release.Releases(CommitsCount)", err)
// return
// }
// // Temproray cache commits count of used branches to speed up.
// countCache := make(map[string]int)
// tags := make([]*models.Release, len(rawTags))
// for i, rawTag := range rawTags {
// for _, rel := range rels {
// if rel.IsDraft && !ctx.Repo.IsOwner {
// continue
// }
// if rel.TagName == rawTag {
// rel.Publisher, err = models.GetUserById(rel.PublisherId)
// if err != nil {
// ctx.Handle(500, "release.Releases(GetUserById)", err)
// return
// }
// // Get corresponding target if it's not the current branch.
// if ctx.Repo.BranchName != rel.Target {
// // Get count if not exists.
// if _, ok := countCache[rel.Target]; !ok {
// commit, err := ctx.Repo.GitRepo.GetCommitOfTag(rel.TagName)
// if err != nil {
// ctx.Handle(500, "release.Releases(GetCommitOfTag)", err)
// return
// }
// countCache[rel.Target], err = commit.CommitsCount()
// if err != nil {
// ctx.Handle(500, "release.Releases(CommitsCount2)", err)
// return
// }
// }
// rel.NumCommitsBehind = countCache[rel.Target] - rel.NumCommits
// } else {
// rel.NumCommitsBehind = commitsCount - rel.NumCommits
// }
// rel.Note = base.RenderMarkdownString(rel.Note, ctx.Repo.RepoLink)
// tags[i] = rel
// break
// }
// }
// if tags[i] == nil {
// commit, err := ctx.Repo.GitRepo.GetCommitOfTag(rawTag)
// if err != nil {
// ctx.Handle(500, "release.Releases(GetCommitOfTag2)", err)
// return
// }
// tags[i] = &models.Release{
// Title: rawTag,
// TagName: rawTag,
// Sha1: commit.Id.String(),
// }
// tags[i].NumCommits, err = ctx.Repo.GitRepo.CommitsCount(commit.Id.String())
// if err != nil {
// ctx.Handle(500, "release.Releases(CommitsCount)", err)
// return
// }
// tags[i].NumCommitsBehind = commitsCount - tags[i].NumCommits
// }
// }
// models.SortReleases(tags)
// ctx.Data["Releases"] = tags
// ctx.HTML(200, RELEASES)
// }
// func NewRelease(ctx *middleware.Context) {
// if !ctx.Repo.IsOwner {
// ctx.Handle(403, "release.ReleasesNew", nil)
// return
// }
// ctx.Data["Title"] = "New Release"
// ctx.Data["IsRepoToolbarReleases"] = true
// ctx.Data["IsRepoReleaseNew"] = true
// ctx.HTML(200, RELEASE_NEW)
// }
// func NewReleasePost(ctx *middleware.Context, form auth.NewReleaseForm) {
// if !ctx.Repo.IsOwner {
// ctx.Handle(403, "release.ReleasesNew", nil)
// return
// }
// ctx.Data["Title"] = "New Release"
// ctx.Data["IsRepoToolbarReleases"] = true
// ctx.Data["IsRepoReleaseNew"] = true
// if ctx.HasError() {
// ctx.HTML(200, RELEASE_NEW)
// return
// }
// commitsCount, err := ctx.Repo.Commit.CommitsCount()
// if err != nil {
// ctx.Handle(500, "release.ReleasesNewPost(CommitsCount)", err)
// return
// }
// if !ctx.Repo.GitRepo.IsBranchExist(form.Target) {
// ctx.RenderWithErr("Target branch does not exist", "release/new", &form)
// return
// }
// rel := &models.Release{
// RepoId: ctx.Repo.Repository.Id,
// PublisherId: ctx.User.Id,
// Title: form.Title,
// TagName: form.TagName,
// Target: form.Target,
// Sha1: ctx.Repo.Commit.Id.String(),
// NumCommits: commitsCount,
// Note: form.Content,
// IsDraft: len(form.Draft) > 0,
// IsPrerelease: form.Prerelease,
// }
// if err = models.CreateRelease(ctx.Repo.GitRepo, rel); err != nil {
// if err == models.ErrReleaseAlreadyExist {
// ctx.RenderWithErr("Release with this tag name has already existed", "release/new", &form)
// } else {
// ctx.Handle(500, "release.ReleasesNewPost(IsReleaseExist)", err)
// }
// return
// }
// log.Trace("%s Release created: %s/%s:%s", ctx.Req.RequestURI, ctx.User.LowerName, ctx.Repo.Repository.Name, form.TagName)
// ctx.Redirect(ctx.Repo.RepoLink + "/releases")
// }
// func EditRelease(ctx *middleware.Context, params martini.Params) {