class GitDiffLCS::Shortstat

Shortstat

Attributes

add[R]
del[R]
deletions[R]
errors[R]
insertions[R]
mod[R]
modifications[R]

Public Class Methods

new(git_target, src, dest) click to toggle source

initialize GitDiffLCS::Shortstat

Arguments:

[String] git_target: git repository address or working directory
[String] src: commit or branch
[String] dest: commit or branch
# File lib/git_diff_lcs/shortstat.rb, line 20
def initialize(git_target, src, dest)
  @dir = Dir.mktmpdir
  @add, @del, @mod = *GitDiffLCS::INIT_COUNT
  @errors = []
  @git = GitDiffLCS::LibGit.new(git_target, @dir, src, dest)
  calculate
rescue Git::GitExecuteError, ArgumentError
  @errors << "[ERROR] wrong arguments"
ensure
  FileUtils.rm_rf(@dir)
end

Public Instance Methods

summary() click to toggle source

Get diff summary changed files, insertions, deletions, modifications and total

Return:

[String] diff summary
# File lib/git_diff_lcs/shortstat.rb, line 37
def summary
  " #{@git.diff.name_status.keys.size} files changed, "\
  "#{@add} insertions(+), #{@del} deletions(-), #{@mod} modifications(!), "\
  "total(#{@add + @del + @mod})"
end

Private Instance Methods

add_result(diff) click to toggle source

add each count variable

# File lib/git_diff_lcs/shortstat.rb, line 46
def add_result(diff)
  @add += 1 if diff.adding?
  @del += 1 if diff.deleting?
  @mod += 1 if diff.changed?
end
calculate() click to toggle source

count diff rubocop:disable Metrics/AbcSize, Metrics/MethodLength

# File lib/git_diff_lcs/shortstat.rb, line 54
def calculate
  @git.diff.name_status.each do |filename, status|
    src_filename = "#{@dir}/#{GitDiffLCS::SRC_FOLDER}/#{filename}"
    dest_filename = "#{@dir}/#{GitDiffLCS::DEST_FOLDER}/#{filename}"

    case status
    when "A"
      @add += File.open(dest_filename).readlines.size
      next
    when "D"
      @del += File.open(src_filename).readlines.size
      next
    else
      src = File.open(src_filename)
      dest = File.open(dest_filename)
      Diff::LCS.sdiff(src.readlines, dest.readlines).each { |d| add_result(d) }
    end
  end
end