danger 3.2.0 → 3.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 52836eb7928792ec1e8ec0ffb78076c0e1d6cae0
4
- data.tar.gz: 9d550c596cfe8e25764a0662965fc4e4768ddf54
3
+ metadata.gz: 6408840e4167a8092819c1b40d3c409b61df856b
4
+ data.tar.gz: 036b9a85309a45403d2649949f7f63b2722d5a50
5
5
  SHA512:
6
- metadata.gz: 7103cf673b79e9827e1eef36a08c8001540fff0e0f5f535d2d4ce01a4b3d836546ea4cf083e736c5bf4ce0f3a3e9f3f93829713313672fa2d6f10f7c06ab591a
7
- data.tar.gz: 2af2f1aebc31d5c3b573e2af054a46975160c9b200b3d06511036d0b7a05862b36869273a8d99083724725f11edf97632664200e752b5b63aba3f26695cf6a0b
6
+ metadata.gz: decc456c54fc15961a5f73c92b8cf131a784bffb01842d05f97dff361f36ece7a0dbc1443e9d74fde21acd40a3c83fa070e0cc17dfc33745788f7a68441d1ead
7
+ data.tar.gz: 56c7fe3cf50c9d0b8d7fb91f2e70f195970f10c7ec1f813768c357626eac43212edde7697ccf4e6ee1b2225f76b0d3628cfaa803893dc228c5cd6eba1458909d
data/lib/danger.rb CHANGED
@@ -18,13 +18,14 @@ Dir[File.expand_path("danger/*source/*.rb", File.dirname(__FILE__))].each do |fi
18
18
  end
19
19
 
20
20
  module Danger
21
+ GEM_NAME = "danger".freeze
22
+
21
23
  # @return [String] The path to the local gem directory
22
24
  def self.gem_path
23
- gem_name = "danger"
24
- unless Gem::Specification.find_all_by_name(gem_name).any?
25
+ if Gem::Specification.find_all_by_name(GEM_NAME).empty?
25
26
  raise "Couldn't find gem directory for 'danger'"
26
27
  end
27
- return Gem::Specification.find_by_name(gem_name).gem_dir
28
+ return Gem::Specification.find_by_name(GEM_NAME).gem_dir
28
29
  end
29
30
 
30
31
  # @return [String] Latest version of Danger on https://rubygems.org
@@ -123,12 +123,9 @@ module Danger
123
123
  when :pr_json
124
124
  value = "[Skipped]"
125
125
 
126
- when :pr_body
127
- value = plugin.send(method)
128
- value = value.scan(/.{,80}/).to_a.each(&:strip!).join("\n")
129
-
130
126
  else
131
127
  value = plugin.send(method)
128
+ value = value.scan(/.{,80}/).to_a.each(&:strip!).join("\n") if value.kind_of?(String)
132
129
  # So that we either have one value per row
133
130
  # or we have [] for an empty array
134
131
  value = value.join("\n") if value.kind_of?(Array) && value.count > 0
@@ -158,7 +155,9 @@ module Danger
158
155
 
159
156
  ui.section("Info:") do
160
157
  ui.puts
161
- ui.puts Terminal::Table.new(params)
158
+ table = Terminal::Table.new(params)
159
+ table.align_column(0, :right)
160
+ ui.puts table
162
161
  ui.puts
163
162
  end
164
163
  end
@@ -17,6 +17,10 @@ module Danger
17
17
  other.line == line
18
18
  end
19
19
 
20
+ def inline?
21
+ return (file.nil? && line.nil?) == false
22
+ end
23
+
20
24
  def to_s
21
25
  extra = []
22
26
  extra << "file: #{file}" unless file.nil?
@@ -17,12 +17,6 @@ module Danger
17
17
  #
18
18
  # fail "Please add labels to this PR" if bitbucket_server.pr_labels.empty?
19
19
  #
20
- # @example Check if a user is in a specific bitbucket_server org, and message them if so
21
- #
22
- # unless bitbucket_server.api.organization_member?('danger', bitbucket_server.pr_author)
23
- # message "@#{bitbucket_server.pr_author} is not a contributor yet, would you like to join the Danger org?"
24
- # end
25
- #
26
20
  # @example Ensure there is a summary for a PR
27
21
  #
28
22
  # fail "Please provide a summary in the Pull Request description" if bitbucket_server.pr_body.length < 5
@@ -1,11 +1,8 @@
1
1
  require "danger/plugin_support/plugin"
2
2
 
3
3
  module Danger
4
- # One way to support internal plugins is via `plugin.import` this gives you
5
- # the chance to quickly iterate without the need for building rubygems. As such,
6
- # it does not have the stringent rules around documentation expected of a public plugin.
7
- # It's worth noting, that you can also have plugins inside `./danger_plugins` and they
8
- # will be automatically imported into your Dangerfile at launch.
4
+ # A way to interact with Danger herself. Offering APIs to import plugins,
5
+ # and Dangerfiles from muliple sources.
9
6
  #
10
7
  # @example Import a plugin available over HTTP
11
8
  #
@@ -20,6 +17,18 @@ module Danger
20
17
  #
21
18
  # danger.import_plugin("danger/plugins/*.rb")
22
19
  #
20
+ # @example Run a Dangerfile from inside a sub-folder
21
+ #
22
+ # danger.import_dangerfile(file: "danger/Dangerfile.private")
23
+ #
24
+ # @example Run a Dangerfile from inside a gem
25
+ #
26
+ # danger.import_dangerfile(gem: "ruby-grape-danger")
27
+ #
28
+ # @example Run a Dangerfile from inside a repo
29
+ #
30
+ # danger.import_dangerfile(gitlab: "ruby-grape/danger")
31
+ #
23
32
  # @see danger/danger
24
33
  # @tags core, plugins
25
34
 
@@ -53,7 +62,8 @@ module Danger
53
62
  # Import a Dangerfile.
54
63
  #
55
64
  # @param [Hash] opts
56
- # @option opts [String] :github Github path
65
+ # @option opts [String] :github GitHub repo
66
+ # @option opts [String] :gitlab GitLab repo
57
67
  # @option opts [String] :gem Gem name
58
68
  # @option opts [String] :path Path to Dangerfile
59
69
  # @return [void]
@@ -62,8 +72,8 @@ module Danger
62
72
  warn "Use `import_dangerfile(github: '#{opts}')` instead of `import_dangerfile '#{opts}'`."
63
73
  import_dangerfile_from_github(opts)
64
74
  elsif opts.kind_of?(Hash)
65
- if opts.key?(:github)
66
- import_dangerfile_from_github(opts[:github])
75
+ if opts.key?(:github) || opts.key?(:gitlab)
76
+ import_dangerfile_from_github(opts[:github] || opts[:gitlab])
67
77
  elsif opts.key?(:path)
68
78
  import_dangerfile_from_path(opts[:path])
69
79
  elsif opts.key?(:gem)
@@ -76,6 +86,24 @@ module Danger
76
86
  end
77
87
  end
78
88
 
89
+ # @!group Danger
90
+ # Returns the name of the current SCM Provider being used.
91
+ # @return [Symbol] The name of the SCM Provider used for the active repository.
92
+ def scm_provider
93
+ return :unknown unless env.request_source
94
+
95
+ case env.request_source
96
+ when Danger::RequestSources::GitHub
97
+ :github
98
+ when Danger::RequestSources::GitLab
99
+ :gitlab
100
+ when Danger::RequestSources::BitbucketServer
101
+ :bitbucket_server
102
+ else
103
+ :unknown
104
+ end
105
+ end
106
+
79
107
  private
80
108
 
81
109
  # @!group Danger
@@ -4,52 +4,52 @@ module Danger
4
4
  # Handles interacting with GitLab inside a Dangerfile. Provides a few functions which wrap `mr_json` and also
5
5
  # through a few standard functions to simplify your code.
6
6
  #
7
- # @example Warn when an MR is classed as work in progress
7
+ # @example Warn when an MR is classed as work in progress.
8
8
  #
9
9
  # warn "MR is classed as Work in Progress" if gitlab.mr_title.include? "[WIP]"
10
10
  #
11
- # @example Declare a MR to be simple to avoid specific Danger rules
11
+ # @example Declare a MR to be simple to avoid specific Danger rules.
12
12
  #
13
13
  # declared_trivial = (gitlab.mr_title + gitlab.mr_body).include?("#trivial")
14
14
  #
15
- # @example Ensure that labels have been applied to the MR
15
+ # @example Ensure that labels have been applied to the MR.
16
16
  #
17
17
  # fail "Please add labels to this MR" if gitlab.mr_labels.empty?
18
18
  #
