#!/usr/bin/env ruby $LOAD_PATH << File.expand_path("../lib", File.dirname(__FILE__)) require 'optionparser' require 'shiba/configure' require 'shiba/reviewer' require 'shiba/review/explain_diff' require 'shiba/review/cli' require 'json' cli = Shiba::Review::CLI.new cli.report_options("diff", "branch", "pull_request") if !cli.valid? $stderr.puts cli.failure exit 1 end explain_diff = Shiba::Review::ExplainDiff.new(cli.options["file"], cli.options) problems = if explain_diff.diff_requested_by_user? result = explain_diff.result if result.message $stderr.puts result.message end if result.status == :pass exit end explain_diff.problems else explains = File.open(cli.options["file"]).each_line.map { |json| JSON.parse(json) } bad = explains.select { |explain| explain["severity"] && explain["severity"] != 'none' } bad.map { |explain| [ "#{explain["sql"]}:-2", explain ] } end repo_cmd = "git config --get remote.origin.url" repo_url = `#{repo_cmd}`.chomp if cli.options["verbose"] $stderr.puts "#{repo_cmd}\t#{repo_url}" end if repo_url.empty? $stderr.puts "'#{Dir.pwd}' does not appear to be a git repo" exit 1 end # Generate comments for the problem queries reviewer = Shiba::Reviewer.new(repo_url, problems, cli.options) if !cli.options["submit"] || cli.options["verbose"] reviewer.comments.each do |c| puts "#{c[:path]}:#{c[:line]} (#{c[:position]})" puts c[:body] puts "" end end if cli.options["submit"] if reviewer.repo_host.empty? || reviewer.repo_path.empty? $stderr.puts "Invalid repo url '#{repo_url}' from git config --get remote.origin.url" exit 1 end reviewer.submit end exit 2