Commit 5c1b49f4 authored by Valery Sizov's avatar Valery Sizov

Add added, modified and removed properties to commit object in webhook

parent 4de7f32c
...@@ -10,6 +10,9 @@ v 8.3.0 (unreleased) ...@@ -10,6 +10,9 @@ v 8.3.0 (unreleased)
- Add API endpoint to fetch merge request commits list - Add API endpoint to fetch merge request commits list
- Expose events API with comment information and author info - Expose events API with comment information and author info
v 8.2.3
- Webhook payload has an added, modified and removed properties for each commit
v 8.2.2 v 8.2.2
- Fix 404 in redirection after removing a project (Stan Hu) - Fix 404 in redirection after removing a project (Stan Hu)
- Ensure cached application settings are refreshed at startup (Stan Hu) - Ensure cached application settings are refreshed at startup (Stan Hu)
......
...@@ -146,7 +146,10 @@ class Commit ...@@ -146,7 +146,10 @@ class Commit
author: { author: {
name: author_name, name: author_name,
email: author_email email: author_email
} },
added: repo_changes[:added],
modified: repo_changes[:modified],
removed: repo_changes[:removed]
} }
end end
...@@ -196,4 +199,23 @@ class Commit ...@@ -196,4 +199,23 @@ class Commit
def status def status
ci_commit.try(:status) || :not_found ci_commit.try(:status) || :not_found
end end
private
def repo_changes
changes = { added: [], modified: [], removed: [] }
diffs.each do |diff|
case true
when diff.deleted_file
changes[:removed] << diff.old_path
when diff.renamed_file, diff.new_file
changes[:added] << diff.new_path
else
changes[:modified] << diff.new_path
end
end
changes
end
end end
...@@ -57,6 +57,9 @@ X-Gitlab-Event: Push Hook ...@@ -57,6 +57,9 @@ X-Gitlab-Event: Push Hook
"name": "Jordi Mallach", "name": "Jordi Mallach",
"email": "jordi@softcatala.org" "email": "jordi@softcatala.org"
} }
"added": ["CHANGELOG"],
"modified": ["app/controller/application.rb"],
"removed": []
}, },
{ {
"id": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7", "id": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
...@@ -66,13 +69,14 @@ X-Gitlab-Event: Push Hook ...@@ -66,13 +69,14 @@ X-Gitlab-Event: Push Hook
"author": { "author": {
"name": "GitLab dev user", "name": "GitLab dev user",
"email": "gitlabdev@dv6700.(none)" "email": "gitlabdev@dv6700.(none)"
} },
}
],
"total_commits_count": 4,
"added": ["CHANGELOG"], "added": ["CHANGELOG"],
"modified": ["app/controller/application.rb"], "modified": ["app/controller/application.rb"],
"removed": [] "removed": []
}
],
"total_commits_count": 4
} }
``` ```
......
...@@ -18,10 +18,7 @@ module Gitlab ...@@ -18,10 +18,7 @@ module Gitlab
# homepage: String, # homepage: String,
# }, # },
# commits: Array, # commits: Array,
# total_commits_count: Fixnum, # total_commits_count: Fixnum
# added: ["CHANGELOG"],
# modified: [],
# removed: ["tmp/file.txt"]
# } # }
# #
def build(project, user, oldrev, newrev, ref, commits = [], message = nil) def build(project, user, oldrev, newrev, ref, commits = [], message = nil)
...@@ -37,7 +34,6 @@ module Gitlab ...@@ -37,7 +34,6 @@ module Gitlab
type = Gitlab::Git.tag_ref?(ref) ? "tag_push" : "push" type = Gitlab::Git.tag_ref?(ref) ? "tag_push" : "push"
repo_changes = repo_changes(project, newrev, oldrev)
# Hash to be passed as post_receive_data # Hash to be passed as post_receive_data
data = { data = {
object_kind: type, object_kind: type,
...@@ -60,10 +56,7 @@ module Gitlab ...@@ -60,10 +56,7 @@ module Gitlab
visibility_level: project.visibility_level visibility_level: project.visibility_level
}, },
commits: commit_attrs, commits: commit_attrs,
total_commits_count: commits_count, total_commits_count: commits_count
added: repo_changes[:added],
modified: repo_changes[:modified],
removed: repo_changes[:removed]
} }
data data
...@@ -94,27 +87,6 @@ module Gitlab ...@@ -94,27 +87,6 @@ module Gitlab
newrev newrev
end end
end end
def repo_changes(project, newrev, oldrev)
changes = { added: [], modified: [], removed: [] }
compare_result = CompareService.new.
execute(project, newrev, project, oldrev)
if compare_result
compare_result.diffs.each do |diff|
case true
when diff.deleted_file
changes[:removed] << diff.old_path
when diff.renamed_file, diff.new_file
changes[:added] << diff.new_path
else
changes[:modified] << diff.new_path
end
end
end
changes
end
end end
end end
end end
...@@ -17,9 +17,9 @@ describe 'Gitlab::PushDataBuilder' do ...@@ -17,9 +17,9 @@ describe 'Gitlab::PushDataBuilder' do
it { expect(data[:repository][:git_ssh_url]).to eq(project.ssh_url_to_repo) } it { expect(data[:repository][:git_ssh_url]).to eq(project.ssh_url_to_repo) }
it { expect(data[:repository][:visibility_level]).to eq(project.visibility_level) } it { expect(data[:repository][:visibility_level]).to eq(project.visibility_level) }
it { expect(data[:total_commits_count]).to eq(3) } it { expect(data[:total_commits_count]).to eq(3) }
it { expect(data[:added]).to eq(["gitlab-grack"]) } it { expect(data[:commits].first[:added]).to eq(["gitlab-grack"]) }
it { expect(data[:modified]).to eq([".gitmodules", "files/ruby/popen.rb", "files/ruby/regex.rb"]) } it { expect(data[:commits].first[:modified]).to eq([".gitmodules"]) }
it { expect(data[:removed]).to eq([]) } it { expect(data[:commits].first[:removed]).to eq([]) }
end end
describe :build do describe :build do
...@@ -38,8 +38,5 @@ describe 'Gitlab::PushDataBuilder' do ...@@ -38,8 +38,5 @@ describe 'Gitlab::PushDataBuilder' do
it { expect(data[:ref]).to eq('refs/tags/v1.1.0') } it { expect(data[:ref]).to eq('refs/tags/v1.1.0') }
it { expect(data[:commits]).to be_empty } it { expect(data[:commits]).to be_empty }
it { expect(data[:total_commits_count]).to be_zero } it { expect(data[:total_commits_count]).to be_zero }
it { expect(data[:added]).to eq([]) }
it { expect(data[:modified]).to eq([]) }
it { expect(data[:removed]).to eq([]) }
end end
end end
...@@ -100,4 +100,15 @@ eos ...@@ -100,4 +100,15 @@ eos
# Include the subject in the repository stub. # Include the subject in the repository stub.
let(:extra_commits) { [subject] } let(:extra_commits) { [subject] }
end end
describe '#hook_attrs' do
let(:data) { commit.hook_attrs }
it { expect(data).to be_a(Hash) }
it { expect(data[:message]).to include('Add submodule from gitlab.com') }
it { expect(data[:timestamp]).to eq('2014-02-27T11:01:38+02:00') }
it { expect(data[:added]).to eq(["gitlab-grack"]) }
it { expect(data[:modified]).to eq([".gitmodules"]) }
it { expect(data[:removed]).to eq([]) }
end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment