summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2016-08-11 18:23:29 +0000
committerDouwe Maan <douwe@gitlab.com>2016-08-11 18:23:29 +0000
commita40268352c811762d9e70e869d5157c01107c1a5 (patch)
treec9016c4fc6c26a748799f3fe05faedc44e7bfdd7 /lib
parent1e3d15a71ed49a932c6539d1e783b5948f31192e (diff)
parent9ba4a0aa4fc104189873134644a2d5da28f5b4b7 (diff)
downloadgitlab-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.rb7
-rw-r--r--lib/gitlab_post_receive.rb30
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