danger 3.5.0 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: af48c7716089bda158a7d4fb5422684cda1cf882
4
- data.tar.gz: 31bcd2dba47171bf5898a2d0954c385b7aa1e60b
3
+ metadata.gz: 37784ac6404c19b342dc3a50d908829d1b8e36dc
4
+ data.tar.gz: 476f09de2a6458bd6becf741a69879fab68187e0
5
5
  SHA512:
6
- metadata.gz: 18da3b3a61540d5b8725e5d154c5f38e346af10429ef61fbbc280fe9f8bab6206b8442f0c868ca4559bbfe28a011607f1caac4aaccc234f86679c33435fa32c3
7
- data.tar.gz: de5ffb844e8cd08df544bdde71411d3a2e1a2520fd626f018f3c51ffe44bde1f207a2608713c1cbb7ab134682aea672a2de83e454285b29ca9abd5e033f7e6c8
6
+ metadata.gz: dfc58b28a778b604f9a54a739d56ab6eb3d3f1a2c54073a6dc5a877a2b6a0936bef78dfdc11c541f353d9bc81f76492bec438a21da115c9401efe8dcd70cd1c2
7
+ data.tar.gz: 2dd2c369fe8cb209b38d9ca9f360906585ac3f9f4b6401e1c6a03ec1c3902bdf088a531862fb69e3aa391638683ff76fc48e86a2fdec4bc9a64317e86763cc09
@@ -2,10 +2,15 @@
2
2
 
3
3
  require "git"
4
4
  require "uri"
5
- require "danger/ci_source/support/remote_finder"
6
- require "danger/ci_source/support/merged_pull_request_finder"
5
+
7
6
  require "danger/request_sources/github"
8
7
 
8
+ require "danger/ci_source/support/find_repo_info_from_url"
9
+ require "danger/ci_source/support/find_repo_info_from_logs"
10
+ require "danger/ci_source/support/no_repo_info"
11
+ require "danger/ci_source/support/pull_request_finder"
12
+ require "danger/ci_source/support/commits"
13
+
9
14
  module Danger
10
15
  # ignore
11
16
  class LocalGitRepo < CI
@@ -31,29 +36,82 @@ module Danger
31
36
  @supported_request_sources ||= [Danger::RequestSources::GitHub]
32
37
  end
33
38
 
34
- def print_repo_slug_warning
35
- puts "Danger local requires a repository hosted on GitHub.com or GitHub Enterprise.".freeze
39
+ def initialize(env = {})
40
+ @env = env
41
+
42
+ self.repo_slug = remote_info.slug
43
+ raise_error_for_missing_remote if remote_info.kind_of?(NoRepoInfo)
44
+
45
+ self.pull_request_id = found_pull_request.pull_request_id
46
+
47
+ if sha
48
+ self.base_commit = commits.base
49
+ self.head_commit = commits.head
50
+ else
51
+ self.base_commit = found_pull_request.base
52
+ self.head_commit = found_pull_request.head
53
+ end
36
54
  end
37
55
 
38
- def parents(sha)
39
- @parents ||= run_git("rev-list --parents -n 1 #{sha}").strip.split(" ".freeze)
56
+ private
57
+
58
+ attr_reader :env
59
+
60
+ def raise_error_for_missing_remote
61
+ raise missing_remote_error_message
40
62
  end
41
63
 
