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 has_revision?

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

def head_reference

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

def stash_changes

def stash_changes
  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`.split("\n").length
end

def travel_to_head

def travel_to_head
  if uncommited_changes?
    stash_successful = stash_changes
  end
  yield
ensure
  `git stash pop` if stash_successful
end

def uncommited_changes?

def uncommited_changes?
  !`git status --porcelain`.empty?
end