Создайте файл журнала из Perforce для использования с Gourse

Я пытаюсь сгенерировать файл журнала производительности с помощью awk, который затем может быть использован с Gource.

Gource позволяет генерировать анимацию истории ревизий файла / проекта.

Я попытался следовать приведенным здесь примерам, но они не будут работать для моего депо (хотя они работают и для Adobe!)

Я также попробовал сценарий на странице здесь, который говорит,

p4 changes //depot/path_to_files/|awk '{print $2}'|p4 -x - describe -s|awk '(/^Change / || /^... /) {if ($1 == "Change") {u=substr($4,1,index($4,"@")-1); t = $(NF-1) " " $NF; gsub("/"," ",t); gsub(":"," ",t);mktime(t);} else {if ($NF=="add") {c="A";} else if ($NF=="delete") {c="D";} else {c="M";};f=substr($2,3,index($2,"#")-3);print time "|" u "|" c "|" f;}}'|sort -n

но я получаю

"awk: строка 0(NR=1): переменная"mktime"не может использоваться как функция"

ошибка.

Если у кого-то есть идея, что происходит не так, я хотел бы услышать от вас!

2 ответа

mktime такое расширение GNU Awk:

Чтобы упростить обработку таких файлов журналов и создавать полезные отчеты, gawk предоставляет следующие функции для работы с метками времени. Они являются расширением Gawk; они не указаны ни в стандарте POSIX, ни в любой другой известной версии awk

https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html

Просто замени awk с gawk если он доступен в вашей системе:

p4 changes //depot/path_to_files/             \
  | awk '{print $2}'                          \
  | p4 -x - describe -s                       \
  | gawk '(/^Change / || /^... /) {           \
      if ($1 == "Change") {                   \
          u=substr($4,1,index($4,"@")-1);     \
          t = $(NF-1) " " $NF;                \
          gsub("/"," ",t);                    \
          gsub(":"," ",t);                    \
          time = mktime(t);                   \
      } else {                                \
          if ($NF=="add") {                   \
            c="A";                            \
          } else if ($NF=="delete") {         \
            c="D";                            \
          } else {                            \
            c="M";                            \
          };                                  \
          f=substr($2, 3, index($2,"#")-3);   \
          print time "|" u "|" c "|" f;       \
      }                                       \
  }'                                          \
  | sort -n

Я написал скрипт Python для преобразования истории Perforce в файл журнала, совместимый с Gource. Он также может получать последние изменения и добавлять их с момента последней синхронизации.

Скрипт Perforce для Gource Python

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