diff options
author | Douwe Maan <douwe@gitlab.com> | 2016-08-11 18:23:29 +0000 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2016-08-11 18:23:29 +0000 |
commit | a40268352c811762d9e70e869d5157c01107c1a5 (patch) | |
tree | c9016c4fc6c26a748799f3fe05faedc44e7bfdd7 /lib | |
parent | 1e3d15a71ed49a932c6539d1e783b5948f31192e (diff) | |
parent | 9ba4a0aa4fc104189873134644a2d5da28f5b4b7 (diff) | |
download | gitlab-shell-a40268352c811762d9e70e869d5157c01107c1a5.tar.gz |
Merge branch 'feature/new-merge-request-url' into 'master'
Show Merge request link after pushing if new brach
This is part of implementation for issue https://gitlab.com/gitlab-org/gitlab-ce/issues/18266
See merge request !77
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab_net.rb | 7 | ||||
-rw-r--r-- | lib/gitlab_post_receive.rb | 30 |
2 files changed, 36 insertions, 1 deletions
diff --git a/lib/gitlab_net.rb b/lib/gitlab_net.rb index e10a07a..c06ed1e 100644 --- a/lib/gitlab_net.rb +++ b/lib/gitlab_net.rb @@ -54,6 +54,13 @@ class GitlabNet JSON.parse(resp.body) rescue {} end + def merge_request_urls(repo_name, changes) + changes = changes.join("\n") unless changes.kind_of?(String) + changes = changes.encode('UTF-8', 'ASCII', invalid: :replace, replace: '') + resp = get("#{host}/merge_request_urls?project=#{URI.escape(repo_name)}&changes=#{URI.escape(changes)}") + JSON.parse(resp.body) rescue [] + end + def check get("#{host}/check", read_timeout: CHECK_TIMEOUT) end diff --git a/lib/gitlab_post_receive.rb b/lib/gitlab_post_receive.rb index 7874c85..9ad74f5 100644 --- a/lib/gitlab_post_receive.rb +++ b/lib/gitlab_post_receive.rb @@ -6,11 +6,14 @@ require 'base64' require 'securerandom' class GitlabPostReceive + include NamesHelper + attr_reader :config, :repo_path, :changes, :jid def initialize(repo_path, actor, changes) @config = GitlabConfig.new @repo_path, @actor = repo_path.strip, actor + @repo_name = extract_repo_name(@repo_path.dup) @changes = changes @jid = SecureRandom.hex(12) end @@ -19,12 +22,15 @@ class GitlabPostReceive result = update_redis begin - broadcast_message = GitlabNet.new.broadcast_message + broadcast_message = api.broadcast_message if broadcast_message.has_key?("message") puts print_broadcast_message(broadcast_message["message"]) end + + merge_request_urls = api.merge_request_urls(@repo_name, @changes) + print_merge_request_links(merge_request_urls) rescue GitlabNet::ApiUnreachableError nil end @@ -34,6 +40,28 @@ class GitlabPostReceive protected + def api + @api ||= GitlabNet.new + end + + def print_merge_request_links(merge_request_urls) + return if merge_request_urls.empty? + puts + merge_request_urls.each { |mr| print_merge_request_link(mr) } + end + + def print_merge_request_link(merge_request) + if merge_request["new_merge_request"] + message = "Create merge request for #{merge_request["branch_name"]}:" + else + message = "View merge request for #{merge_request["branch_name"]}:" + end + + puts message + puts((" " * 2) + merge_request["url"]) + puts + end + def print_broadcast_message(message) # A standard terminal window is (at least) 80 characters wide. total_width = 80 |