diff options
Diffstat (limited to 'app/services/git_tag_push_service.rb')
-rw-r--r-- | app/services/git_tag_push_service.rb | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/app/services/git_tag_push_service.rb b/app/services/git_tag_push_service.rb new file mode 100644 index 00000000000..62eaf9b4f51 --- /dev/null +++ b/app/services/git_tag_push_service.rb @@ -0,0 +1,40 @@ +class GitTagPushService + attr_accessor :project, :user, :push_data + + def execute(project, user, oldrev, newrev, ref) + @project, @user = project, user + @push_data = create_push_data(oldrev, newrev, ref) + + create_push_event + project.repository.expire_cache + project.execute_hooks(@push_data.dup, :tag_push_hooks) + end + + private + + def create_push_data(oldrev, newrev, ref) + data = { + ref: ref, + before: oldrev, + after: newrev, + user_id: user.id, + user_name: user.name, + project_id: project.id, + repository: { + name: project.name, + url: project.url_to_repo, + description: project.description, + homepage: project.web_url + } + } + end + + def create_push_event + Event.create!( + project: project, + action: Event::PUSHED, + data: push_data, + author_id: push_data[:user_id] + ) + end +end |