Add added, modified and removed properties to commit object in webhook
This commit is contained in:
parent
b9e53258c5
commit
9479496f75
4 changed files with 42 additions and 3 deletions
|
@ -17,6 +17,7 @@ v 8.2.0 (unreleased)
|
|||
- Remove deprecated CI events from project settings page
|
||||
- Use issue editor as cross reference comment author when issue is edited with a new mention.
|
||||
- [API] Add ability to fetch the commit ID of the last commit that actually touched a file
|
||||
- Add "added", "modified" and "removed" properties to commit object in webhook
|
||||
|
||||
v 8.1.1
|
||||
- Fix cloning Wiki repositories via HTTP (Stan Hu)
|
||||
|
|
|
@ -69,7 +69,10 @@ X-Gitlab-Event: Push Hook
|
|||
}
|
||||
}
|
||||
],
|
||||
"total_commits_count": 4
|
||||
"total_commits_count": 4,
|
||||
"added": ["CHANGELOG"],
|
||||
"modified": ["app/controller/application.rb"],
|
||||
"removed": []
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -18,7 +18,10 @@ module Gitlab
|
|||
# homepage: String,
|
||||
# },
|
||||
# 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)
|
||||
|
@ -33,6 +36,8 @@ module Gitlab
|
|||
commit_attrs = commits_limited.map(&:hook_attrs)
|
||||
|
||||
type = Gitlab::Git.tag_ref?(ref) ? "tag_push" : "push"
|
||||
|
||||
repo_changes = repo_changes(project, newrev, oldrev)
|
||||
# Hash to be passed as post_receive_data
|
||||
data = {
|
||||
object_kind: type,
|
||||
|
@ -55,7 +60,10 @@ module Gitlab
|
|||
visibility_level: project.visibility_level
|
||||
},
|
||||
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
|
||||
|
@ -86,6 +94,27 @@ module Gitlab
|
|||
newrev
|
||||
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
|
||||
|
|
|
@ -17,6 +17,9 @@ describe 'Gitlab::PushDataBuilder' do
|
|||
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[:total_commits_count]).to eq(3) }
|
||||
it { expect(data[:added]).to eq(["gitlab-grack"]) }
|
||||
it { expect(data[:modified]).to eq([".gitmodules", "files/ruby/popen.rb", "files/ruby/regex.rb"]) }
|
||||
it { expect(data[:removed]).to eq([]) }
|
||||
end
|
||||
|
||||
describe :build do
|
||||
|
@ -35,5 +38,8 @@ describe 'Gitlab::PushDataBuilder' do
|
|||
it { expect(data[:ref]).to eq('refs/tags/v1.1.0') }
|
||||
it { expect(data[:commits]).to be_empty }
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue