﻿# Оповещение команд разработчиков \(утилита blame\-notifier\)

Утилита blame\-notifier предназначена для автоматизации процесса оповещения разработчиков, заложивших в репозиторий код, на который анализатор PVS\-Studio выдал предупреждения\. Отчет анализатора подается на вход blame\-notifier с указанием дополнительных параметров; утилита находит файлы, в которых были обнаружены предупреждения и формирует HTML\-отчет на каждого "виновного" разработчика\. Также возможен вариант рассылки полного отчета: внутри него будут содержаться все предупреждения, относящиеся к каждому "виновному" разработчику\.


> Утилита blame\\\-notifier доступна только при наличии \[Enterprise лицензии\]\(https://pvs\-studio\.ru/ru/order/license/\)\\\. Вы можете запросить пробную Enterprise лицензию \[здесь\]\(https://pvs\-studio\.ru/ru/pvs\-studio/try\-free/\#trial\_form\)\\\.

**Примечание**\. Название утилиты различается под разными платформами\. Под Windows она имеет название BlameNotifier\.exe, под Linux и macOS \- blame\-notifier\. Если речь не идёт про утилиту под конкретную ОС, во избежание дублирования в данном документе используется название blame\-notifier\.

Для работы утилиты blame\-notifier под Linux и macOS требуется [\.NET Runtime 8\.0](https://dotnet.microsoft.com/en-us/download/dotnet/8.0)\.

## Смотри, а не читай \(YouTube\)

<https://www.youtube.com/watch?v=chLlsHFV9Bc&list=PLmGioT8z4uoZsce6HQTIDFar_2hdbqPD7>

## Установка

### На Windows

Утилиту BlameNotifier можно найти в установочной директории PVS\-Studio \(по умолчанию это путь "C:\\Program Files \(x86\)\\PVS\-Studio\\"\)\.

### На Linux

#### Установка из репозиториев

Для debian\-based систем:

```cpp
wget -q -O - https://files.pvs-studio.com/etc/pubkey.txt | \
  sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list \
  https://files.pvs-studio.com/etc/viva64.list
sudo apt-get update
sudo apt-get install blame-notifier
```

Для yum\-based систем:

```cpp
wget -O /etc/yum.repos.d/viva64.repo \
  https://files.pvs-studio.com/etc/viva64.repo
yum update
yum install blame-notifier
```

Для zypper\-based систем:

```cpp
wget -q -O /tmp/viva64.key https://files.pvs-studio.com/etc/pubkey.txt
sudo rpm --import /tmp/viva64.key
sudo zypper ar -f https://files.pvs-studio.com/rpm viva64
sudo zypper update
sudo zypper install blame-notifier
```

[Прямые ссылки](https://pvs-studio.ru/ru/pvs-studio/download-all/) для загрузки\.

### На macOS

#### Установка из Homebrew

Установка:

```cpp
brew install viva64/pvs-studio/blame-notifier
```

Обновление:

```cpp
brew upgrade blame-notifier
```

[Прямые ссылки](https://pvs-studio.ru/ru/pvs-studio/download-all/) для загрузки\.

## Использование

Флаг "\-\-help" выводит основную информацию об утилите:

```cpp
blame-notifier --help
```

Пример использования утилиты blame\-notifier \(одной строкой\):

```cpp
blame-notifier path/to/PVS-Studio.log 
--VCS Git 
--recipientsList recipients.txt 
--server ... --sender ... --login ... --password ...
```

### Параметры утилиты

Ниже приводится краткое описание параметров утилиты:

* \-\-VCS \(или \-v\): **обязательный параметр**: тип системы контроля версий, с которой будет работать утилита\. Поддерживаемые системы: Git, Svn, Mercurial, Perforce\.
* \-\-recipientsList \(или \-r\): путь до текстового файла, содержащего список получателей отчетов\. Формат файла описывается ниже\.
* \-\-srcRoot \(или \-t\): задаёт замену для специального "SourceTreeRoot" маркера\. Если лог анализатора был сгенерирован с этим маркером, данный параметр необходим для восстановления путей до файлов\.
* \-\-analyzer \(или \-a\): производит фильтрацию предупреждений согласно маске\. Более подробно маски фильтрации описываются ниже\.
* \-\-excludedCodes \(или \-e\): задает список предупреждений \(через ","\), которые не следует включать в результирующий отчет\.
* \-\-settings \(или \-c\): задает путь к файлу настроек PVS\-Studio\. Данный флаг актуален только при работе под Windows\. BlameNotifier прочитает настройки отключенных предупреждений из переданного файла настроек\. По сути, этот параметр расширяет список отключаемых предупреждений параметра "\-\-excludedCodes"\.
* \-\-server \(или \-x\): **обязательный параметр**: SMTP\-сервер для отправки отчетов\.
* \-\-sender \(или \-s\): **обязательный параметр**: email адрес отправителя писем\.
* \-\-login \(или \-l\): **обязательный параметр**: имя пользователя для авторизации\.
* \-\-password \(или \-w\): пароль пользователя для авторизации\.
* \-\-port \(или \-p\): номер порта для отправления писем\. По умолчанию указан порт N25\.
* \-\-days \(или \-d\): показывать предупреждения анализатора за последние N дней, где N положительное значение\. Если значение не задано или равно 0, то будут показаны все предупреждения за весь период времени\.
* \-\-sortByDate \(или \-S\): сортировать отчет анализатора по дате изменения исходного кода, из\-за которого было выдано предупреждение анализатора\. По умолчанию выключено\.
* \-\-maxTasks \(или \-m\): максимальное число параллельно запущенных blame\-процессов\. По умолчанию, или если задано отрицательное число, blame\-notifier будет использовать 2 \* N процессов \(где N \- число ядер процессора\)\.
* \-\-progress \(или \-g\): включить или отключить логирование\. По умолчанию логирование выключено\.
* \-\-enableSSL: включить использование протокола SSL\. По умолчанию выключено\.
* \-\-vcsBasedRecipientsList: использовать данные из СКВ для составления списка получателей отчётов\. Поддерживаемые СКВ: Perforce\. По умолчанию опция выключена\.
* \-\-messageSubject: тема письма\. Если параметр не указан, blame\-notifier отправит письмо с темой по умолчанию: "Full PVS\-Studio Analysis Results for Solution: <SolutionName\>"
* \-\-messageAttachment: список путей до файлов, которые должны быть прикреплены к письму\. Если необходимо прикрепить несколько файлов, следует разделить их символом ';' и обрамить весь список в кавычки\.
* \-\-svnUsername: имя пользователя для авторизации в SVN\.
* \-\-svnPassword: пароль для авторизации в SVN

При использовании утилиты должен быть указан как минимум один из флагов, через который задаётся список получателей отчётов: '\-\-recipientsList' или '\-\-vcsBasedRecipientsList'\. При необходимости эти флаги могут использоваться совместно\.

### Формат файла получателей отчёта

Формат файла со списком получателей отчётов:

```cpp
# Получатели полного отчёта
username_1 *email_1
...
username_N *email_N
# Получатели собственных ошибок
username_1 email_1
...
username_N email_N
```

Закомментировать строку можно символом "\#"\. Для получателей полных отчетов необходимо добавить символ "\*" в начале или в конце email адреса\. Полный отчет будет включать все предупреждения, отсортированные по разработчикам\.

### Формат масок фильтрации

Маски фильтрации имеют следующим вид: MessageType:MessageLevels\. 

MessageType может принимать одно из следующих значений: GA, OP, 64, CS, MISRA, Fail\. 

MessageLevels может принимать значение от 1 до 3\.

Возможна комбинация разных масок через ";" \(без пробелов\), например: 

```cpp
--analyzer=GA:1,2;64:1
```

В таком случае будут обработаны предупреждения общего назначения \(GA\) уровней 1 и 2 и 64\-битные предупреждения \(64\) уровня 1\.