class Rubycritic::SourceControlSystem::Git

def self.supported?

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

def self.to_s

def self.to_s
  "Git"
end

def date_of_last_commit(path)

def date_of_last_commit(path)
  `git log -1 --date=iso --format=%ad #{path.shellescape}`.chomp!
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(path)

def revisions_count(path)
  `git log --follow --format=oneline #{path.shellescape}`.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