19
- # @example Ensure that all MRs have an assignee
19
+ # @example Ensure that all MRs have an assignee.
20
20
  #
21
21
  # warn "This MR does not have any assignees yet." unless gitlab.mr_json["assignee"]
22
22
  #
23
- # @example Ensure there is a summary for a MR
23
+ # @example Ensure there is a summary for a MR.
24
24
  #
25
- # fail "Please provide a summary in the Pull Request description" if gitlab.mr_body.length < 5
25
+ # fail "Please provide a summary in the Merge Request description" if gitlab.mr_body.length < 5
26
26
  #
27
- # @example Only accept MRs to the develop branch
27
+ # @example Only accept MRs to the develop branch.
28
28
  #
29
29
  # fail "Please re-submit this MR to develop, we may have already fixed your issue." if gitlab.branch_for_merge != "develop"
30
30
  #
31
- # @example Note when MRs don't reference a milestone, which goes away when it does
31
+ # @example Note when MRs don't reference a milestone, which goes away when it does.
32
32
  #
33
33
  # has_milestone = gitlab.mr_json["milestone"] != nil
34
34
  # warn("This MR does not refer to an existing milestone", sticky: false) unless has_milestone
35
35
  #
36
- # @example Note when a MR cannot be manually merged, which goes away when you can
36
+ # @example Note when a MR cannot be manually merged, which goes away when you can.
37
37
  #
38
38
  # can_merge = gitlab.mr_json["mergeable"]
39
39
  # warn("This MR cannot be merged yet.", sticky: false) unless can_merge
40
40
  #
41
- # @example Highlight when a celebrity makes a pull request
41
+ # @example Highlight when a celebrity makes a merge request.
42
42
  #
43
43
  # message "Welcome, Danger." if gitlab.mr_author == "dangermcshane"
44
44
  #
45
- # @example Send a message with links to a collection of specific files
45
+ # @example Send a message with links to a collection of specific files.
46
46
  #
47
47
  # if git.modified_files.include? "config/*.js"
48
48
  # config_files = git.modified_files.select { |path| path.include? "config/" }
49
49
  # message "This MR changes #{ gitlab.html_link(config_files) }"
50
50
  # end
51
51
  #
52
- # @example Highlight with a clickable link if a Package.json is changed
52
+ # @example Highlight with a clickable link if a Package.json is changed.
53
53
  #
54
54
  # warn "#{gitlab.html_link("Package.json")} was edited." if git.modified_files.include? "Package.json"
55
55
  #
@@ -110,7 +110,7 @@ module Danger
110
110
  end
111
111
 
112
112
  # @!group MR Content
113
- # The unified diff produced by GitLab for this PR
113
+ # The unified diff produced by GitLab for this MR
114
114
  # see [Unified diff](https://en.wikipedia.org/wiki/Diff_utility#Unified_format)
115
115
  # @return [String]
116
116
  #
@@ -120,12 +120,29 @@ module Danger
120
120
 
121
121
  # @!group MR Commit Metadata
122
122
  # The branch to which the MR is going to be merged into
123
+ # @deprecated Please use {#branch_for_base} instead
123
124
  # @return [String]
124
125
  #
125
126
  def branch_for_merge
127
+ branch_for_base
128
+ end
129
+
130
+ # @!group MR Commit Metadata
131
+ # The branch to which the MR is going to be merged into.
132
+ # @return [String]
133
+ #
134
+ def branch_for_base
126
135
  @gitlab.mr_json.target_branch
127
136
  end
128
137
 
138
+ # @!group MR Commit Metadata
139
+ # The branch to which the MR is going to be merged from.
140
+ # @return [String]
141
+ #
142
+ def branch_for_head
143
+ @gitlab.mr_json.source_branch
144
+ end
145
+
129
146
  # @!group MR Commit Metadata
130
147
  # The base commit to which the MR is going to be merged as a parent
131
148
  # @return [String]
@@ -153,8 +170,11 @@ module Danger
153
170
 
154
171
  # @!group GitLab Misc
155
172
  # Provides access to the GitLab API client used inside Danger. Making
156
- # it easy to use the GitLab API inside a Dangerfile.
173
+ # it easy to use the GitLab API inside a Dangerfile. See the gitlab
174
+ # gem's [documentation](http://www.rubydoc.info/gems/gitlab/Gitlab/Client)
175
+ # for accessible methods.
157
176
  # @return [GitLab::Client]
177
+ #
158
178
  def api
159
179
  @gitlab.client
160
180
  end
@@ -168,6 +188,7 @@ module Danger
168
188
  # Shows the full path as the link's text, defaults to `true`.
169
189
  #
170
190
  # @return [String]
191
+ #
171
192
  def html_link(paths, full_path: true)
172
193
  paths = [paths] unless paths.kind_of?(Array)
173
194
  commit = head_commit
@@ -13,6 +13,16 @@ module Danger
13
13
  self.pr_api_endpoint = "https://#{host}/rest/api/1.0/projects/#{project}/repos/#{slug}/pull-requests/#{pull_request_id}"
14
14
  end
15
15
 
16
+ def inspect
17
+ inspected = super
18
+
19
+ if @password
20
+ inspected = inspected.sub! @password, "********".freeze
21
+ end
22
+
23
+ inspected
24
+ end
25
+
16
26
  def credentials_given?
17
27
  @username && !@username.empty? && @password && !@password.empty?
18
28
  end
@@ -18,9 +18,9 @@ module Danger
18
18
  raise "Subclass and overwrite initialize"
19
19
  end
20
20
 
21
- # What does this do?
21
+ # @return [Boolean] whether scm.origins is a valid git repository or not
22
22
  def validates_as_ci?
23
- !!self.scm.origins.match(%r{#{Regexp.escape self.host}(:|/)(?<repo_slug>.+/.+?)(?:\.git)?$})
23
+ !!self.scm.origins.match(%r{#{Regexp.escape self.host}(:|/)(.+/.+?)(?:\.git)?$})
24
24
  end
25
25
 
26
26
  def validates_as_api_source?
@@ -4,20 +4,27 @@ require "git"
4
4
 
5
5
  module Danger
6
6
  class GitRepo
7
- attr_accessor :diff, :log
7
+ attr_accessor :diff, :log, :folder
8
8
 
9
9
  def diff_for_folder(folder, from: "master", to: "HEAD")
10
- repo = Git.open folder
10
+ self.folder = folder
11
+ repo = Git.open self.folder
11
12
 
13
+ ensure_commitish_exists!(from)
14
+ ensure_commitish_exists!(to)
12
15
  merge_base = repo.merge_base(from, to)
16
+
17
+ ensure_commitish_exists!(merge_base)
13
18
  self.diff = repo.diff(merge_base.to_s, to)
14
19
  self.log = repo.log.between(from, to)
15
20
  end
16
21
 
17
22
  def exec(string)
18
23
  require "open3"
19
- Open3.popen2(default_env, "git #{string}") do |_stdin, stdout, _wait_thr|
20
- stdout.read.rstrip
24
+ Dir.chdir(self.folder || ".") do
25
+ Open3.popen2(default_env, "git #{string}") do |_stdin, stdout, _wait_thr|
26
+ stdout.read.rstrip
27
+ end
21
28
  end
22
29
  end
23
30
 
@@ -34,6 +41,10 @@ module Danger
34
41
  def default_env
35
42
  { "LANG" => "en_US.UTF-8" }
36
43
  end
44
+
45
+ def ensure_commitish_exists!(commitish)
46
+ exec "fetch" if exec("--no-pager show #{commitish}").empty?
47
+ end
37
48
  end
38
49
  end
39
50
 
@@ -1,4 +1,4 @@
1
1
  module Danger
2
- VERSION = "3.2.0".freeze
2
+ VERSION = "3.2.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.2.0
4
+ version: 3.2.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-09-03 00:00:00.000000000 Z
12
+ date: 2016-09-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: claide
@@ -419,7 +419,7 @@ files:
419
419
  - lib/danger/request_source/request_source.rb
420
420
  - lib/danger/scm_source/git_repo.rb
421
421
  - lib/danger/version.rb
422
- homepage: http://github.com/danger/danger
422
+ homepage: https://github.com/danger/danger
423
423
  licenses:
424
424
  - MIT
425
425
  metadata: {}
@@ -439,9 +439,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
439
439
  version: '0'
440
440
  requirements: []
441
441
  rubyforge_project:
442
- rubygems_version: 2.4.8
442
+ rubygems_version: 2.2.2
443
443
  signing_key:
444
444
  specification_version: 4
445
445
  summary: Like Unit Tests, but for your Team Culture.
446
446
  test_files: []
447
- has_rdoc: