SVN: добавить цвета в командной строке svn с помощью awk (в bash) - PullRequest
7 голосов
/ 09 января 2012

РЕДАКТИРОВАНИЕ: Вот обновленная версия Github этого фрагмента, стабильная.


Вот часть кода Bash (я поместил его в .bashrc файл), который работает :

function svn {
  command svn "$@" | awk '
  BEGIN {
    cpt_c=0;
  }
  {
    if        ($1=="C") {
      cpt_c=cpt_c+1;
      print "\033[31m" $0 "\033[00m";  # Conflicts are displayed in red
    }
    else if   ($1=="A") {
      print "\033[32m" $0 "\033[00m";  # Add in green
    }
    else if   ($1=="?") {
      print "\033[36m" $0 "\033[00m";  # New in cyan
    }
    else if   ($1=="D") {
      print "\033[35m" $0 "\033[00m";  # Delete in magenta
    }
    else                {
      print $0;                        # No color, just print the line
    }
  }
  END {
    print cpt_c, " conflicts are found.";
  }';
}

Эта часть кода делает именно то, что я хочу. Функции SVN (статус, обновления и т. д.) печатаются с цветами. Для внутренних нужд я не хочу устанавливать такие вещи, как colorsvn или svn-color .

Вот пример кода выше: (не имеет достаточной репутации для публикации изображений)

svn command displayed in colors

И снова, , это именно то, что я хочу . Проблема возникает, когда обнаружен конфликт (например, когда я делаю обновление): действительно, когда файл конфликтует, svn передается пользователю, чтобы он мог напечатать несколько букв (см. Ниже)

# svn update
Conflict discovered in 'test.txt'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options:

Есть ли способ awk, чтобы позволить пользователю что-то набрать (, например, e, открыв в VIm конфликтующий файл ), сделать что-то (, например, удалить несколько строк после типа e, затем сохраните & quit ) и введите другую букву для подтверждения разрешения конфликта, затем, наконец, отобразите следующий шаг обновления svn (другие файлы и т. д.)?

Другими словами, я хочу «приостановить» сценарий, который отображает цвета, чтобы позволить пользователю взаимодействовать с svn, а затем продолжить обновление svn. Я думаю, что в будущем будет очень полезно узнать, как можно позволить awk приостановить выполнение сценария вызова, а затем возобновить!

Ответы [ 3 ]

3 голосов
/ 01 февраля 2013

Вы пытались запустить svn update --accept postpone, чтобы svn не вызывал конфликты?

2 голосов
/ 10 февраля 2012

Хотя я не особо отвечаю на ваш вопрос - я создал слегка измененную версию вашего скрипта, в которой я пропускаю awk при запуске svn commit. Кроме того, я добавил больше цветов для определенных типов вывода. Сценарий доступен онлайн - не стесняйтесь вносить изменения.

0 голосов
/ 21 января 2012

Вот простой и безопасный обходной путь (проверено вашим сценарием).Поскольку svn просто вызывает

system(getenv("SVN_EDITOR")) // or something similar

, вы просто можете сделать следующее (в bash, настроить для других оболочек):

export SVN_EDITOR="</dev/tty >&/dev/tty vi"

После этого вы сможете вносить изменения и сохранятьВаша схема раскраски из awk.

Я не знаю, работает ли она с другими редакторами, но я надеюсь, что это так.Следует учитывать, что это стандартные перенаправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...