Цветные различия с Rugged?
Я пытаюсь раскрасить вывод патча. Настройка color.diff
config (через мой.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 ответа
Вот как я это сделал с жемчужиной 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
color.diff
является опцией для пользовательского инструмента git для нанесения цветов на терминал. Для rugged/libgit2 нет эквивалента, так как они не обрабатывают пользовательский интерфейс и не печатают в терминал, а вместо этого выдают данные.
Как создать цвет на терминале (или другом устройстве) - это его собственная сложная проблема, которая требует своих собственных библиотек и обходных путей для общих проблем, и она полностью выходит за рамки области действия rugged/libgit2.
Я бы порекомендовал поискать на https://rubygems.org/ драгоценный камень, который знает, как обрабатывать интересующие вас терминалы.