Git Code Review - инструмент для рецензирования кода

11.01.24

Разработка - Групповая разработка (Git, хранилище)

Git Code Review - инструмент, позволяющий быстро анализировать изменения из git-репозитория прямо в 1С

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Git Code Review (расширение)
.cfe 1,54Mb ver:20240111
38
38 Скачать (1 SM) Купить за 1 850 руб.
Git Code Review (обработка)
.epf 1,54Mb ver:20240111
50
50 Скачать (1 SM) Купить за 1 850 руб.

Всё еще не выгружаете конфигурацию в git? Самое время начать!

Code Review тема в комьюнити 1С довольно популярная. На конференциях и в публикациях на Инфостарте можно услышать и почитать, что процесс этот очень даже желательный, если вы хотите выдавать качественный продукт.

К сожалению, инструментов для удобного рецензирования кода не так много.

Большинство команд используют возможности облачных платформ для хостинга кода, например, Github или GitLab. Платформы классные, я бы даже сказал, незаменимые. Правда, проверять новый код в них немного непривычно. Кроме того, в зависимости от настроек CI, код может попадать на проверку не сразу. В этом нет ничего плохого, скорее даже наоборот.

Однажды, смотря на очередной Merge Request в GitLab, мне пришла в голову идея сделать свой велосипед инструмент для проверки вносимых изменений, который бы позволил в более или менее привычном виде анализировать различия в коде.

Как всегда, любая конструктивная критика и предложения по доработке горячо приветствуются!

Как это работает?

Обработка под капотом запускает различные команды git в каталоге репозитория с конфигурацией 1С и анализирует полученные данные. Отсюда следует, что на клиентской машине как минимум должен быть установлен этот самый git.

Системные требования:

  • Установленный git
  • Операционная система Windows или Linux
  • Платформа не ниже 8.3.14.1565
  • Конфигурация на основе БСП
  • Локальный репозиторий с исходниками конфигурации (не в формате EDT)

Возможности:

Обработка позволяет прочитать список всех версий из локального репозитория (коммиты/commits). Для каждой версии или диапазона версий вывести изменения. В полученные изменения добавить свои замечания и/или замечания bsl-language-server, а затем отправить полученный результат на ознакомление/исправление виновнику изменений.

 

Список изменений

 

Для измененных объектов определяются не только изменения модулей, но и изменения реквизитов, табличных частей, команд, измерений. На данный момент определяются не все изменения. Механизм еще будет дорабатываться, но уже сейчас можно быстро понять, что конкретно изменилось в том или ином объекте метаданных, вместо того, чтобы анализировать глазами изменения в виде xml.

Есть возможность для списка коммитов определять номер версии хранилища, если для выгрузки конфигурации использовался gitsync

 
 Пример получения изменений для диапазона версий (коммитов)

 

Процесс рецензирования или Code Review:

Замечания могут вноситься руками. Для этого используемый в инструменте редактор кода был специально доработан. На практике это выглядит следующим образом:

Добавление замечания

Дополнительно к процессу проверки можно подключить bsl-language-server. Изначально задумывалось получать изменения из SonarQube. Делать это не сложно, но есть один очень важный нюанс. Нужно как-то гарантировать, что код и его анализ в проекте SonarQube соответствует тому, что мы проверяем в данный момент, а сделать это сложно. Если просто брать все замечания из Сонара, то легко можно столкнуться с ситуацией, когда версия кода в нём отличается от текущей и все замечания мягко говоря не актуальны. Именно поэтому выбор был сделан в пользу BSLLS.

 
 Пример использования BSL Language Server

Результаты рецензирования:

Результат проверки можно сохранить в хранилище настроек или файл. При использовании первого варианта достаточно отправить уникальный идентификатор проверки автору изменений. Затем с помощью идентификатор можно будет открыть и посмотреть все замечания. Для использования данного варианта необходимо процедуру Code Review и работу с результатами выполнять в одной базе.

Сам рецензент в любой момент может видеть все проведенные проверки, возвращаться к ним, просматривать или удалять по истечении какого-то срока.

 
 Пример работы с результами Code Review

При использовании расширения появляется возможность делиться навигационной ссылкой, при переходе по которой автор изменений сразу увидит все результаты проверки его кода.

