From 3144fac03cb468aa28c0ade7687b1d4df1de6abb Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 27 Mar 2014 12:48:29 -0400 Subject: [PATCH] IP: RC Code Review --- README.md | 3 +-- README_ZH.md | 6 +++++- models/action.go | 21 +++++++++----------- models/issue.go | 25 +++++++++++++++++++++--- models/models_test.go | 23 +++++++++++++--------- models/repo.go | 41 +++++++++++++++++++++++---------------- routers/repo/issue.go | 22 +++++++++------------ templates/issue/list.tmpl | 8 ++++---- 8 files changed, 88 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index 1177c17aac..9d1d7ef569 100644 --- a/README.md +++ b/README.md @@ -61,5 +61,4 @@ This project was launched by [Unknown](https://github.com/Unknwon) and [lunny](h ## License -Gogs is under the MIT License. -See the [LICENSE file](https://github.com/gogits/gogs/blob/master/LICENSE) for the full license text. +Gogs is under the MIT License. See the [LICENSE](https://github.com/gogits/gogs/blob/master/LICENSE) file for the full license text. diff --git a/README_ZH.md b/README_ZH.md index 34f5dfde5f..9698ce4faa 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -53,4 +53,8 @@ Gogs 完全使用 Go 语言来实现对 Git 数据的操作,实现 **零** 依 ## 贡献成员 -本项目最初由 [Unknown](https://github.com/Unknwon) 和 [lunny](https://github.com/lunny) 发起,随后 [fuxiaohei](https://github.com/fuxiaohei) 与 [slene](https://github.com/slene) 加入到开发团队。您可以通过查看 [贡献者页面](https://github.com/gogits/gogs/graphs/contributors) 获取完整的贡献者列表。 \ No newline at end of file +本项目最初由 [Unknown](https://github.com/Unknwon) 和 [lunny](https://github.com/lunny) 发起,随后 [fuxiaohei](https://github.com/fuxiaohei) 与 [slene](https://github.com/slene) 加入到开发团队。您可以通过查看 [贡献者页面](https://github.com/gogits/gogs/graphs/contributors) 获取完整的贡献者列表。 + +## 授权许可 + +Gogs 采用 MIT 开源授权许可证,完整的授权说明已放置在 [LICENSE](https://github.com/gogits/gogs/blob/master/LICENSE) 文件中。 \ No newline at end of file diff --git a/models/action.go b/models/action.go index 46704eef07..9d99df8546 100644 --- a/models/action.go +++ b/models/action.go @@ -60,10 +60,10 @@ func (a Action) GetContent() string { // CommitRepoAction adds new action for committing repository. func CommitRepoAction(userId int64, userName string, - repoId int64, repoName string, refName string, commits *base.PushCommits) error { + repoId int64, repoName string, refName string, commit *base.PushCommits) error { log.Trace("action.CommitRepoAction(start): %d/%s", userId, repoName) - bs, err := json.Marshal(commits) + bs, err := json.Marshal(commit) if err != nil { log.Error("action.CommitRepoAction(json): %d/%s", userId, repoName) return err @@ -91,16 +91,13 @@ func CommitRepoAction(userId int64, userName string, return nil } -// NewRepoAction records action for create repository. -func NewRepoAction(user *User, repo *Repository) error { - _, err := orm.InsertOne(&Action{ - UserId: user.Id, - ActUserId: user.Id, - ActUserName: user.Name, - OpType: OP_CREATE_REPO, - RepoId: repo.Id, - RepoName: repo.Name, - }) +// NewRepoAction adds new action for creating repository. +func NewRepoAction(user *User, repo *Repository) (err error) { + if err = NotifyWatchers(&Action{ActUserId: user.Id, ActUserName: user.Name, OpType: OP_CREATE_REPO, + RepoId: repo.Id, RepoName: repo.Name}); err != nil { + log.Error("action.NewRepoAction(notify watchers): %d/%s", user.Id, repo.Name) + return err + } log.Trace("action.NewRepoAction: %s/%s", user.LowerName, repo.LowerName) return err diff --git a/models/issue.go b/models/issue.go index 97e51a0c58..6b657b7b90 100644 --- a/models/issue.go +++ b/models/issue.go @@ -37,7 +37,7 @@ type Issue struct { } // CreateIssue creates new issue for repository. -func CreateIssue(userId, repoId, milestoneId, assigneeId int64, name, labels, content string, isPull bool) (*Issue, error) { +func CreateIssue(userId, repoId, milestoneId, assigneeId int64, issueCount int, name, labels, content string, isPull bool) (*Issue, error) { count, err := GetIssueCount(repoId) if err != nil { return nil, err @@ -46,6 +46,10 @@ func CreateIssue(userId, repoId, milestoneId, assigneeId int64, name, labels, co // TODO: find out mentions mentions := "" + sess := orm.NewSession() + defer sess.Close() + sess.Begin() + issue := &Issue{ Index: count + 1, Name: name, @@ -58,8 +62,23 @@ func CreateIssue(userId, repoId, milestoneId, assigneeId int64, name, labels, co Mentions: mentions, Content: content, } - _, err = orm.Insert(issue) - return issue, err + if _, err = sess.Insert(issue); err != nil { + sess.Rollback() + return nil, err + } + + rawSql := "UPDATE `repository` SET num_issues = num_issues + 1 WHERE id = ?" + if _, err = sess.Exec(rawSql, repoId); err != nil { + sess.Rollback() + return nil, err + } + + if err = sess.Commit(); err != nil { + sess.Rollback() + return nil, err + } + + return issue, nil } // GetIssueCount returns count of issues in the repository. diff --git a/models/models_test.go b/models/models_test.go index d0f734d678..b808f41d21 100644 --- a/models/models_test.go +++ b/models/models_test.go @@ -10,12 +10,12 @@ import ( "github.com/lunny/xorm" _ "github.com/mattn/go-sqlite3" + . "github.com/smartystreets/goconvey/convey" + + "github.com/gogits/gogs/modules/base" ) func init() { - LoadModelsConfig() - NewEngine() - var err error orm, err = xorm.NewEngine("sqlite3", "./test.db") if err != nil { @@ -25,26 +25,31 @@ func init() { orm.ShowSQL = true orm.ShowDebug = true - err = orm.Sync(&User{}, &Repo{}) + err = orm.Sync(&User{}, &Repository{}) if err != nil { fmt.Println(err) } - root = "test" + base.RepoRootPath = "test" } func TestCreateRepository(t *testing.T) { - user := User{Id: 1, Type: Individual} - _, err := CreateRepository(&user, "test") + user := User{Id: 1, Name: "foobar", Type: UT_INDIVIDUAL} + _, err := CreateRepository(&user, "test", "", "", "test repo desc", false, false) if err != nil { t.Error(err) } } func TestDeleteRepository(t *testing.T) { - user := User{Id: 1, Type: Individual} - err := DeleteRepository(&user, "test") + err := DeleteRepository(1, 1, "foobar") if err != nil { t.Error(err) } } + +func TestCommitRepoAction(t *testing.T) { + Convey("Create a commit repository action", t, func() { + + }) +} diff --git a/models/repo.go b/models/repo.go index 1f638fe14f..c8ffc851f9 100644 --- a/models/repo.go +++ b/models/repo.go @@ -72,20 +72,22 @@ func NewRepoContext() { // Repository represents a git repository. type Repository struct { - Id int64 - OwnerId int64 `xorm:"unique(s)"` - ForkId int64 - LowerName string `xorm:"unique(s) index not null"` - Name string `xorm:"index not null"` - Description string - Website string - NumWatches int - NumStars int - NumForks int - IsPrivate bool - IsBare bool - Created time.Time `xorm:"created"` - Updated time.Time `xorm:"updated"` + Id int64 + OwnerId int64 `xorm:"unique(s)"` + ForkId int64 + LowerName string `xorm:"unique(s) index not null"` + Name string `xorm:"index not null"` + Description string + Website string + NumWatches int + NumStars int + NumForks int + NumIssues int + NumClosedIssues int + IsPrivate bool + IsBare bool + Created time.Time `xorm:"created"` + Updated time.Time `xorm:"updated"` } // IsRepositoryExist returns true if the repository with given name under user has already existed. @@ -491,11 +493,16 @@ func NotifyWatchers(act *Action) error { if err != nil { return errors.New("repo.NotifyWatchers(get watches): " + err.Error()) } - watches = append(watches, Watch{UserId: act.ActUserId}) + + // Add feed for actioner. + act.UserId = act.ActUserId + if _, err = orm.InsertOne(act); err != nil { + return errors.New("repo.NotifyWatchers(create action): " + err.Error()) + } for i := range watches { - if act.ActUserId == watches[i].UserId && i > 0 { - continue // Do not add twice in case author watches his/her repository. + if act.ActUserId == watches[i].UserId { + continue } act.UserId = watches[i].UserId diff --git a/routers/repo/issue.go b/routers/repo/issue.go index 49a098d6d6..effb1fab37 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -17,23 +17,22 @@ import ( "github.com/gogits/gogs/modules/middleware" ) -func Issues(ctx *middleware.Context, params martini.Params) { +func Issues(ctx *middleware.Context) { ctx.Data["Title"] = "Issues" ctx.Data["IsRepoToolbarIssues"] = true ctx.Data["IsRepoToolbarIssuesList"] = true - milestoneId, _ := base.StrTo(params["milestone"]).Int() - page, _ := base.StrTo(params["page"]).Int() + milestoneId, _ := base.StrTo(ctx.Query("milestone")).Int() + page, _ := base.StrTo(ctx.Query("page")).Int() // Get issues. issues, err := models.GetIssues(0, ctx.Repo.Repository.Id, 0, - int64(milestoneId), page, params["state"] == "closed", false, params["labels"], params["sortType"]) + int64(milestoneId), page, ctx.Query("state") == "closed", false, ctx.Query("labels"), ctx.Query("sortType")) if err != nil { ctx.Handle(200, "issue.Issues: %v", err) return } - var closedCount int // Get posters. for i := range issues { u, err := models.GetUserById(issues[i].PosterId) @@ -41,17 +40,14 @@ func Issues(ctx *middleware.Context, params martini.Params) { ctx.Handle(200, "issue.Issues(get poster): %v", err) return } - - if issues[i].IsClosed { - closedCount++ - } issues[i].Poster = u } ctx.Data["Issues"] = issues - ctx.Data["IssueCount"] = len(issues) - ctx.Data["OpenCount"] = len(issues) - closedCount - ctx.Data["ClosedCount"] = closedCount + ctx.Data["IssueCount"] = ctx.Repo.Repository.NumIssues + ctx.Data["OpenCount"] = ctx.Repo.Repository.NumIssues - ctx.Repo.Repository.NumClosedIssues + ctx.Data["ClosedCount"] = ctx.Repo.Repository.NumClosedIssues + ctx.Data["IsShowClosed"] = ctx.Query("state") == "closed" ctx.HTML(200, "issue/list") } @@ -71,7 +67,7 @@ func CreateIssue(ctx *middleware.Context, params martini.Params, form auth.Creat } issue, err := models.CreateIssue(ctx.User.Id, ctx.Repo.Repository.Id, form.MilestoneId, form.AssigneeId, - form.IssueName, form.Labels, form.Content, false) + ctx.Repo.Repository.NumIssues, form.IssueName, form.Labels, form.Content, false) if err != nil { ctx.Handle(200, "issue.CreateIssue", err) return diff --git a/templates/issue/list.tmpl b/templates/issue/list.tmpl index 60f22a0d31..401a53a3ed 100644 --- a/templates/issue/list.tmpl +++ b/templates/issue/list.tmpl @@ -7,15 +7,15 @@