| @@ -0,0 +1,2 @@ | |||
| DROP DATABASE gogs; | |||
| CREATE DATABASE IF NOT EXISTS gogs CHARACTER SET utf8 COLLATE utf8_general_ci; | |||
| @@ -19,7 +19,7 @@ import ( | |||
| // Test that go1.2 tag above is included in builds. main.go refers to this definition. | |||
| const go12tag = true | |||
| const APP_VER = "0.1.9.0328 Alpha" | |||
| const APP_VER = "0.1.9.0329 Alpha" | |||
| func init() { | |||
| base.AppVer = APP_VER | |||
| @@ -31,6 +31,7 @@ type Action struct { | |||
| OpType int // Operations: CREATE DELETE STAR ... | |||
| ActUserId int64 // Action user id. | |||
| ActUserName string // Action user name. | |||
| ActEmail string | |||
| RepoId int64 | |||
| RepoName string | |||
| RefName string | |||
| @@ -46,6 +47,10 @@ func (a Action) GetActUserName() string { | |||
| return a.ActUserName | |||
| } | |||
| func (a Action) GetActEmail() string { | |||
| return a.ActEmail | |||
| } | |||
| func (a Action) GetRepoName() string { | |||
| return a.RepoName | |||
| } | |||
| @@ -59,7 +64,7 @@ func (a Action) GetContent() string { | |||
| } | |||
| // CommitRepoAction adds new action for committing repository. | |||
| func CommitRepoAction(userId int64, userName string, | |||
| func CommitRepoAction(userId int64, userName, actEmail string, | |||
| repoId int64, repoName string, refName string, commit *base.PushCommits) error { | |||
| log.Trace("action.CommitRepoAction(start): %d/%s", userId, repoName) | |||
| @@ -69,8 +74,8 @@ func CommitRepoAction(userId int64, userName string, | |||
| return err | |||
| } | |||
| if err = NotifyWatchers(&Action{ActUserId: userId, ActUserName: userName, OpType: OP_COMMIT_REPO, | |||
| Content: string(bs), RepoId: repoId, RepoName: repoName, RefName: refName}); err != nil { | |||
| if err = NotifyWatchers(&Action{ActUserId: userId, ActUserName: userName, ActEmail: actEmail, | |||
| OpType: OP_COMMIT_REPO, Content: string(bs), RepoId: repoId, RepoName: repoName, RefName: refName}); err != nil { | |||
| log.Error("action.CommitRepoAction(notify watchers): %d/%s", userId, repoName) | |||
| return err | |||
| } | |||
| @@ -93,8 +98,8 @@ func CommitRepoAction(userId int64, userName string, | |||
| // 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 { | |||
| if err = NotifyWatchers(&Action{ActUserId: user.Id, ActUserName: user.Name, ActEmail: user.Email, | |||
| 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 | |||
| } | |||
| @@ -478,6 +478,7 @@ func (a argInt) Get(i int, args ...int) (r int) { | |||
| type Actioner interface { | |||
| GetOpType() int | |||
| GetActUserName() string | |||
| GetActEmail() string | |||
| GetRepoName() string | |||
| GetBranch() string | |||
| GetContent() string | |||
| @@ -506,15 +507,23 @@ const ( | |||
| <div><img src="%s?s=16" alt="user-avatar"/> %s</div>` | |||
| ) | |||
| type PushCommit struct { | |||
| Sha1 string | |||
| Message string | |||
| AuthorEmail string | |||
| AuthorName string | |||
| } | |||
| type PushCommits struct { | |||
| Len int | |||
| Commits [][]string | |||
| Commits []*PushCommit | |||
| } | |||
| // ActionDesc accepts int that represents action operation type | |||
| // and returns the description. | |||
| func ActionDesc(act Actioner, avatarLink string) string { | |||
| func ActionDesc(act Actioner) string { | |||
| actUserName := act.GetActUserName() | |||
| email := act.GetActEmail() | |||
| repoName := act.GetRepoName() | |||
| repoLink := actUserName + "/" + repoName | |||
| branch := act.GetBranch() | |||
| @@ -529,7 +538,7 @@ func ActionDesc(act Actioner, avatarLink string) string { | |||
| } | |||
| buf := bytes.NewBuffer([]byte("\n")) | |||
| for _, commit := range push.Commits { | |||
| buf.WriteString(fmt.Sprintf(TPL_COMMIT_REPO_LI, avatarLink, repoLink, commit[0], commit[0][:7], commit[1]) + "\n") | |||
| buf.WriteString(fmt.Sprintf(TPL_COMMIT_REPO_LI, AvatarLink(commit.AuthorEmail), repoLink, commit.Sha1, commit.Sha1[:7], commit.Message) + "\n") | |||
| } | |||
| if push.Len > 3 { | |||
| buf.WriteString(fmt.Sprintf(`<div><a href="/%s/%s/commits/%s">%d other commits >></a></div>`, actUserName, repoName, branch, push.Len)) | |||
| @@ -539,7 +548,7 @@ func ActionDesc(act Actioner, avatarLink string) string { | |||
| case 6: // Create issue. | |||
| infos := strings.SplitN(content, "|", 2) | |||
| return fmt.Sprintf(TPL_CREATE_Issue, actUserName, actUserName, repoLink, infos[0], repoLink, infos[0], | |||
| avatarLink, infos[1]) | |||
| AvatarLink(email), infos[1]) | |||
| default: | |||
| return "invalid type" | |||
| } | |||
| @@ -105,7 +105,7 @@ func CreateIssue(ctx *middleware.Context, params martini.Params, form auth.Creat | |||
| } | |||
| // Notify watchers. | |||
| if err = models.NotifyWatchers(&models.Action{ActUserId: ctx.User.Id, ActUserName: ctx.User.Name, | |||
| if err = models.NotifyWatchers(&models.Action{ActUserId: ctx.User.Id, ActUserName: ctx.User.Name, ActEmail: ctx.User.Email, | |||
| OpType: models.OP_CREATE_ISSUE, Content: fmt.Sprintf("%d|%s", issue.Index, issue.Name), | |||
| RepoId: ctx.Repo.Repository.Id, RepoName: ctx.Repo.Repository.Name, RefName: ""}); err != nil { | |||
| ctx.Handle(200, "issue.CreateIssue", err) | |||
| @@ -221,6 +221,7 @@ func UpdateIssue(ctx *middleware.Context, params martini.Params, form auth.Creat | |||
| } | |||
| func Comment(ctx *middleware.Context, params martini.Params) { | |||
| fmt.Println(ctx.Query("change_status")) | |||
| if !ctx.Repo.IsValid { | |||
| ctx.Handle(404, "issue.Comment(invalid repo):", nil) | |||
| } | |||
| @@ -276,11 +276,9 @@ func Http(ctx *middleware.Context, params martini.Params) { | |||
| } | |||
| prefix := path.Join("/", username, params["reponame"]) | |||
| server := &webdav.Server{ | |||
| Fs: webdav.Dir(models.RepoPath(username, reponame)), | |||
| TrimPrefix: prefix, | |||
| Listings: true, | |||
| } | |||
| server := webdav.NewServer( | |||
| models.RepoPath(username, reponame), | |||
| prefix, true) | |||
| server.ServeHTTP(ctx.ResponseWriter, ctx.Req) | |||
| } | |||
| @@ -279,7 +279,7 @@ func Feeds(ctx *middleware.Context, form auth.FeedsForm) { | |||
| feeds := make([]string, len(actions)) | |||
| for i := range actions { | |||
| feeds[i] = fmt.Sprintf(TPL_FEED, base.ActionIcon(actions[i].OpType), | |||
| base.TimeSince(actions[i].Created), base.ActionDesc(actions[i], ctx.User.AvatarLink())) | |||
| base.TimeSince(actions[i].Created), base.ActionDesc(actions[i])) | |||
| } | |||
| ctx.JSON(200, &feeds) | |||
| } | |||
| @@ -32,11 +32,10 @@ | |||
| {{if eq .TabName "activity"}} | |||
| <div class="tab-pane active"> | |||
| <ul class="list-unstyled activity-list"> | |||
| {{$avatarLink := .Owner.AvatarLink}} | |||
| {{range .Feeds}} | |||
| <li> | |||
| <i class="icon fa fa-{{ActionIcon .OpType}}"></i> | |||
| <div class="info"><span class="meta">{{TimeSince .Created}}</span><br>{{ActionDesc . $avatarLink | str2html}}</div> | |||
| <div class="info"><span class="meta">{{TimeSince .Created}}</span><br>{{ActionDesc . | str2html}}</div> | |||
| <span class="clearfix"></span> | |||
| </li> | |||
| {{else}} | |||
| @@ -130,18 +130,26 @@ func runUpdate(c *cli.Context) { | |||
| return | |||
| } | |||
| commits := make([][]string, 0) | |||
| commits := make([]*base.PushCommit, 0) | |||
| var maxCommits = 3 | |||
| var actEmail string | |||
| for e := l.Front(); e != nil; e = e.Next() { | |||
| commit := e.Value.(*git.Commit) | |||
| commits = append(commits, []string{commit.Id().String(), commit.Message()}) | |||
| if actEmail == "" { | |||
| actEmail = commit.Committer.Email | |||
| } | |||
| commits = append(commits, | |||
| &base.PushCommit{commit.Id().String(), | |||
| commit.Message(), | |||
| commit.Author.Email, | |||
| commit.Author.Name}) | |||
| if len(commits) >= maxCommits { | |||
| break | |||
| } | |||
| } | |||
| //commits = append(commits, []string{lastCommit.Id().String(), lastCommit.Message()}) | |||
| if err = models.CommitRepoAction(int64(sUserId), userName, | |||
| if err = models.CommitRepoAction(int64(sUserId), userName, actEmail, | |||
| repos.Id, repoName, git.BranchName(refName), &base.PushCommits{l.Len(), commits}); err != nil { | |||
| log.Error("runUpdate.models.CommitRepoAction: %v", err) | |||
| } | |||