Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add git hooks and webhooks to template repositories; move to services #8926

Merged
merged 29 commits into from
Nov 24, 2019
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
eaa6954
Add git hooks and webhooks to template options
jolheiser Nov 11, 2019
fde853d
Merge branch 'master' into template_hook
jolheiser Nov 12, 2019
f350f49
Update models/repo.go
jolheiser Nov 12, 2019
8da72e1
Add tooltip if the user can't edit git hooks
jolheiser Nov 12, 2019
412a262
Merge branch 'master' into template_hook
jolheiser Nov 12, 2019
2cdb438
Merge branch 'master' into template_hook
jolheiser Nov 13, 2019
eb0cde6
Merge branch 'master' into template_hook
jolheiser Nov 13, 2019
429ebd5
Merge branch 'master' into template_hook
jolheiser Nov 13, 2019
bbc3647
Close repositories after copying git hooks
jolheiser Nov 13, 2019
aca0b6d
Merge branch 'master' into template_hook
jolheiser Nov 13, 2019
fccc473
Wording
jolheiser Nov 13, 2019
0832184
Merge branch 'master' into template_hook
jolheiser Nov 15, 2019
1b9df8e
Merge branch 'master' into template_hook
lunny Nov 16, 2019
a375ce2
Merge branch 'master' into template_hook
jolheiser Nov 18, 2019
1127c15
Merge branch 'master' into template_hook
jolheiser Nov 19, 2019
8f62ef4
Merge branch 'master' into template_hook
jolheiser Nov 20, 2019
6c1f0b7
Merge branch 'master' into template_hook
jolheiser Nov 21, 2019
d5f2247
Restructure for services
jolheiser Nov 22, 2019
8bbccaa
Return errors
jolheiser Nov 22, 2019
faca8ae
Move GenerateRepository to using a DBContext
jolheiser Nov 22, 2019
ecc4559
Wrap with models.WithTx
jolheiser Nov 23, 2019
cc6646e
Remove debug print
jolheiser Nov 23, 2019
ddf89bd
Merge branch 'master' into template_hook
jolheiser Nov 23, 2019
48f10a6
Move if-error-delete-repo outside WithTx
jolheiser Nov 23, 2019
4e6b1ef
Merge branch 'template_hook' of github.com:jolheiser/gitea into templ…
jolheiser Nov 23, 2019
2b4d4fd
Return nil if no repo generated
jolheiser Nov 23, 2019
d87f4f6
Merge branch 'master' into template_hook
jolheiser Nov 24, 2019
55e75bd
Merge branch 'master' into template_hook
lunny Nov 24, 2019
e691245
Merge branch 'master' into template_hook
techknowlogick Nov 24, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 64 additions & 1 deletion models/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -1253,11 +1253,13 @@ type GenerateRepoOptions struct {
Private bool
GitContent bool
Topics bool
GitHooks bool
Webhooks bool
}

// IsValid checks whether at least one option is chosen for generation
func (gro GenerateRepoOptions) IsValid() bool {
return gro.GitContent || gro.Topics // or other items as they are added
return gro.GitContent || gro.Topics || gro.GitHooks || gro.Webhooks // or other items as they are added
}

