цветные дифференциалы с 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

Могу ли я получить более красивый раскрашенный diff?


person Nathan Meyer    schedule 30.07.2015    source источник


Ответы (2)


Вот как я это сделал с помощью гема colorize:

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
person Nathan Meyer    schedule 06.08.2015

color.diff — это опция пользовательского инструмента git для добавления цветов на терминал. Для Rugged/libgit2 нет эквивалента, так как они не обрабатывают пользовательский интерфейс и не выводят данные на терминал, а вместо этого производят данные.

Как генерировать цвет на терминале (или другом устройстве) - это отдельная сложная проблема, требующая собственных библиотек и обходных путей для общих проблем, и она полностью выходит за рамки Rugged/libgit2.

Я бы порекомендовал поискать на https://rubygems.org гем, который знает, как обращаться с интересующими вас терминалами. .

person Carlos Martín Nieto    schedule 01.08.2015