42
- def initialize(env = {})
43
- repo_slug = RemoteFinder.new(
44
- env["DANGER_GITHUB_HOST"] || "github.com".freeze,
45
- run_git("remote show origin -n".freeze)
46
- ).call
47
-
48
- pull_request_id, sha = MergedPullRequestFinder.new(
49
- env.fetch("LOCAL_GIT_PR_ID") { "" },
50
- run_git("log --oneline -1000000".freeze)
51
- ).call
52
-
53
- self.repo_slug = repo_slug ? repo_slug : print_repo_slug_warning
54
- self.pull_request_id = pull_request_id
55
- self.base_commit = parents(sha)[0]
56
- self.head_commit = parents(sha)[1]
64
+ def missing_remote_error_message
65
+ "danger cannot find your git remote, please set a remote. " \
66
+ "And the repository must host on GitHub.com or GitHub Enterprise."
67
+ end
68
+
69
+ def remote_info
70
+ @_remote_info ||= begin
71
+ remote_info = begin
72
+ if given_pull_request_url?
73
+ FindRepoInfoFromURL.new(env["LOCAL_GIT_PR_URL"]).call
74
+ else
75
+ FindRepoInfoFromLogs.new(
76
+ env["DANGER_GITHUB_HOST"] || "github.com".freeze,
77
+ run_git("remote show origin -n".freeze)
78
+ ).call
79
+ end
80
+ end
81
+
82
+ remote_info || NoRepoInfo.new
83
+ end
84
+ end
85
+
86
+ def found_pull_request
87
+ @_found_pull_request ||= begin
88
+ if given_pull_request_url?
89
+ PullRequestFinder.new(
90
+ remote_info.id,
91
+ remote_info.slug,
92
+ remote: true
93
+ ).call
94
+ else
95
+ PullRequestFinder.new(
96
+ env.fetch("LOCAL_GIT_PR_ID") { "".freeze },
97
+ remote_info.slug,
98
+ remote: false,
99
+ git_logs: run_git("log --oneline -1000000".freeze)
100
+ ).call
101
+ end
102
+ end
103
+ end
104
+
105
+ def given_pull_request_url?
106
+ env["LOCAL_GIT_PR_URL"] && !env["LOCAL_GIT_PR_URL"].empty?
107
+ end
108
+
109
+ def sha
110
+ @_sha ||= found_pull_request.sha
111
+ end
112
+
113
+ def commits
114
+ @_commits ||= Commits.new(run_git("rev-list --parents -n 1 #{sha}"))
57
115
  end
58
116
  end
59
117
  end
