2015-07-30 12 views
1

Я пытаюсь раскрасить вывод патча. Настройка конфигурации 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: всегда

И я делаю следующее, чтобы показать unstaged изменения:

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

Могу ли я получить симпатичнее раскрашенный диф?

ответ

0

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

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

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

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