summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValery Sizov <valery@gitlab.com>2015-11-02 16:56:44 +0200
committerValery Sizov <vsv2711@gmail.com>2015-11-03 12:16:40 +0200
commit9479496f7584336788fc61121c096dfbcb3f6e4a (patch)
tree735eb8e0077c42629bf516b5498ff7e3ce5e4b2a
parentb9e53258c505abeda8a975b550f2cb276caaf01b (diff)
downloadgitlab-ce-web_hook_repo_changes.tar.gz
Add added, modified and removed properties to commit object in webhookweb_hook_repo_changes
-rw-r--r--CHANGELOG1
-rw-r--r--doc/web_hooks/web_hooks.md5
-rw-r--r--lib/gitlab/push_data_builder.rb33
-rw-r--r--spec/lib/gitlab/push_data_builder_spec.rb6
4 files changed, 42 insertions, 3 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 588909d2578..78f72ccc1e5 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -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)
diff --git a/doc/web_hooks/web_hooks.md b/doc/web_hooks/web_hooks.md
index ef99a69f60a..7d838187a26 100644
--- a/doc/web_hooks/web_hooks.md
+++ b/doc/web_hooks/web_hooks.md
@@ -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": []
}
```
diff --git a/lib/gitlab/push_data_builder.rb b/lib/gitlab/push_data_builder.rb
index d010ade704e..fa068d50763 100644
--- a/lib/gitlab/push_data_builder.rb
+++ b/lib/gitlab/push_data_builder.rb
@@ -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
diff --git a/spec/lib/gitlab/push_data_builder_spec.rb b/spec/lib/gitlab/push_data_builder_spec.rb
index 1b8ba7b4d43..02710742625 100644
--- a/spec/lib/gitlab/push_data_builder_spec.rb
+++ b/spec/lib/gitlab/push_data_builder_spec.rb
@@ -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