Особенности и известные проблемы:

  • В linux могут наблюдаться некоторые проблемы с отображением замечаний в редакторе кода
  • git не всегда отдает читаемые названия измененных файлов. В обработку встроена проверка и, возможно, придется выполнить одну простую команду в консоли вручную.
  • Формат исходников EDT пока не поддерживается

Планы по развитию:

  • Расширить количество анализируемых изменений в объектах метаданных
  • Добавить интеграцию с paste1c.ru
  • Добавить возможность отвечать на замечания, выявленные в процессе Code Review

Тестировалось в следующих условиях:

  • Windows 10 x64, релизы платформы 8.3.18.1616, 8.3.23.1688
  • Linux Ubuntu 22.04 x64 релиз платформы 8.3.23.1596

Похожие разработки:

 
 История изменений

Проверено на следующих конфигурациях и релизах:

  • 1С:ERP Управление предприятием 2, релизы 2.5.15.69

git code review проверка кода bsl language server консоль кода

См. также

SALE! 50%

1С-программирование DevOps и автоматизация разработки Групповая разработка (Git, хранилище) DevOps для 1С Программист Стажер Платформа 1С v8.3 Платные (руб)

Использования систем контроля версий — стандарт современной разработки. На курсе научимся использованию Хранилища 1С и GIT при разработке на 1С:Предприятие 8. Разберем подходы и приемы коллективной разработки, научимся самостоятельно настраивать системы и ориентироваться в них.

4900 2450 руб.

29.06.2022    11928    99    4    

131

Групповая разработка (Git, хранилище) Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Когда в хранилище одновременно разрабатывают несколько команд, сортировка сделанного и несделанного при формировании релиза и проведение code review по задачам превращаются в непроходимый квест. В таких случаях нужен бранчинг. Расскажем об опыте перехода на новую схему хранения кода для ИТ-департамента.

23.09.2024    2827    kraynev-navi    2    

25

Групповая разработка (Git, хранилище) Программист Бесплатно (free)

Называть Git новой технологией – уже смешно, но для многих 1С-ников это действительно «новое и неизведанное». Расскажем о плюсах и минусах двух главных систем контроля версий в мире 1С: Git и хранилища.

17.09.2024    7235    Golovanoff    69    

26

Групповая разработка (Git, хранилище) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Во многих командах незаслуженно забывают о том, что в базе меняются расширения (как от вендора, так и собственные) и внешние отчеты и обработки. Вплоть до того, что релиз происходит каждый день – меняются печатные формы, отчеты, обработки. Расскажем о том, как выгружать в Git не только изменения конфигурации рабочего контура, но и файлы внешних обработок и расширений.

05.09.2024    2166    ardn    12    

15

EDT Групповая разработка (Git, хранилище) Программист Платформа 1С v8.3 Бесплатно (free)

Заказчики любят EDT+Git за прозрачность и контроль качества. А у разработчиков есть две основные причины не любить EDT – это тормоза и глюки. Расскажем о том, что нужно учесть команде при переходе на EDT+Git.

14.08.2024    7618    lekot    34    

8

Групповая разработка (Git, хранилище) Программист Платформа 1С v8.3 Бесплатно (free)

В «долгоиграющих» проектах стандартный захват объектов 1С в хранилище может привести к длительным простоям других разработчиков. Но и создавать под каждую доработку отдельное хранилище, чтобы использовать технологию разветвленной разработки конфигураций от фирмы «1С» – избыточно. Расскажем о том, как разрабатывать в отдельной базе без ожиданий, а потом с легкостью перенести изменения в хранилище, используя основную идею технологии 1С – конфигурацию на поддержке хранилища.

05.08.2024    4223    sinichenko_alex    16    

25

Групповая разработка (Git, хранилище) Программист Руководитель проекта Стажер Бесплатно (free)

Про изменения и новинки в агрегаторе открытых проектов OpenYellow, которые появились с момента его создания: про портал, Github и Telegram

15.07.2024    3223    bayselonarrend    8    

