module Deathnote

Constants

VERSION

Public Class Methods

run(argv) click to toggle source
# File lib/deathnote.rb, line 10
def run(argv)
  options = parse_options(argv)
  backup_commit = cmd('git rev-parse --abbrev-ref HEAD')

  cmd("git checkout #{options[:past_commit]}")
  past_missing = DeadCodes.new(options.deep_clone).run

  cmd("git checkout #{options[:newer_commit]}")
  newer_missing = DeadCodes.new(options.deep_clone).run

  newer_missing.
    reject { |unused, _location| past_missing.has_key?(unused) }.
    each { |unused, location| puts "#{unused} #{location}" }
ensure
  cmd("git checkout #{backup_commit}")
end

Private Class Methods

cmd(command) click to toggle source
# File lib/deathnote.rb, line 29
def cmd(command)
  Open3.popen3(command) { |_i, o, _e, _t| o.read.chomp }
end
parse_options(argv) click to toggle source
# File lib/deathnote.rb, line 33
def parse_options(argv)
  options = {
    whitelist: []
  }
  OptionParser.new do |opts|
    opts.banner = 'Usage: deathnote [options] files_or_dirs'

    opts.on('-h', '--help', 'Display this help.') do
      puts opts
      exit
    end
    opts.on('-p[commit hash]', '--past-commit=[commit hash]', 'Specify past commit hash.') do |past_commit|
      options[:past_commit] = past_commit
    end
    opts.on('-n[commit hash]', '--newer-commit=[commit hash]', 'Specify newer commit hash.') do |newer_commit|
      options[:newer_commit] = newer_commit
    end
    opts.on('-r', '--rails', 'Filter some rails call conversions.') do
      options[:rails] = true
    end
    opts.on('-w', '--whitelist=FILE', 'Whitelist with separated by \n') do
      options[:whitelist] = File.read(s).split(/\n+/) rescue []
    end
    opts.on('-e', '--exclude=FILE1,FILE2,...', Array, 'Exclude files or directories in comma-separated list.') do |list|
      options[:exclude] = list
    end
  end.parse!
  options[:target_paths] = argv

  options
rescue OptionParser::InvalidOption => e
  warn "Fail to parse options."
  warn e.message
  exit 1
end