Наверное, каждый из вас слышал о SOLID, KISS, DRY, DI, HWDP и других популярных наборах хороших практик программирования.

Но позволю себе предположить, что никто не знает принципов CHAD, касающихся хороших практик работы с системами контроля версий и рецензирования кода.

Ну что же, приступим!

C – Clear History

История должна быть чистой, как твоя комната после прочтения книги Джордана Питерсона (с). Ну или как хорошая водка! Каждый коммит должен иметь смысл, никаких "quick fix" или "small refactoring". И никаких говнобранчей пятилетней давности в репо.

H - Hermetic PR

Каждый создаваемый пулл-реквест должен содержать в себе конкретное изменение функциональности или обособленную часть крупных изменений. А если, по каким-то причинам, это невозможно, то хотя бы включи голову и придумай нормальный заголовок вместо "Add new table + add migration + add some test + fix some issues + use new table in code".

A - Alternative Review

Сделать ревью кода не означает проверить, что тесты светятся зелёным, и запустить код локально и подтвердить "У меня работает". Недостаточно даже пробежаться по списку - SOLID, KISS, MPK, MPO, PDK. Подумай - нельзя ли реализовать фичу лучше, чем автор пулл-реквеста. Если возможно - предложи реализацию автору, обсудите вместе возможные решения.

D - Detailed Comment

Уточнённый принцип C. Пиши нормальные описания коммитов (commit-messages). Знаю, что ты пошёл в программисты, потому что ненавидел писать сочинения в школе, но раз уж зарабатываешь 100500к/наносек и умеешь печатать разные смешные символы на клавиатуре, то было бы неплохо уметь описать словами то, что понаписывал в коде. А не всякую хрень, в стиле "use new method", "fix bug", "modify interface" и т.д.

Комментарии (7)


  1. BASic_37
    14.12.2022 14:50

    Вы сами переходили по своей ссылке HWDP??? Вы ничего не перепутали?


    1. tommyangelo27 Автор
      14.12.2022 14:53

      Если что, данная статья — перевод, и аббревиатура — ирония от автора оригинальной статьи ;-)


      1. BASic_37
        14.12.2022 15:02

        Теперь понятно, только вряд ли будет понятна здесь (для не поляков). Есть предложение пометить это как-то, типа "(местный польский юмор)".


        1. tommyangelo27 Автор
          14.12.2022 15:16

          Возможно, ACAB был бы более понятен для русскоязычного читателя (всяко понятнее чем ауешные аналоги, вроде СЛОН или ЛОРД), но я позволю себе оставить как есть.
          В оригинале ссылки нет вообще, предполагается, что читатель и так в курсе, что означает HWDP. Мне кажется, что русскоязычная Википедия неплохо вводит в контекст в данном случае.


  1. UMenyaNeudobnieVoprosiki
    14.12.2022 14:52
    +2

    .git/hooks/commit-msg

    message="$(sed -n 1p "$1" | sed -E 's/^[[:space:]]+//;s/[[:space:]]+$//')"
    
    # prevent non informative commit descriptions (too short)
    if (( $(echo "$message" | wc -m) < 7 )) ; then
        echo Commit title too short. Please describe properly! >&2
        exit 1
    fi
    
    shopt -s nocasematch
    # prevent non informative commit descriptions (has no sense)
    for x in \
        "Bug fix" \
    	"Bug fixes" \
    	"Bug fixing" \
    	"bugfixing" \
    	"bugs" \
    	"Bugs fix" \
    	"Code fix" \
    	"Comment" \
    	"Commit" \
    	"Customer support" \
    	"Dirty hotfix" \
    	"Fix" \
    	"Fixes" \
    	"Fixing" \
    	"hf" \
    	"Hot fix" \
    	"hot fixes" \
    	"hotfix" \
    	"Merge" \
    	"sf" \
    	"Small changes" \
    	"Small fix" \
    	"[fixes]" \
    	"[fix]" \
    	"[merge]"; 
    do
    	if [[ $x = "$message" ]]; then
    		echo Commit title non informative. Please describe properly! >&2
    		exit 1
    	fi
    done

    и в pre-commit можно ещё бить по рукам за коммит в мастер или именование ветки не надлежащим образом


    1. buratino
      14.12.2022 20:52
      +3

      пиши "фихск баг" на UTF8 или в КОИ8... делов-то


  1. MentalBlood
    14.12.2022 15:29
    +2

    Знаю, что ты пошёл в программисты, потому что ненавидел писать сочинения в школе

    Ерунда какая-то, и там и там язык же, и там и там надо писать чтобы легко читалось, даже если описываешь сложные вещи. И там и там надо перекладывать мысли в текст


    P.S. Просто я программист несмотря на то что любил писать сочинения в школе (и отлично получалось)