func getRepoInitFile(tp, name string) ([]byte, error) {
Expand Down Expand Up @@ -2788,6 +2790,7 @@ func GenerateRepository(doer, owner *User, templateRepo *Repository, opts Genera
return repo, err
}

// Git Content
if opts.GitContent && !templateRepo.IsEmpty {
if err = generateRepository(sess, repo, templateRepo); err != nil {
return repo, err
Expand All @@ -2802,6 +2805,7 @@ func GenerateRepository(doer, owner *User, templateRepo *Repository, opts Genera
}
}

// Topics
if opts.Topics {
for _, topic := range templateRepo.Topics {
if _, err = addTopicByNameToRepo(sess, repo.ID, topic); err != nil {
Expand All @@ -2810,6 +2814,65 @@ func GenerateRepository(doer, owner *User, templateRepo *Repository, opts Genera
}
}

// Git Hooks
if opts.GitHooks {
generateRepo, err := git.OpenRepository(repo.repoPath(sess))
if err != nil {
return repo, err
}
defer generateRepo.Close()

templateRepo, err := git.OpenRepository(templateRepo.repoPath(sess))
if err != nil {
return repo, err
}
defer templateRepo.Close()

templateHooks, err := templateRepo.Hooks()
if err != nil {
return repo, err
}

for _, templateHook := range templateHooks {
generateHook, err := generateRepo.GetHook(templateHook.Name())
if err != nil {
return repo, err
}

generateHook.Content = templateHook.Content
if err := generateHook.Update(); err != nil {
return repo, err
}
}
}

// Webhooks
if opts.Webhooks {
templateWebhooks, err := GetWebhooksByRepoID(templateRepo.ID)
if err != nil {
return repo, err
}

for _, templateWebhook := range templateWebhooks {
generateWebhook := &Webhook{
RepoID: repo.ID,
URL: templateWebhook.URL,
HTTPMethod: templateWebhook.HTTPMethod,
ContentType: templateWebhook.ContentType,
Secret: templateWebhook.Secret,
HookEvent: templateWebhook.HookEvent,
IsActive: templateWebhook.IsActive,
HookTaskType: templateWebhook.HookTaskType,
OrgID: templateWebhook.OrgID,
Events: templateWebhook.Events,
Meta: templateWebhook.Meta,
}
if err := createWebhook(sess, generateWebhook); err != nil {
return repo, err
}
}
}

return repo, sess.Commit()
}

Expand Down
2 changes: 2 additions & 0 deletions modules/auth/repo_form.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ type CreateRepoForm struct {
RepoTemplate int64
GitContent bool
Topics bool
GitHooks bool
Webhooks bool
}

// Validate validates the fields
Expand Down
3 changes: 3 additions & 0 deletions options/locale/locale_en-US.ini
Original file line number Diff line number Diff line change
Expand Up @@ -628,6 +628,9 @@ reactions_more = and %d more

template.items = Template Items
template.git_content = Git Content (Default Branch)
template.git_hooks = Git Hooks
template.git_hooks_tooltip = You are currently unable to modify or remove git hooks once added. Select this only if you trust the template repository.
template.webhooks = Webhooks
template.topics = Topics
template.one_item = Must select at least one template item
template.invalid = Must select a template repository
Expand Down
2 changes: 2 additions & 0 deletions routers/repo/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,8 @@ func CreatePost(ctx *context.Context, form auth.CreateRepoForm) {
Private: form.Private,
GitContent: form.GitContent,
Topics: form.Topics,
GitHooks: form.GitHooks,
Webhooks: form.Webhooks,
}

if !opts.IsValid() {
Expand Down
8 changes: 8 additions & 0 deletions templates/repo/create.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,17 @@
<input class="hidden" name="git_content" type="checkbox" tabindex="0" {{if .git_content}}checked{{end}}>
<label>{{.i18n.Tr "repo.template.git_content"}}</label>
</div>
<div class="ui checkbox" {{if not .SignedUser.CanEditGitHook}}data-tooltip="{{.i18n.Tr "repo.template.git_hooks_tooltip"}}"{{end}}>
<input class="hidden" name="git_hooks" type="checkbox" tabindex="0" {{if .git_hooks}}checked{{end}}>
<label>{{.i18n.Tr "repo.template.git_hooks"}}</label>
</div>
</div>
<div class="inline field">
<label></label>
<div class="ui checkbox">
jolheiser marked this conversation as resolved.
Show resolved Hide resolved
<input class="hidden" name="webhooks" type="checkbox" tabindex="0" {{if .webhooks}}checked{{end}}>
<label>{{.i18n.Tr "repo.template.webhooks"}}</label>
</div>
<div class="ui checkbox">
<input class="hidden" name="topics" type="checkbox" tabindex="0" {{if .topics}}checked{{end}}>
<label>{{.i18n.Tr "repo.template.topics"}}</label>
Expand Down