24
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1563 20.12.23 12:21 Сейчас в теме
ОГОНЬ! Большущее спасибо!
2. artbear 1563 20.12.23 12:33 Сейчас в теме
(0) Опечатка - Процесс резцензирования
3. leobrn 633 20.12.23 12:34 Сейчас в теме
Тоже крутил в этом направлении для конфигурации для ревью https://infostart.ru/profile/350139/, но проект так и не доехал до гитхаба. Дополнительно еще добавлял проверку напрямую через bsl ls. Потом все замечания улетали в Jira.
Прикрепленные файлы:
investec; salexdv; +2 Ответить
5. salexdv 2357 20.12.23 13:14 Сейчас в теме
(3) Было бы классно, если бы получилось доделать. Инструментов много не бывает
15. Tahallus 441 20.12.23 17:40 Сейчас в теме
(3) в итоге какая судьба у "Ревьювер" ? Будет скоро представлен или забили на него ?
Видел только статью с описанием, но самого продукта вроде нет.
16. leobrn 633 21.12.23 07:41 Сейчас в теме
17. Tahallus 441 21.12.23 11:48 Сейчас в теме
(16) не думали выложить в open-sourse как есть? Там глядишь сообщество подхватило бы.
20. leobrn 633 21.12.23 15:50 Сейчас в теме
(17) Думал. Надо уже видимо так и сделать
4. RustIG 1747 20.12.23 12:39 Сейчас в теме
(0) не могу проверить, но, кажется, как всегда "круто". Скачал - поддержал проект.
6. vandalsvq 1587 20.12.23 13:28 Сейчас в теме
Великолепно, здорово, замечательно. Даже не знаю какие еще эпитеты придумать.
И еще, класс что редактор развивается, есть надежда что какие-то наработки перекочуют и в основной репозиторий ))))
7. comptr 35 20.12.23 13:38 Сейчас в теме
По поводу навигационных ссылок.
Во-первых, насколько я понял, обработка должна быть встроена в конфу.
Во-вторых, нужно переопределить обработчики генерации навигационной ссылки в форме обработки, ограничений на вид навигационной ссылки, вроде бы, нет:

&НаКлиенте
Процедура ОбработкаПолученияСпискаНавигационныхСсылок(Элемент, СписокНавигационыхСсылок, КлючПоУмолчанию)
	Элемент.Очистить();
	Элемент.Добавить("ФормаРевью", СтрШаблон(НСтр("ru='Результат ревью %1'"), ГУИД), Ложь); // ГУИД - строковый реквизит формы, для примера.
	КлючПоУмолчанию = "ФормаРевью";	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаПолученияНавигационнойСсылки(Элемент, Ключ, Представление, НавигационнаяСсылка, СтандартнаяОбработка)
	Если Элемент = "ФормаРевью" Тогда
		СтандартнаяОбработка = Ложь;
		НачалоСсылки = "e1cib/app/Обработка.Тест_НавигационнаяСсылка";
		Представление = НачалоСсылки + "?ref=" + ГУИД;
		НавигационнаяСсылка = Представление;
	КонецЕсли;
КонецПроцедуры
Показать


В-третьих, нужно добавить обработку своей навигационной ссылки в модуле приложения:

Процедура ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке, СтандартнаяОбработка)
	
	НачалоВхождения = СтрНайти(ДанныеПереходаПоНавигационнойСсылке.ОтносительнаяНавигационнаяСсылка, "e1cib/app/Обработка.Тест_НавигационнаяСсылка?ref=");
	Если НачалоВхождения > 0 Тогда
		СтандартнаяОбработка = Ложь;
		// В конце строки могут быть управляющие символы (например ETX), которые невозможно передать с клиента на сервер
		ГУИД = Лев(ДанныеПереходаПоНавигационнойСсылке.ПараметрыНавигационнойСсылки.Получить("ref"), 36); 
		ПараметрыОткрытия = Новый Структура("ГУИД", ГУИД);
		ОткрытьФорму("Обработка.Тест_НавигационнаяСсылка.Форма.МояФорма", ПараметрыОткрытия);
	КонецЕсли;
	
КонецПроцедуры
Показать


В-четвертых, в форме обработки нужно обработать полученный параметр в ПриСозданииНаСервере:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если Параметры.Свойство("ГУИД") Тогда
		ГУИД = Параметры.ГУИД;
	КонецЕсли;
КонецПроцедуры


На что влияет Ключ в ОбработкаПолученияНавигационнойСсылки - я уже не помню :)
10. salexdv 2357 20.12.23 13:47 Сейчас в теме
(7) Я пробовал это сделать. На платформе 8.3.23 не получилось. Не исключаю, что просто у меня кривые руки. Спасибо за примеры!
12. comptr 35 20.12.23 13:51 Сейчас в теме
(10) этот пример работает и на 22-й и на 24-й платформе.
Прикрепленные файлы:
НавигационнаяСсылкаВОбработке.cf
8. Serg O. 297 20.12.23 13:39 Сейчас в теме
прикольно, большой +

