Цветные различия с 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/ драгоценный камень, который знает, как обрабатывать интересующие вас терминалы.

Другие вопросы по тегам