module GitCrecord::Git

Public Class Methods

_stage(diff, reverse = false) click to toggle source
# File lib/git_crecord/git.rb, line 33
def self._stage(diff, reverse = false)
  cmd = "git apply --cached --unidiff-zero #{reverse ? '-R' : ''} - "
  content, status = Open3.capture2e(cmd, stdin_data: diff)
  LOGGER.info(cmd)
  LOGGER.info(diff)
  LOGGER.info(diff.lines.size)
  LOGGER.info('stdout/stderr:')
  LOGGER.info(content)
  LOGGER.info("return code: #{status}")
  status.success?
end
add_file(file) click to toggle source
# File lib/git_crecord/git.rb, line 45
def self.add_file(file)
  system("git add -N #{file.filename_a}")
end
add_file_full(file) click to toggle source
# File lib/git_crecord/git.rb, line 49
def self.add_file_full(file)
  system("git add #{file.filename_a}")
end
branch() click to toggle source
# File lib/git_crecord/git.rb, line 75
def self.branch
  `git rev-parse --abbrev-ref HEAD`.chomp
end
commit() click to toggle source
# File lib/git_crecord/git.rb, line 61
def self.commit
  exec('git commit')
end
diff(filename: nil, staged: false) click to toggle source
# File lib/git_crecord/git.rb, line 65
def self.diff(filename: nil, staged: false)
  filename = "'#{filename}'" if filename
  staged_option = staged ? '--staged' : ''
  `git diff --no-ext-diff --no-color -D #{staged_option} #{filename}`
end
reset_file(file) click to toggle source
# File lib/git_crecord/git.rb, line 53
def self.reset_file(file)
  system("git reset -q #{file.filename_a}")
end
stage(file) click to toggle source
# File lib/git_crecord/git.rb, line 21
def self.stage(file)
  _stage(file.generate_diff, false)
end
stage_files(files, reverse = false) click to toggle source
# File lib/git_crecord/git.rb, line 8
def self.stage_files(files, reverse = false)
  method_name = reverse ? :unstage_steps : :stage_steps
  success = true
  files.each do |file|
    next unless file.selected

    file.send(method_name).each do |step|
      success &&= send(step, file)
    end
  end
  success
end
status() click to toggle source
# File lib/git_crecord/git.rb, line 57
def self.status
  `git status --porcelain --untracked-files=all`
end
tab() click to toggle source
# File lib/git_crecord/git.rb, line 79
def self.tab
  @tab ||= ' ' * [2, `git config crecord.tabwidth`.to_i].max
end
toplevel_dir() click to toggle source
# File lib/git_crecord/git.rb, line 71
def self.toplevel_dir
  `git rev-parse --show-toplevel`.chomp
end
unstage(file) click to toggle source
# File lib/git_crecord/git.rb, line 25
def self.unstage(file)
  success = _stage(file.generate_diff, true)
  return false unless success
  return true unless file.type == :new && file.selected == true

  reset_file(file)
end