lib/danger/commands/local.rb in danger-4.2.1 vs lib/danger/commands/local.rb in danger-4.2.2
- old
+ new
@@ -1,6 +1,8 @@
require "danger/commands/local_helpers/http_cache"
+require "danger/commands/local_helpers/local_setup"
+require "danger/commands/local_helpers/pry_setup"
require "faraday/http_cache"
require "fileutils"
require "octokit"
require "tmpdir"
@@ -21,34 +23,15 @@
@pr_num = argv.option("use-merged-pr")
@clear_http_cache = argv.flag?("clear-http-cache", false)
super
- setup_pry if should_pry?(argv)
- end
-
- def should_pry?(argv)
- argv.flag?("pry", false) && !@dangerfile_path.empty? && validate_pry_available
- end
-
- def setup_pry
- File.delete "_Dangerfile.tmp" if File.exist? "_Dangerfile.tmp"
- FileUtils.cp @dangerfile_path, "_Dangerfile.tmp"
- File.open("_Dangerfile.tmp", "a") do |f|
- f.write("binding.pry; File.delete(\"_Dangerfile.tmp\")")
+ if argv.flag?("pry", false)
+ @dangerfile_path = PrySetup.new(cork).setup_pry(@dangerfile_path)
end
- @dangerfile_path = "_Dangerfile.tmp"
end
- def validate_pry_available
- require "pry"
- rescue LoadError
- cork.warn "Pry was not found, and is required for 'danger local --pry'."
- cork.print_warnings
- abort
- end
-
def validate!
super
unless @dangerfile_path
help! "Could not find a Dangerfile."
end
@@ -56,61 +39,35 @@
def run
ENV["DANGER_USE_LOCAL_GIT"] = "YES"
ENV["LOCAL_GIT_PR_ID"] = @pr_num if @pr_num
- # setup caching for Github calls to hitting the API rate limit too quickly
- cache_file = File.join(ENV["DANGER_TMPDIR"] || Dir.tmpdir, "danger_local_cache")
- cache = HTTPCache.new(cache_file, clear_cache: @clear_http_cache)
- Octokit.middleware = Faraday::RackBuilder.new do |builder|
- builder.use Faraday::HttpCache, store: cache, serializer: Marshal, shared_cache: false
- builder.use Octokit::Response::RaiseError
- builder.adapter Faraday.default_adapter
- end
+ configure_octokit(ENV["DANGER_TMPDIR"] || Dir.tmpdir)
env = EnvironmentManager.new(ENV, cork)
dm = Dangerfile.new(env, cork)
- dm.init_plugins
- source = dm.env.ci_source
- if source.nil? or source.repo_slug.empty?
- cork.puts "danger local failed because it only works with GitHub projects at the moment. Sorry.".red
- exit 0
+ LocalSetup.new(dm, cork).setup(verbose: verbose) do
+ dm.run(
+ Danger::EnvironmentManager.danger_base_branch,
+ Danger::EnvironmentManager.danger_head_branch,
+ @dangerfile_path,
+ nil,
+ nil
+ )
end
+ end
- gh = dm.env.request_source
+ private
- cork.puts "Running your Dangerfile against this PR - https://#{gh.host}/#{source.repo_slug}/pull/#{source.pull_request_id}"
-
- if verbose != true
- cork.puts "Turning on --verbose"
- dm.verbose = true
- end
-
- cork.puts
-
- # We can use tokenless here, as it's running on someone's computer
- # and is IP locked, as opposed to on the CI.
- gh.support_tokenless_auth = true
-
- begin
- gh.fetch_details
- rescue Octokit::NotFound
- 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."
- return
- end
-
- dm.env.request_source = gh
-
- begin
- dm.env.fill_environment_vars
- dm.env.ensure_danger_branches_are_setup
- dm.env.scm.diff_for_folder(".", from: Danger::EnvironmentManager.danger_base_branch, to: Danger::EnvironmentManager.danger_head_branch)
-
- dm.parse(Pathname.new(@dangerfile_path))
- dm.print_results
- ensure
- dm.env.clean_up
+ def configure_octokit(cache_dir)
+ # setup caching for Github calls to hitting the API rate limit too quickly
+ cache_file = File.join(cache_dir, "danger_local_cache")
+ cache = HTTPCache.new(cache_file, clear_cache: @clear_http_cache)
+ Octokit.middleware = Faraday::RackBuilder.new do |builder|
+ builder.use Faraday::HttpCache, store: cache, serializer: Marshal, shared_cache: false
+ builder.use Octokit::Response::RaiseError
+ builder.adapter Faraday.default_adapter
end
end
end
end