diff options
author | Unknwon <u@gogs.io> | 2016-08-16 23:06:38 -0700 |
---|---|---|
committer | Unknwon <u@gogs.io> | 2016-08-16 23:06:38 -0700 |
commit | a00c932bbc5a76ba9b0457d7d20cd1d5fc185b3d (patch) | |
tree | 8992a05aa3d7a72ea8e61047efc8cbab47944f33 /models/action.go | |
parent | 6f9a95f83020e215ebe3942bd541da34791dd043 (diff) | |
download | gitea-a00c932bbc5a76ba9b0457d7d20cd1d5fc185b3d.tar.gz gitea-a00c932bbc5a76ba9b0457d7d20cd1d5fc185b3d.zip |
General code quality improvement
Diffstat (limited to 'models/action.go')
-rw-r--r-- | models/action.go | 141 |
1 files changed, 64 insertions, 77 deletions
diff --git a/models/action.go b/models/action.go index 8ac599c0e1..54695417a7 100644 --- a/models/action.go +++ b/models/action.go @@ -71,7 +71,6 @@ type Action struct { OpType ActionType ActUserID int64 // Action user id. ActUserName string // Action user name. - ActEmail string ActAvatar string `xorm:"-"` RepoID int64 RepoUserName string @@ -106,10 +105,6 @@ func (a *Action) ShortActUserName() string { return base.EllipsisString(a.ActUserName, 20) } -func (a *Action) GetActEmail() string { - return a.ActEmail -} - func (a *Action) GetRepoUserName() string { return a.RepoUserName } @@ -181,7 +176,6 @@ func newRepoAction(e Engine, u *User, repo *Repository) (err error) { if err = notifyWatchers(e, &Action{ ActUserID: u.ID, ActUserName: u.Name, - ActEmail: u.Email, OpType: ACTION_CREATE_REPO, RepoID: repo.ID, RepoUserName: repo.Owner.Name, @@ -204,7 +198,6 @@ func renameRepoAction(e Engine, actUser *User, oldRepoName string, repo *Reposit if err = notifyWatchers(e, &Action{ ActUserID: actUser.ID, ActUserName: actUser.Name, - ActEmail: actUser.Email, OpType: ACTION_RENAME_REPO, RepoID: repo.ID, RepoUserName: repo.Owner.Name, @@ -305,8 +298,8 @@ func (push *PushCommits) AvatarLink(email string) string { return push.avatars[email] } -// updateIssuesCommit checks if issues are manipulated by commit message. -func updateIssuesCommit(u *User, repo *Repository, repoUserName, repoName string, commits []*PushCommit) error { +// UpdateIssuesCommit checks if issues are manipulated by commit message. +func UpdateIssuesCommit(doer *User, repo *Repository, commits []*PushCommit) error { // Commits are appended in the reverse order. for i := len(commits) - 1; i >= 0; i-- { c := commits[i] @@ -322,7 +315,7 @@ func updateIssuesCommit(u *User, repo *Repository, repoUserName, repoName string // Add repo name if missing if ref[0] == '#' { - ref = fmt.Sprintf("%s/%s%s", repoUserName, repoName, ref) + ref = fmt.Sprintf("%s%s", repo.FullName(), ref) } else if !strings.Contains(ref, "/") { // FIXME: We don't support User#ID syntax yet // return ErrNotImplemented @@ -342,9 +335,8 @@ func updateIssuesCommit(u *User, repo *Repository, repoUserName, repoName string } refMarked[issue.ID] = true - url := fmt.Sprintf("%s/%s/%s/commit/%s", setting.AppSubUrl, repoUserName, repoName, c.Sha1) - message := fmt.Sprintf(`<a href="%s">%s</a>`, url, c.Message) - if err = CreateRefComment(u, repo, issue, message, c.Sha1); err != nil { + message := fmt.Sprintf(`<a href="%s/commit/%s">%s</a>`, repo.Link(), c.Sha1, c.Message) + if err = CreateRefComment(doer, repo, issue, message, c.Sha1); err != nil { return err } } @@ -361,7 +353,7 @@ func updateIssuesCommit(u *User, repo *Repository, repoUserName, repoName string // Add repo name if missing if ref[0] == '#' { - ref = fmt.Sprintf("%s/%s%s", repoUserName, repoName, ref) + ref = fmt.Sprintf("%s%s", repo.FullName(), ref) } else if !strings.Contains(ref, "/") { // We don't support User#ID syntax yet // return ErrNotImplemented @@ -385,7 +377,7 @@ func updateIssuesCommit(u *User, repo *Repository, repoUserName, repoName string continue } - if err = issue.ChangeStatus(u, repo, true); err != nil { + if err = issue.ChangeStatus(doer, repo, true); err != nil { return err } } @@ -401,7 +393,7 @@ func updateIssuesCommit(u *User, repo *Repository, repoUserName, repoName string // Add repo name if missing if ref[0] == '#' { - ref = fmt.Sprintf("%s/%s%s", repoUserName, repoName, ref) + ref = fmt.Sprintf("%s%s", repo.FullName(), ref) } else if !strings.Contains(ref, "/") { // We don't support User#ID syntax yet // return ErrNotImplemented @@ -425,7 +417,7 @@ func updateIssuesCommit(u *User, repo *Repository, repoUserName, repoName string continue } - if err = issue.ChangeStatus(u, repo, false); err != nil { + if err = issue.ChangeStatus(doer, repo, false); err != nil { return err } } @@ -433,27 +425,26 @@ func updateIssuesCommit(u *User, repo *Repository, repoUserName, repoName string return nil } -// CommitRepoAction adds new action for committing repository. -// TODO: use CommitRepoActionOptions -func CommitRepoAction( - userID, repoUserID int64, - userName, actEmail string, - repoID int64, - repoUserName, repoName string, - refFullName string, - commit *PushCommits, - oldCommitID string, newCommitID string) error { +type CommitRepoActionOptions struct { + PusherName string + RepoOwnerID int64 + RepoName string + RefFullName string + OldCommitID string + NewCommitID string + Commits *PushCommits +} - u, err := GetUserByID(userID) +// CommitRepoAction adds new commit actio to the repository, and prepare corresponding webhooks. +func CommitRepoAction(opts CommitRepoActionOptions) error { + pusher, err := GetUserByName(opts.PusherName) if err != nil { - return fmt.Errorf("GetUserByID: %v", err) + return fmt.Errorf("GetUserByName [%s]: %v", opts.PusherName, err) } - repo, err := GetRepositoryByName(repoUserID, repoName) + repo, err := GetRepositoryByName(opts.RepoOwnerID, opts.RepoName) if err != nil { - return fmt.Errorf("GetRepositoryByName: %v", err) - } else if err = repo.GetOwner(); err != nil { - return fmt.Errorf("GetOwner: %v", err) + return fmt.Errorf("GetRepositoryByName [owner_id: %d, name: %s]: %v", opts.RepoOwnerID, opts.RepoName, err) } // Change repository bare status and update last updated time. @@ -465,40 +456,39 @@ func CommitRepoAction( isNewBranch := false opType := ACTION_COMMIT_REPO // Check it's tag push or branch. - if strings.HasPrefix(refFullName, "refs/tags/") { + if strings.HasPrefix(opts.RefFullName, git.TAG_PREFIX) { opType = ACTION_PUSH_TAG - commit = &PushCommits{} + opts.Commits = &PushCommits{} } else { - // if not the first commit, set the compareUrl - if !strings.HasPrefix(oldCommitID, "0000000") { - commit.CompareURL = repo.ComposeCompareURL(oldCommitID, newCommitID) - } else { + // if not the first commit, set the compare URL. + if opts.OldCommitID == git.EMPTY_SHA { isNewBranch = true + } else { + opts.Commits.CompareURL = repo.ComposeCompareURL(opts.OldCommitID, opts.NewCommitID) } - if err = updateIssuesCommit(u, repo, repoUserName, repoName, commit.Commits); err != nil { + if err = UpdateIssuesCommit(pusher, repo, opts.Commits.Commits); err != nil { log.Error(4, "updateIssuesCommit: %v", err) } } - if len(commit.Commits) > setting.UI.FeedMaxCommitNum { - commit.Commits = commit.Commits[:setting.UI.FeedMaxCommitNum] + if len(opts.Commits.Commits) > setting.UI.FeedMaxCommitNum { + opts.Commits.Commits = opts.Commits.Commits[:setting.UI.FeedMaxCommitNum] } - bs, err := json.Marshal(commit) + data, err := json.Marshal(opts.Commits) if err != nil { return fmt.Errorf("Marshal: %v", err) } - refName := git.RefEndName(refFullName) + refName := git.RefEndName(opts.RefFullName) if err = NotifyWatchers(&Action{ - ActUserID: u.ID, - ActUserName: userName, - ActEmail: actEmail, + ActUserID: pusher.ID, + ActUserName: pusher.Name, OpType: opType, - Content: string(bs), + Content: string(data), RepoID: repo.ID, - RepoUserName: repoUserName, + RepoUserName: repo.MustOwner().Name, RepoName: repo.Name, RefName: refName, IsPrivate: repo.IsPrivate, @@ -506,21 +496,20 @@ func CommitRepoAction( return fmt.Errorf("NotifyWatchers: %v", err) } - pusher, err := GetUserByName(userName) - if err != nil { - return fmt.Errorf("GetUserByName: %v", err) - } - apiPusher := pusher.APIFormat() + defer func() { + go HookQueue.Add(repo.ID) + }() + apiPusher := pusher.APIFormat() apiRepo := repo.APIFormat(nil) switch opType { case ACTION_COMMIT_REPO: // Push if err = PrepareWebhooks(repo, HOOK_EVENT_PUSH, &api.PushPayload{ - Ref: refFullName, - Before: oldCommitID, - After: newCommitID, - CompareURL: setting.AppUrl + commit.CompareURL, - Commits: commit.ToApiPayloadCommits(repo.HTMLURL()), + Ref: opts.RefFullName, + Before: opts.OldCommitID, + After: opts.NewCommitID, + CompareURL: setting.AppUrl + opts.Commits.CompareURL, + Commits: opts.Commits.ToApiPayloadCommits(repo.HTMLURL()), Repo: apiRepo, Pusher: apiPusher, Sender: apiPusher, @@ -549,44 +538,42 @@ func CommitRepoAction( return nil } -func transferRepoAction(e Engine, actUser, oldOwner, newOwner *User, repo *Repository) (err error) { +func transferRepoAction(e Engine, doer, oldOwner *User, repo *Repository) (err error) { if err = notifyWatchers(e, &Action{ - ActUserID: actUser.ID, - ActUserName: actUser.Name, - ActEmail: actUser.Email, + ActUserID: doer.ID, + ActUserName: doer.Name, OpType: ACTION_TRANSFER_REPO, RepoID: repo.ID, - RepoUserName: newOwner.Name, + RepoUserName: repo.Owner.Name, RepoName: repo.Name, IsPrivate: repo.IsPrivate, Content: path.Join(oldOwner.Name, repo.Name), }); err != nil { - return fmt.Errorf("notify watchers '%d/%d': %v", actUser.ID, repo.ID, err) + return fmt.Errorf("notifyWatchers: %v", err) } // Remove watch for organization. - if repo.Owner.IsOrganization() { - if err = watchRepo(e, repo.Owner.ID, repo.ID, false); err != nil { - return fmt.Errorf("watch repository: %v", err) + if oldOwner.IsOrganization() { + if err = watchRepo(e, oldOwner.ID, repo.ID, false); err != nil { + return fmt.Errorf("watchRepo [false]: %v", err) } } - log.Trace("action.transferRepoAction: %s/%s", actUser.Name, repo.Name) return nil } -// TransferRepoAction adds new action for transferring repository. -func TransferRepoAction(actUser, oldOwner, newOwner *User, repo *Repository) error { - return transferRepoAction(x, actUser, oldOwner, newOwner, repo) +// TransferRepoAction adds new action for transferring repository, +// the Owner field of repository is assumed to be new owner. +func TransferRepoAction(doer, oldOwner *User, repo *Repository) error { + return transferRepoAction(x, doer, oldOwner, repo) } -func mergePullRequestAction(e Engine, actUser *User, repo *Repository, pull *Issue) error { +func mergePullRequestAction(e Engine, doer *User, repo *Repository, issue *Issue) error { return notifyWatchers(e, &Action{ - ActUserID: actUser.ID, - ActUserName: actUser.Name, - ActEmail: actUser.Email, + ActUserID: doer.ID, + ActUserName: doer.Name, OpType: ACTION_MERGE_PULL_REQUEST, - Content: fmt.Sprintf("%d|%s", pull.Index, pull.Title), + Content: fmt.Sprintf("%d|%s", issue.Index, issue.Title), RepoID: repo.ID, RepoUserName: repo.Owner.Name, RepoName: repo.Name, |