@@ -0,0 +1,17 @@
1
+ class Commits
2
+ def initialize(base_head)
3
+ @base_head = base_head.strip.split(" ".freeze)
4
+ end
5
+
6
+ def base
7
+ base_head.first
8
+ end
9
+
10
+ def head
11
+ base_head.last
12
+ end
13
+
14
+ private
15
+
16
+ attr_reader :base_head
17
+ end
@@ -0,0 +1,35 @@
1
+ require "danger/ci_source/support/repo_info"
2
+
3
+ module Danger
4
+ class FindRepoInfoFromLogs
5
+ def initialize(github_host, remote_logs)
6
+ @github_host = github_host
7
+ @remote_logs = remote_logs
8
+ end
9
+
10
+ def call
11
+ matched = remote.match(regexp)
12
+
13
+ if matched
14
+ RepoInfo.new(matched["repo_slug"], nil)
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ attr_reader :remote_logs, :github_host
21
+
22
+ def remote
23
+ remote_logs.lines.grep(/Fetch URL/)[0].split(": ".freeze, 2)[1]
24
+ end
25
+
26
+ def regexp
27
+ %r{
28
+ #{Regexp.escape(github_host)}
29
+ (:|/|(:/))
30
+ (?<repo_slug>[^/]+/.+?)
31
+ (?:\.git)?$
32
+ }x
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,27 @@
1
+ require "danger/ci_source/support/repo_info"
2
+
3
+ module Danger
4
+ class FindRepoInfoFromURL
5
+ REGEXP = %r{
6
+ (?<slug>[^/]+/[^/]+)
7
+ (/(pull|merge_requests|pull-requests)/)
8
+ (?<id>\d+)
9
+ }x
10
+
11
+ def initialize(url)
12
+ @url = url
13
+ end
14
+
15
+ def call
16
+ matched = url.match(REGEXP)
17
+
18
+ if matched
19
+ RepoInfo.new(matched[:slug], matched[:id])
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :url
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ module Danger
2
+ class LocalPullRequest
3
+ attr_reader :pull_request_id, :sha
4
+
5
+ def initialize(log_line)
6
+ @log_line = log_line
7
+
8
+ @pull_request_id = log_line.match(/#(?<id>[0-9]+)/)[:id]
9
+ @sha = log_line.split(" ".freeze).first
10
+ end
11
+
12
+ def valid?
13
+ pull_request_id && sha
14
+ end
15
+
16
+ private
17
+
18
+ attr_reader :log_line
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ module Danger
2
+ class NoPullRequest
3
+ def valid?
4
+ false
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Danger
2
+ class NoRepoInfo
3
+ attr_reader :slug, :id
4
+ end
5
+ end
@@ -1,25 +1,82 @@
1
+ require "danger/ci_source/support/local_pull_request"
2
+ require "danger/ci_source/support/remote_pull_request"
3
+ require "danger/ci_source/support/no_pull_request"
4
+
1
5
  module Danger
2
- class MergedPullRequestFinder
3
- def initialize(specific_pull_request_id, git_logs)
6
+ class PullRequestFinder
7
+ def initialize(specific_pull_request_id, repo_slug = nil, remote: false, git_logs: "")
4
8
  @specific_pull_request_id = specific_pull_request_id
5
9
  @git_logs = git_logs
10
+ @repo_slug = repo_slug
11
+ @remote = to_boolean(remote)
6
12
  end
7
13
 
8
14
  def call
9
- check_if_any_merged_pull_request!
15
+ check_if_any_pull_request!
10
16
 
11
- [merged_pull_request_id, merged_pull_request_sha]
17
+ pull_request
12
18
  end
13
19
 
14
20
  private
15
21
 
16
- attr_reader :specific_pull_request_id, :git_logs
22
+ attr_reader :specific_pull_request_id, :git_logs, :repo_slug, :remote
23
+
24
+ def to_boolean(maybe_string)
25
+ if ["true", "1", "yes", "y", true].include?(maybe_string)
26
+ true
27
+ else
28
+ false
29
+ end
30
+ end
31
+
32
+ def check_if_any_pull_request!
33
+ unless pull_request.valid?
34
+ if !specific_pull_request_id.empty?
35
+ raise "Could not find the Pull Request (#{specific_pull_request_id}) inside the git history for this repo."
36
+ else
37
+ raise "No recent Pull Requests found for this repo, danger requires at least one Pull Request for the local mode.".freeze
38
+ end
39
+ end
40
+ end
41
+
42
+ # @return [String] Log line of most recent merged Pull Request
43
+ def pull_request
44
+ @pull_request ||= begin
45
+ return if pull_request_ref.empty?
46
+
47
+ if both_present?
48
+ LocalPullRequest.new(pick_the_most_recent_one_from_two_matches)
49
+ elsif only_merged_pull_request_present?
50
+ LocalPullRequest.new(most_recent_merged_pull_request)
51
+ elsif only_squash_and_merged_pull_request_present?
52
+ LocalPullRequest.new(most_recent_squash_and_merged_pull_request)
53
+ elsif remote && remote_pull_request
54
+ RemotePullRequest.new(
55
+ remote_pull_request.number.to_s,
56
+ remote_pull_request.head.sha,
57
+ remote_pull_request.base.sha
58
+ )
59
+ else
60
+ NoPullRequest.new
61
+ end
62
+ end
63
+ end
17
64
 
18
65
  # @return [String] "#42"
19
66
  def pull_request_ref
20
67
  !specific_pull_request_id.empty? ? "##{specific_pull_request_id}" : "#\\d+".freeze
21
68
  end
22
69
 
70
+ def remote_pull_request
71
+ @_remote_pull_request ||= begin
72
+ client.pull_request(repo_slug, specific_pull_request_id)
73
+ end
74
+ end
75
+
76
+ def both_present?
77
+ most_recent_merged_pull_request && most_recent_squash_and_merged_pull_request
78
+ end
79
+
23
80
  # @return [String] Log line of format: "Merge pull request #42"
24
81
  def most_recent_merged_pull_request
25
82
  @most_recent_merged_pull_request ||= begin
@@ -34,23 +91,17 @@ module Danger
34
91
  end
35
92
  end
36
93
 
37
- # @return [String] Log line of most recent merged Pull Request
38
- def merged_pull_request
39
- return if pull_request_ref.empty?
94
+ def pick_the_most_recent_one_from_two_matches
95
+ merged_index = git_logs.lines.index(most_recent_merged_pull_request)
96
+ squash_and_merged_index = git_logs.lines.index(most_recent_squash_and_merged_pull_request)
40
97
 
41
- if both_present?
42
- pick_the_most_recent_one_from_two_matches
43
- elsif only_merged_pull_request_present?
44
- most_recent_merged_pull_request
45
- elsif only_squash_and_merged_pull_request_present?
98
+ if merged_index > squash_and_merged_index # smaller index is more recent
46
99
  most_recent_squash_and_merged_pull_request
100
+ else
101
+ most_recent_merged_pull_request
47
102
  end
48
103
  end
49
104
 
50
- def both_present?
51
- most_recent_merged_pull_request && most_recent_squash_and_merged_pull_request
52
- end
53
-
54
105
  def only_merged_pull_request_present?
55
106
  return false if most_recent_squash_and_merged_pull_request
56
107
 
@@ -63,33 +114,9 @@ module Danger
63
114
  !most_recent_squash_and_merged_pull_request.nil? && !most_recent_squash_and_merged_pull_request.empty?
64
115
  end
65
116
 
66
- def pick_the_most_recent_one_from_two_matches
67
- merged_index = git_logs.lines.index(most_recent_merged_pull_request)
68
- squash_and_merged_index = git_logs.lines.index(most_recent_squash_and_merged_pull_request)
69
-
70
- if merged_index > squash_and_merged_index # smaller index is more recent
71
- most_recent_squash_and_merged_pull_request
72
- else
73
- most_recent_merged_pull_request
74
- end
75
- end
76
-
77
- def check_if_any_merged_pull_request!
78
- if merged_pull_request.to_s.empty?
79
- if !specific_pull_request_id.empty?
80
- raise "Could not find the Pull Request (#{specific_pull_request_id}) inside the git history for this repo."
81
- else
82
- raise "No recent Pull Requests found for this repo, danger requires at least one Pull Request for the local mode.".freeze
83
- end
84
- end
85
- end
86
-
87
- def merged_pull_request_id
88
- merged_pull_request.match(/#(?<id>[0-9]+)/)[:id]
89
- end
90
-
91
- def merged_pull_request_sha
92
- merged_pull_request.split(" ".freeze).first
117
+ def client
118
+ require "octokit"
119
+ Octokit::Client.new(access_token: ENV["DANGER_GITHUB_API_TOKEN"])
93
120
  end
94
121
  end
95
122
  end
@@ -0,0 +1,15 @@
1
+ module Danger
2
+ class RemotePullRequest
3
+ attr_reader :pull_request_id, :sha, :head, :base
4
+
5
+ def initialize(pull_request_id, head, base)
6
+ @pull_request_id = pull_request_id
7
+ @head = head
8
+ @base = base
9
+ end
10
+
11
+ def valid?
12
+ pull_request_id && head && base
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ module Danger
2
+ class RepoInfo
3
+ attr_reader :slug, :id
4
+
5
+ def initialize(slug, id)
6
+ @slug = slug
7
+ @id = id
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,116 @@
1
+ require "danger/commands/local_helpers/http_cache"
2
+ require "faraday/http_cache"
3
+ require "fileutils"
4
+ require "octokit"
5
+ require "tmpdir"
6
+
7
+ module Danger
8
+ class PR < Runner
9
+ self.summary = "Run the Dangerfile against Pull Requests (works with forks, too).".freeze
10
+ self.command = "pr".freeze
11
+
12
+ def self.options
13
+ [
14
+ ["--use-pr=[#id]", "The URL of the Pull Request for the command to run."],
15
+ ["--clear-http-cache", "Clear the local http cache before running Danger locally."],
16
+ ["--pry", "Drop into a Pry shell after evaluating the Dangerfile."]
17
+ ]
18
+ end
19
+
20
+ def initialize(argv)
21
+ @pr_url = argv.option("use-pr")
22
+ @clear_http_cache = argv.flag?("clear-http-cache", false)
23
+
24
+ super
25
+
26
+ setup_pry if should_pry?(argv)
27
+ end
28
+
29
+ def should_pry?(argv)
30
+ argv.flag?("pry", false) && !@dangerfile_path.empty? && validate_pry_available
31
+ end
32
+
33
+ def setup_pry
34
+ File.delete "_Dangerfile.tmp" if File.exist? "_Dangerfile.tmp"
35
+ FileUtils.cp @dangerfile_path, "_Dangerfile.tmp"
36
+ File.open("_Dangerfile.tmp", "a") do |f|
37
+ f.write("binding.pry; File.delete(\"_Dangerfile.tmp\")")
38
+ end
39
+ @dangerfile_path = "_Dangerfile.tmp"
40
+ end
41
+
42
+ def validate_pry_available
43
+ require "pry"
44
+ rescue LoadError
45
+ cork.warn "Pry was not found, and is required for 'danger pr --pry'."
46
+ cork.print_warnings
47
+ abort
48
+ end
49
+
50
+ def validate!
51
+ super
52
+ unless @dangerfile_path
53
+ help! "Could not find a Dangerfile."
54
+ end
55
+ end
56
+
57
+ def run
58
+ ENV["DANGER_USE_LOCAL_GIT"] = "YES"
59
+ ENV["LOCAL_GIT_PR_URL"] = @pr_url if @pr_url
60
+
61
+ # setup caching for Github calls to hitting the API rate limit too quickly
62
+ cache_file = File.join(ENV["DANGER_TMPDIR"] || Dir.tmpdir, "danger_local_cache")
63
+ cache = HTTPCache.new(cache_file, clear_cache: @clear_http_cache)
64
+ Octokit.middleware = Faraday::RackBuilder.new do |builder|
65
+ builder.use Faraday::HttpCache, store: cache, serializer: Marshal, shared_cache: false
66
+ builder.use Octokit::Response::RaiseError
67
+ builder.adapter Faraday.default_adapter
68
+ end
69
+
70
+ env = EnvironmentManager.new(ENV, cork)
71
+ dm = Dangerfile.new(env, cork)
72
+ dm.init_plugins
73
+
74
+ source = dm.env.ci_source
75
+ if source.nil? or source.repo_slug.empty?
76
+ cork.puts "danger pr failed because it only works with GitHub projects at the moment. Sorry.".red
77
+ exit 0
78
+ end
79
+
80
+ gh = dm.env.request_source
81
+
82
+ cork.puts "Running your Dangerfile against this PR - https://#{gh.host}/#{source.repo_slug}/pull/#{source.pull_request_id}"
83
+
84
+ if verbose != true
85
+ cork.puts "Turning on --verbose"
86
+ dm.verbose = true
87
+ end
88
+
89
+ cork.puts
90
+
91
+ # We can use tokenless here, as it's running on someone's computer
92
+ # and is IP locked, as opposed to on the CI.
93
+ gh.support_tokenless_auth = true
94
+
95
+ begin
96
+ gh.fetch_details
97
+ rescue Octokit::NotFound
98
+ cork.puts "Local repository was not found on GitHub. If you're trying to test a private repository please provide a valid API token through " + "DANGER_GITHUB_API_TOKEN".yellow + " environment variable."
99
+ return
100
+ end
101
+
102
+ dm.env.request_source = gh
103
+
104
+ begin
105
+ dm.env.fill_environment_vars
106
+ dm.env.ensure_danger_branches_are_setup
107
+ dm.env.scm.diff_for_folder(".", from: Danger::EnvironmentManager.danger_base_branch, to: Danger::EnvironmentManager.danger_head_branch)
108
+
109
+ dm.parse(Pathname.new(@dangerfile_path))
110
+ dm.print_results
111
+ ensure
112
+ dm.env.clean_up
113
+ end
114
+ end
115
+ end
116
+ end
@@ -3,6 +3,7 @@ module Danger
3
3
  require "danger/commands/init"
4
4
  require "danger/commands/local"
5
5
  require "danger/commands/systems"
6
+ require "danger/commands/pr"
6
7
 
7
8
  # manually set claide plugins as a subcommand
8
9
  require "claide_plugin"
@@ -16,10 +16,12 @@ module Danger
16
16
  require "yard"
17
17
  # Pull out all the Danger::CI subclasses docs
18
18
  registry = YARD::Registry.load(ci_source_paths, true)
19
- ci_sources = registry.all(:class)
20
- .select { |klass| klass.inheritance_tree.map(&:name).include? :CI }
21
- .reject { |source| source.name == :CI }
22
- .reject { |source| source.name == :LocalGitRepo }
19
+ ci_sources = begin
20
+ registry.all(:class)
21
+ .select { |klass| klass.inheritance_tree.map(&:name).include? :CI }
22
+ .reject { |source| source.name == :CI }
23
+ .reject { |source| source.name == :LocalGitRepo }
24
+ end
23
25
 
24
26
  # Fail if anything is added and not documented
25
27
  cis_without_docs = ci_sources.select { |source| source.base_docstring.empty? }
@@ -98,8 +98,10 @@ module Danger
98
98
  end
99
99
 
100
100
  def issue_comments
101
- @comments ||= client.issue_comments(ci_source.repo_slug, ci_source.pull_request_id)
102
- .map { |comment| Comment.from_github(comment) }
101
+ @comments ||= begin
102
+ client.issue_comments(ci_source.repo_slug, ci_source.pull_request_id)
103
+ .map { |comment| Comment.from_github(comment) }
104
+ end
103
105
  end
104
106
 
105
107
  # Sending data to GitHub
@@ -55,13 +55,17 @@ module Danger
55
55
  end
56
56
 
57
57
  def mr_comments
58
- @comments ||= client.merge_request_comments(escaped_ci_slug, ci_source.pull_request_id)
59
- .map { |comment| Comment.from_gitlab(comment) }
58
+ @comments ||= begin
59
+ client.merge_request_comments(escaped_ci_slug, ci_source.pull_request_id)
60
+ .map { |comment| Comment.from_gitlab(comment) }
61
+ end
60
62
  end
61
63
 
62
64
  def mr_diff
63
- @mr_diff ||= client.merge_request_changes(escaped_ci_slug, ci_source.pull_request_id)
64
- .changes.map { |change| change["diff"] }.join("\n")
65
+ @mr_diff ||= begin
66
+ client.merge_request_changes(escaped_ci_slug, ci_source.pull_request_id)
67
+ .changes.map { |change| change["diff"] }.join("\n")
68
+ end
65
69
  end
66
70
 
67
71
  def escaped_ci_slug
@@ -1,4 +1,4 @@
1
1
  module Danger
2
- VERSION = "3.5.0".freeze
2
+ VERSION = "3.5.1".freeze
3
3
  DESCRIPTION = "Like Unit Tests, but for your Team Culture.".freeze
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.0
4
+ version: 3.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Orta Therox
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-10-05 00:00:00.000000000 Z
12
+ date: 2016-10-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: claide
@@ -385,8 +385,15 @@ files:
385
385
  - lib/danger/ci_source/jenkins.rb
386
386
  - lib/danger/ci_source/local_git_repo.rb
387
387
  - lib/danger/ci_source/semaphore.rb
388
- - lib/danger/ci_source/support/merged_pull_request_finder.rb
389
- - lib/danger/ci_source/support/remote_finder.rb
388
+ - lib/danger/ci_source/support/commits.rb
389
+ - lib/danger/ci_source/support/find_repo_info_from_logs.rb
390
+ - lib/danger/ci_source/support/find_repo_info_from_url.rb
391
+ - lib/danger/ci_source/support/local_pull_request.rb
392
+ - lib/danger/ci_source/support/no_pull_request.rb
393
+ - lib/danger/ci_source/support/no_repo_info.rb
394
+ - lib/danger/ci_source/support/pull_request_finder.rb
395
+ - lib/danger/ci_source/support/remote_pull_request.rb
396
+ - lib/danger/ci_source/support/repo_info.rb
390
397
  - lib/danger/ci_source/surf.rb
391
398
  - lib/danger/ci_source/teamcity.rb
392
399
  - lib/danger/ci_source/travis.rb
@@ -401,6 +408,7 @@ files:
401
408
  - lib/danger/commands/plugins/plugin_json.rb
402
409
  - lib/danger/commands/plugins/plugin_lint.rb
403
410
  - lib/danger/commands/plugins/plugin_readme.rb
411
+ - lib/danger/commands/pr.rb
404
412
  - lib/danger/commands/runner.rb
405
413
  - lib/danger/commands/systems.rb
406
414
  - lib/danger/comment_generators/bitbucket_server.md.erb
@@ -461,7 +469,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
461
469
  version: '0'
462
470
  requirements: []
463
471
  rubyforge_project:
464
- rubygems_version: 2.2.2
472
+ rubygems_version: 2.6.7
465
473
  signing_key:
466
474
  specification_version: 4
467
475
  summary: Like Unit Tests, but for your Team Culture.
@@ -1,26 +0,0 @@
1
- module Danger
2
- class RemoteFinder
3
- def initialize(github_host, remote_logs)
4
- @github_host = github_host
5
- @remote_logs = remote_logs
6
- end
7
-
8
- def call
9
- remote_url_matches && remote_url_matches["repo_slug"]
10
- end
11
-
12
- private
13
-
14
- attr_reader :remote_logs, :github_host
15
-
16
- # @return [String] The remote URL
17
- def remote
18
- @remote ||= remote_logs.lines.grep(/Fetch URL/)[0].split(": ".freeze, 2)[1]
19
- end
20
-
21
- # @return [nil / MatchData] MatchData object or nil if not matched
22
- def remote_url_matches
23
- remote.match(%r{#{Regexp.escape github_host}(:|/)(?<repo_slug>.+/.+?)(?:\.git)?$})
24
- end
25
- end
26
- end