1. Вступ

Цей документ містить інформацію для розробників про інфраструктуру LinuxCNC та описує найкращі практики щодо внесення оновлень коду та документації до проєкту LinuxCNC.

У цьому документі термін «джерело» означає як вихідний код програм і бібліотек, так і вихідний текст документації.

2. Спілкування між розробниками LinuxCNC

Два основні способи спілкування розробників проектів один з одним:

3. Проєкт LinuxCNC Source Forge

Ми використовуємо Source Forge для списки розсилки.

4. Система контролю версій Git

Весь вихідний код LinuxCNC зберігається в система контролю версій Git.

4.1. Офіційний Git-репозиторій LinuxCNC

Офіційний git-репозиторій LinuxCNC знаходиться за адресою https://github.com/linuxcnc/linuxcnc/

Будь-хто може отримати копію вихідного коду LinuxCNC лише для читання через git:

git clone https://github.com/linuxcnc/linuxcnc linuxcnc-dev'

Якщо ви розробник із доступом до push-розсилок, дотримуйтесь інструкцій github щодо налаштування репозиторію, з якого ви можете надсилати дані.

Зверніть увагу, що команда clone розміщує локальне сховище LinuxCNC у каталозі з назвою linuxcnc-dev, а не у стандартному каталозі linuxcnc. Це пов’язано з тим, що програмне забезпечення LinuxCNC за замовчуванням очікує, що конфігурації та програми G-коду будуть розміщені у каталозі з назвою $HOME/linuxcnc, і наявність там також сховища git може викликати плутанину.

Проблеми та запити на впровадження (скорочені PR) вітаються на GitHub: . https://github.com/LinuxCNC/linuxcnc/issues . https://github.com/LinuxCNC/linuxcnc/pulls

4.2. Використання Git у проєкті LinuxCNC

Ми використовуємо робочі процеси git "злиття вгору" та "тематичні гілки", описані тут:

У нас є гілка розробки під назвою master, та одна або декілька стабільних гілок з назвами типу 2.6 та 2.7, що вказують на номер версії релізів, які ми з неї створюємо.

Виправлення помилок вносяться в найстарішу відповідну стабільну гілку, яка потім об’єднується з наступною новою стабільною гілкою і так далі аж до master. Автор виправлення помилки може самостійно виконати об’єднання або доручити це іншому користувачеві.

Нові функції зазвичай додаються до гілки «master», але деякі типи функцій (зокрема, добре ізольовані драйвери пристроїв та документація) можуть (на розсуд менеджерів стабільної гілки) додаватися до стабільної гілки та об’єднуватися так само, як і виправлення помилок.

4.3. навчальні посібники з git

В інтернеті є багато чудових безкоштовних навчальних посібників з git.

Перше місце, куди варто звернутися, — це, мабуть, сторінка довідки «gittutorial». Цю сторінку довідки можна відкрити, виконавши команду «man gittutorial» у терміналі (якщо у вас встановлені сторінки довідки git). Gittutorial та супутня документація також доступні в Інтернеті за адресою:

Для більш детальної документації git дивіться книгу "Pro Git": https://git-scm.com/book

Ще один рекомендований онлайн-посібник – «Git для ледачих»: https://wiki.spheredev.org/index.php/Git_for_the_lazy

5. Огляд процесу

Загальний огляд того, як вносити зміни до вихідного коду, виглядає так:

  • Зв’яжіться з розробниками проєкту та повідомте нам, що ви хакуєте. Поясніть, що ви робите та чому.

  • Клонуйте репозиторій git.

  • Внесіть зміни у місцевому відділенні.

  • Додавання документації та writing tests є важливою частиною додавання нової функції. Інакше інші не знатимуть, як користуватися вашою функцією, а якщо інші зміни порушать її роботу, це може залишитися непоміченим без тестування.

  • Поділіться своїми змінами з іншими розробниками проекту одним із таких способів:

    • Надішліть свою гілку на github та створіть пул-реквест на github за адресою https://github.com/linuxcnc/linuxcnc (для цього потрібен обліковий запис github), або

    • Розмістіть свою гілку на публічно видимому git-репозиторії (наприклад, github, на вашому власному публічно доступному сервері тощо) та поділіться цим розташуванням у списку розсилки emc-developers, або

    • Надсилайте ваші коміти електронною поштою до списку розсилки LinuxCNC-developers (<emc-developers@lists.sourceforge.net>) (використовуйте git format-patch для створення патчів).

  • Захисник вашого патчу:

    • Поясніть, яку проблему він вирішує та чому його слід включити до LinuxCNC.

    • Будьте відкриті до запитань та відгуків від спільноти розробників.

    • Нерідко трапляється, що патч проходить кілька редакцій, перш ніж його приймають.

6. конфігурація git

Щоб бути включеними до вихідного коду LinuxCNC, коміти повинні мати правильні поля Author, що ідентифікують автора коміту. Хороший спосіб забезпечити це — встановити глобальну конфігурацію git:

git config --global user.name "Ваше повне ім'я"
git config --global user.email "you@example.com"

Використовуйте своє справжнє ім’я (не псевдонім) та адресу електронної пошти без розкриття інформації.

7. Ефективне використання git

7.1. Зміст комітів

Зробіть ваші коміти невеликими та лаконічними. Кожен коміт має виконувати одну логічну зміну в репозиторії.

7.2. Пишіть гарні повідомлення про коміти

Тримайте повідомлення комітів завширшки приблизно 72 стовпці (щоб у вікні терміналу розміру за замовчуванням вони не переносилися при відображенні git log).

Використовуйте перший рядок як короткий виклад наміру зміни (майже як тему електронного листа). Після нього додайте порожній рядок, а потім довше повідомлення з поясненням зміни. Приклад:

7.3. Перейдіть до відповідної гілки

Виправлення помилок слід розміщувати в найстарішій відповідній гілці. Нові функції слід розміщувати в гілці master. Якщо ви не впевнені, де знаходиться зміна, запитайте в irc або у списку розсилки.

7.4. Використовуйте кілька комітів для впорядкування змін

За необхідності, організуйте свої зміни у гілку (серію комітів), де кожен коміт є логічним кроком до вашої кінцевої мети. Наприклад, спочатку винесіть частину складного коду в нову функцію. Потім, у другому коміті, виправте базову помилку. Далі, у третьому коміті, додайте нову функцію, яка стала простішою завдяки рефакторингу і яка не працювала б без виправлення цієї помилки.

Це корисно для рецензентів, оскільки легше побачити, що крок «винести код у нову функцію» був правильним, коли немає інших редагувань; легше побачити, що помилка виправлена, коли зміна, яка її виправляє, відокремлена від нової функції; і так далі.

7.5. Дотримуйтесь стилю навколишнього коду

Намагайтеся дотримуватися стилю відступів, що переважає в навколишньому коді. Зокрема, зміни в пробілах ускладнюють іншим розробникам відстеження змін з часом. Якщо необхідно переформатувати код, робіть це окремим комітом, незалежним від будь-яких семантичних змін.

7.6. Позбудьтеся RTAPI_SUCCESS, використовуйте замість нього 0

Тест "retval < 0" має бути знайомим; це такий самий тип тесту, який використовується в просторі користувача (повертає -1 у разі помилки) та в просторі ядра (повертає -ERRNO у разі помилки).

7.7. Спростіть складну історію, перш ніж ділитися нею з іншими розробниками

За допомогою git можна записувати кожне редагування та помилковий старт як окремий коміт. Це дуже зручно для створення контрольних точок під час розробки, але часто ви не хочете ділитися цими помилковими стартами з іншими.

Git пропонує два основні способи очищення історії, обидва з яких можна зробити безкоштовно, перш ніж поділитися змінами:

git commit --amend дозволяє внести додаткові зміни до останнього коміту, а також, за бажанням, змінити повідомлення про коміт. Використовуйте цю команду, якщо ви відразу зрозуміли, що щось пропустили в коміті, або якщо ви зробили помилку в повідомленні про коміт.

git rebase --interactive upstream-branch дозволяє повернутися до кожного коміту, зробленого з моменту відгалуження вашої гілки функцій від гілки upstream, з можливістю редагування комітів, видалення комітів або об’єднання (squashing) комітів з іншими. Rebase також можна використовувати для розділення окремих комітів на кілька нових комітів.

7.8. Переконайтеся, що кожен коміт збирається

Якщо ваші зміни складаються з декількох патчів, можна використати git rebase -i, щоб перевпорядкувати ці патчі в послідовність комітів, яка чіткіше відображає етапи вашої роботи. Потенційним наслідком перевпорядкування патчів може бути неправильне визначення залежностей — наприклад, введення змінної, а оголошення цієї змінної з’являється лише в наступному патчі.

Хоча гілка HEAD буде компілюватися, не кожна коміт може компілюватися в такому випадку. Це порушує роботу git bisect — інструменту, який хтось інший може використовувати пізніше для пошуку коміту, що спричинив появу помилки. Тому, крім того, що ви повинні переконатися, що ваша гілка компілюється, важливо також переконатися, що кожна окрема коміт також компілюється.

Існує автоматичний спосіб перевірки гілки на можливість побудови кожного коміту — див. https://dustin.sallings.org/2010/03/28/git-test-sequence.html та код за адресою https://github.com/dustin/bindir/blob/master/git-test-sequence. Використовуйте наступним чином (у цьому випадку тестується кожна коміт від origin/master до HEAD, включаючи виконання регресійних тестів):

cd linuxcnc-dev
git-test-sequence origin/master..  '(cd src && make && ../scripts/runtests)'

Це або повідомить «Все гаразд», або «Зламано <commit>»

7.9. Перейменування файлів

Будь ласка, використовуйте можливість перейменувати файли дуже обережно. Як і виконання втягування в окремих файлах, перейменування ускладнює відстеження змін з часом. Як мінімум, ви повинні досягти консенсусу в irc або списку розсилки, що перейменування є поліпшенням.

7.10. Віддати перевагу "rebase"

Використовуйте git pull --rebase замість простої git pull для збереження гарної лінійної історії. Коли ви переосновуєте свою роботу, ви завжди зберігаєте її як ревізії, які пропереду origin/master, тому можете робити такі речі, як git-patch їх поділитися з іншими без натиску до центрального сховища.

8. Переклади

Проект LinuxCNC використовує gettext для перекладу програмного забезпечення на багато мов. Ми раді будь-якій допомозі та внеску в цій сфері! Покращувати та розширювати переклади дуже просто: для цього не потрібно знати програмування, а також не потрібно встановлювати спеціальні програми для перекладу чи інше програмне забезпечення.

Найпростіший спосіб допомогти з перекладами – це скористатися Weblate, веб-сервісом з відкритим кодом. Наш проєкт перекладу знаходиться тут:

Документація щодо використання Weblate знаходиться тут: https://docs.weblate.org/en/latest/user/basic.html

9. Інші способи зробити внесок

Існує багато способів зробити внесок у LinuxCNC, які не розглядаються в цьому документі. Ці способи включають:

  • Відповідь на запитання на форумі, у списках розсилки та в IRC

  • Повідомлення про помилки в системі відстеження помилок, на форумі, у списках розсилки або в IRC

  • Допомога в тестуванні експериментальних функцій