diff options
author | Scott Le <scott.lee318@gmail.com> | 2016-07-28 12:17:04 +0700 |
---|---|---|
committer | Scott Le <scott.lee318@gmail.com> | 2016-08-12 00:04:04 +0700 |
commit | 9ba4a0aa4fc104189873134644a2d5da28f5b4b7 (patch) | |
tree | 311522e0c8ecedaa14666d6a9ec9f567aac73da0 /lib | |
parent | c3cfebcf1cad21434bd90d4d3bb33824c4644eb5 (diff) | |
download | gitlab-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.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 |