summaryrefslogtreecommitdiffstats
path: root/models/repo.go
diff options
context:
space:
mode:
authorEthan Koenig <ethantkoenig@gmail.com>2017-09-03 01:20:24 -0700
committerLauris BH <lauris@nix.lv>2017-09-03 11:20:24 +0300
commitb689bb61804fddfd2df8df7250522b0fc227484e (patch)
tree6cd96dfc3c0c7b2a0b265217f2893aa606307b0a /models/repo.go
parent79f7839633167bbb146a7b0d17ce0ec1c990d085 (diff)
downloadgitea-b689bb61804fddfd2df8df7250522b0fc227484e.tar.gz
gitea-b689bb61804fddfd2df8df7250522b0fc227484e.zip
Webhooks for repo creation/deletion (#1663)
* Webhooks for repo creation/deletion * add createHookTask * Add handles for GetSlackPayload and GetDiscordPayload
Diffstat (limited to 'models/repo.go')
-rw-r--r--models/repo.go42
1 files changed, 31 insertions, 11 deletions
diff --git a/models/repo.go b/models/repo.go
index 81c9d4a11f..a629b7311f 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -835,8 +835,8 @@ func wikiRemoteURL(remote string) string {
}
// MigrateRepository migrates a existing repository from other project hosting.
-func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
- repo, err := CreateRepository(u, CreateRepoOptions{
+func MigrateRepository(doer, u *User, opts MigrateRepoOptions) (*Repository, error) {
+ repo, err := CreateRepository(doer, u, CreateRepoOptions{
Name: opts.Name,
Description: opts.Description,
IsPrivate: opts.IsPrivate,
@@ -1202,7 +1202,7 @@ func IsUsableRepoName(name string) error {
return isUsableName(reservedRepoNames, reservedRepoPatterns, name)
}
-func createRepository(e *xorm.Session, u *User, repo *Repository) (err error) {
+func createRepository(e *xorm.Session, doer, u *User, repo *Repository) (err error) {
if err = IsUsableRepoName(repo.Name); err != nil {
return err
}
@@ -1249,7 +1249,15 @@ func createRepository(e *xorm.Session, u *User, repo *Repository) (err error) {
return fmt.Errorf("getOwnerTeam: %v", err)
} else if err = t.addRepository(e, repo); err != nil {
return fmt.Errorf("addRepository: %v", err)
+ } else if err = prepareWebhooks(e, repo, HookEventRepository, &api.RepositoryPayload{
+ Action: api.HookRepoCreated,
+ Repository: repo.APIFormat(AccessModeOwner),
+ Organization: u.APIFormat(),
+ Sender: doer.APIFormat(),
+ }); err != nil {
+ return fmt.Errorf("prepareWebhooks: %v", err)
}
+ go HookQueue.Add(repo.ID)
} else {
// Organization automatically called this in addRepository method.
if err = repo.recalculateAccesses(e); err != nil {
@@ -1266,8 +1274,8 @@ func createRepository(e *xorm.Session, u *User, repo *Repository) (err error) {
return nil
}
-// CreateRepository creates a repository for given user or organization.
-func CreateRepository(u *User, opts CreateRepoOptions) (_ *Repository, err error) {
+// CreateRepository creates a repository for the user/organization u.
+func CreateRepository(doer, u *User, opts CreateRepoOptions) (_ *Repository, err error) {
if !u.CanCreateRepo() {
return nil, ErrReachLimitOfRepo{u.MaxRepoCreation}
}
@@ -1287,7 +1295,7 @@ func CreateRepository(u *User, opts CreateRepoOptions) (_ *Repository, err error
return nil, err
}
- if err = createRepository(sess, u, repo); err != nil {
+ if err = createRepository(sess, doer, u, repo); err != nil {
return nil, err
}
@@ -1623,7 +1631,7 @@ func UpdateRepositoryUnits(repo *Repository, units []RepoUnit) (err error) {
}
// DeleteRepository deletes a repository for a user or organization.
-func DeleteRepository(uid, repoID int64) error {
+func DeleteRepository(doer *User, uid, repoID int64) error {
// In case is a organization.
org, err := GetUserByID(uid)
if err != nil {
@@ -1781,6 +1789,18 @@ func DeleteRepository(uid, repoID int64) error {
return fmt.Errorf("Commit: %v", err)
}
+ if org.IsOrganization() {
+ if err = PrepareWebhooks(repo, HookEventRepository, &api.RepositoryPayload{
+ Action: api.HookRepoDeleted,
+ Repository: repo.APIFormat(AccessModeOwner),
+ Organization: org.APIFormat(),
+ Sender: doer.APIFormat(),
+ }); err != nil {
+ return err
+ }
+ go HookQueue.Add(repo.ID)
+ }
+
return nil
}
@@ -1974,7 +1994,7 @@ func gatherMissingRepoRecords() ([]*Repository, error) {
}
// DeleteMissingRepositories deletes all repository records that lost Git files.
-func DeleteMissingRepositories() error {
+func DeleteMissingRepositories(doer *User) error {
repos, err := gatherMissingRepoRecords()
if err != nil {
return fmt.Errorf("gatherMissingRepoRecords: %v", err)
@@ -1986,7 +2006,7 @@ func DeleteMissingRepositories() error {
for _, repo := range repos {
log.Trace("Deleting %d/%d...", repo.OwnerID, repo.ID)
- if err := DeleteRepository(repo.OwnerID, repo.ID); err != nil {
+ if err := DeleteRepository(doer, repo.OwnerID, repo.ID); err != nil {
if err2 := CreateRepositoryNotice(fmt.Sprintf("DeleteRepository [%d]: %v", repo.ID, err)); err2 != nil {
return fmt.Errorf("CreateRepositoryNotice: %v", err)
}
@@ -2226,7 +2246,7 @@ func HasForkedRepo(ownerID, repoID int64) (*Repository, bool) {
}
// ForkRepository forks a repository
-func ForkRepository(u *User, oldRepo *Repository, name, desc string) (_ *Repository, err error) {
+func ForkRepository(doer, u *User, oldRepo *Repository, name, desc string) (_ *Repository, err error) {
forkedRepo, err := oldRepo.GetUserFork(u.ID)
if err != nil {
return nil, err
@@ -2256,7 +2276,7 @@ func ForkRepository(u *User, oldRepo *Repository, name, desc string) (_ *Reposit
return nil, err
}
- if err = createRepository(sess, u, repo); err != nil {
+ if err = createRepository(sess, doer, u, repo); err != nil {
return nil, err
}