summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorScott Le <scott.lee318@gmail.com>2016-07-28 12:17:04 +0700
committerScott Le <scott.lee318@gmail.com>2016-08-12 00:04:04 +0700
commit9ba4a0aa4fc104189873134644a2d5da28f5b4b7 (patch)
tree311522e0c8ecedaa14666d6a9ec9f567aac73da0 /lib
parentc3cfebcf1cad21434bd90d4d3bb33824c4644eb5 (diff)
downloadgitlab-shell-9ba4a0aa4fc104189873134644a2d5da28f5b4b7.tar.gz
print new merge request urls after push received
update spec different text for new and existing merge request update spec fix style switch order of messages enhance message appearance remove extra spaces
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