небольшие замечания...
1) если обработка анализирует локальную папку (синхронизированную с git-репозиторием), то она должна (и будет) работать и при ручных выгрузках в файлы... с последующей (ручной) заливкой в gitHub.

2) кроме gitsynс есть выгрузка внешних отчетов/обработок и последующая раскладка файлов epf / erf в текстовые файлы... с помощью плагина OneScript - Precommit1C ... которые так же будут анализироваться в git
а значит и в этой обработке то же.

и вообще любые файлы txt, csv, md можно анализировать (и тут наверное тоже)...
а файлы Word, Excel, схемы, графики и картинки даже git не умеет анализировать
11. salexdv 2357 20.12.23 13:49 Сейчас в теме
(8) Первый вариант должен работать. Второй вариант, возможно, не взлетит без доработки. Надо попробовать. Спасибо!
Файлы отличные от *.bsl и *.xml анализировать смысла особо не вижу, если только *.mxl еще.
9. comptr 35 20.12.23 13:45 Сейчас в теме
Возможно, стоит сразу делать это не отдельной обработкой, а конфигурацией? Тогда можно хранить результаты ревью в документе, раскидав всю инфу о процессе по реквизитам и табличным частям. Какие-то сложные вещи можно закидывать в реквизиты с типом ХранилищеЗначений.
Ну или хотя бы справочник, для начала.
dmpas; salexdv; +2 Ответить
13. user1636469 20.12.23 14:49 Сейчас в теме
зачем это, если есть EDT
14. smit1c 106 20.12.23 14:55 Сейчас в теме
18. nixel 1433 21.12.23 14:17 Сейчас в теме
@salexdv приходи в чат, все интеграции с бсл лс какие надо настроим) веб-сокеты в релизе, если вдруг бсл лс не реагирует на какое-то действие в diff-режиме - пингуй, подкрутим или придумаем как обойти на стороне обработки.

А так - огонь-огонь!
alei1180; Totoro; salexdv; +3 Ответить
19. salexdv 2357 21.12.23 15:30 Сейчас в теме
(18) Спасибо за классный продукт!
21. salexdv 2357 23.12.23 16:03 Сейчас в теме
Новое:
1. Добавил поставку в виде расширения, где можно делиться результатом в виде навигационных ссылок
2. Добавил вывод замечаний BSL Language Server в виде маркеров и CodeLens
3. Добавил возможность выбора веток
22. iD1n 13 27.12.23 09:56 Сейчас в теме
23. TheRunMan 09.01.24 11:01 Сейчас в теме
Чет не работает

Репозиторий с исходниками есть, открываю его, комиты видит, а справа список объектов пустой и соответственно изменения тоже не отображаются

Upd: Оказывается это работает только если git инициализирован прямо вместе с исходниками, указать например подпапку src/cf нельзя, просто ничего не отображается тогда. Странно конечно. Мне кажется редко можно увидеть, что в гите лежат чисто исходники и больше ничего.
24. salexdv 2357 09.01.24 13:34 Сейчас в теме
(23) Такого быть не должно. По коммитам определяется "корень" конфигурации и от него уже вычисляются все изменения метаданных. Проверю.
25. TheRunMan 10.01.24 04:45 Сейчас в теме
(24) Ну может я чет не так делаю конечно, просто указал папку где лежит .git и все он комиты видит и больше ничего. Указывал и подпапку, тогда там куча ошибок сыпет каких-то и тоже не отображает. Попробовал вот как я выше описал, тогда все ок.
26. salexdv 2357 11.01.24 14:49 Сейчас в теме
(25) Одной из причин такого поведения могло быть изменение каталога хранения исходников конфигурации. Доработал, теперь корень конфигурации определяется иначе и такой проблемы быть не должно.
27. a_n_d_rey 12.09.24 13:13 Сейчас в теме
Спасибо за обработку, пользуемся командой уже более полугода. Супер!!! С нетерпением ждем развития по количеству анализируемых изменений и особенно "Добавить возможность отвечать на замечания, выявленные в процессе Code Review" - этого реально не хватает для общения в рамках задачи ревью. Может есть ориентировочные сроки по реализации фичи ответа на замечания?
Оставьте свое сообщение