class Rubycritic::Git

def self.supported?

def self.supported?
  `git branch 2>&1` && $?.success?
end

def self.to_s

def self.to_s
  "Git"
end

def everything_commmited?

def everything_commmited?
  `git status --porcelain`.empty?
end

def has_revision?

def has_revision?
  head_reference && $?.success?
end

def head_reference

def head_reference
  `git rev-parse --verify HEAD`.chomp
end

def revisions_count(file)

def revisions_count(file)
  `git log --follow --format=oneline #{file}`.count("\n")
end

def stash_changes

def stash_changes
  return false if everything_commmited?
  stashes_count_before = stashes_count
  `git stash`
  stashes_count_after = stashes_count
  stashes_count_after > stashes_count_before
end

def stashes_count

def stashes_count
  `git stash list`.count("\n")
end

def travel_to_head

def travel_to_head
  stash_successful = stash_changes
  yield
ensure
  travel_to_original_state if stash_successful
end

def travel_to_original_state

def travel_to_original_state
  `git stash pop`
end