带有Rugged的彩色差异?

时间:2015-07-30 21:47:39

标签: git libgit2 rugged

我正在尝试着色补丁的输出。设置color.diff配置(通过我的.gitconfig)似乎没有这样做。

repo = Rugged::Repository.new('/some/path')
repo.config = Rugged::Config.new("#{ENV['HOME']}/.gitconfig")
log.info repo.config['color.diff']
  

INFO color.diff:总是

我正在执行以下操作以显示未分级的更改:

repo.index.diff.each do |patch|
  puts patch
end

我可以获得更漂亮的彩色差异吗?

2 个答案:

答案 0 :(得分:2)

以下是我使用colorize gem:

的方法
def diff 
  diff = @repo.index
    .diff
    .each_patch
    .to_a

  diff.each do |patch|
    patch.to_s.split("\n").each do |line|
      puts colorize_diff(line)
    end
  end
end

def colorize_diff(line)
  color =
    case line[0, 1]
    when "+"
      :green
    when "-"
      :red
    when "@"
      :cyan
    end
  color ? line.send(color) : line
end

答案 1 :(得分:1)

color.diff是git面向用户工具的一个选项,可以在终端上添加颜色。坚固/ libgit2没有等价物,因为它们不处理用户界面或打印到终端而是生成数据。

如何在终端(或其他设备)上生成颜色是它自己的复杂问题,需要自己的库和常见问题的解决方法,它完全不在坚固/ libgit2的范围之内。

我建议在https://rubygems.org查找一个知道如何处理您感兴趣的终端的宝石。