Amazon Best VPN GoSearch

Значок OnWorks

cvs-fast-export - онлайн у хмарі

Запустіть cvs-fast-export у постачальника безкоштовного хостингу OnWorks через Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

Це команда cvs-fast-export, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS.

ПРОГРАМА:

ІМ'Я


cvs-fast-export - швидкий експорт історії з репозиторію CVS або колекції RCS.

СИНТАКСИС


cvs-швидкий експорт [-h] [-C] [-F] [-a] [-w пух] [-g] [-l] [-v] [-q] [-V] [-T] [-p] [-P] [-i
дата] [-к розширення] [-А авторська карта] [-t потоків] [-R revmap] [--репохірург] [-e віддалений]
[-с stripprefix]

ОПИС


cvs-fast-export намагається згрупувати коміти та теги для файлів у колекції файлів RCS або
Репозиторій проекту CVS у набір змін для кожного проекту фіксує загальні метадані в
стиль Subversion і новіших систем керування версіями.

Цей інструмент найкраще використовувати разом з репозитор(1). Звичайний cvs-fast-export
конверсії містять різного роду скам’янілості, які репохірург добре очищає. Подивитися
DVCS Migration HOWTO, щоб дізнатися про необхідні кроки перевірки та полірування
для дійсно якісної конверсії, включаючи еталонний підйом і різні види
очищення артефакту.

Якщо вказано аргументи, програма передбачає, що всі, що закінчуються розширенням ",v", є такими
основні файли і зчитує їх. Якщо аргументи не вказано, програма зчитує імена файлів
зі стандартного входу, по одному на рядок. Каталоги та файли, які не закінчуються на ",v", пропускаються. (Але див
опис -P, як змінити цю поведінку.)

Обробляються файли з Unix CVS або CVS-NT. Якщо колекція файлів має commitid
поля, набори змін будуть створені надійно за допомогою них.

У режимі за замовчуванням, який генерує потік швидкого експорту в стилі git до стандартного виводу:

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

· Файли в каталогах CVS Attic і RCS обробляються як "Attic/" або "RCS/"
частина шляху була відсутня. Зазвичай це відновлює історію файлів, які були
видалено.

· Дозволи на всі файли, пов'язані з певним файлом, будуть контролюватися
дозволи на відповідний майстер. Якщо виконуваний біт на головному пристрої увімкнено,
всі його файли матимуть 100755 дозволів; інакше 100644.

· Набір файлових операцій об'єднується в набір змін, якщо (а) всі вони спільні
один і той же commitid, або (b) усі не мають commitid, але ідентичні коментарі змін, автори,
і дати змін у вікні, визначеному параметром time-fuzz. На відміну від
деякі інші експортери, не робиться жодних спроб отримати набори змін із спільних тегів.

· Коміти видаються в порядку часу, якщо cvs-fast-export не виявляє, що якийсь батьківський
молодша за свою дитину (це малоймовірно, але можливо у випадках важких годин
перекіс). У цьому випадку ви побачите попередження про стандартну помилку та порядок викидів
гарантовано топологічно правильно, але інше не вказано (і підлягає
зміни в майбутніх версіях цієї програми).

· Теги CVS стають полегшеними тегами git, якщо їх можна однозначно асоціювати з a
набір змін. Якщо один і той самий тег додається до дельт файлів, які розв’язуються до кількох
набір змін, повідомляється, ніби прикріплений до останнього з них.

· Гілка HEAD перейменована в майстер.

· Інші назви тегів і гілок очищені, щоб бути легальними для git; символи ~^\*? є
вилучено

· Оскільки файли .cvsignore мають синтаксис, сумісний угору з синтаксисом файлів .gitignore,
вони перейменовані. Щоб змоделювати поведінку CVS за замовчуванням, ігноруйте ті
значення за замовчуванням додаються до root .cvsignore blobs, перейменованих на .gitignore, і кореневого
.gitignore, що містить значення за замовчуванням, генерується, якщо таких крапель не існує.

Дивіться наступний розділ ОБМЕЖЕННЯ RCS/CVS для отримання додаткової інформації про граничні випадки та
проблеми перетворення.

Ця програма не залежить від будь-яких метаданих CVS, які зберігаються за межами особи
файли вмісту (наприклад, під CVSROOT).

Змінна TMPDIR враховується та використовується під час створення тимчасового каталогу, у якому потрібно
зберігати вміст файлу під час обробки.

ВАРІАНТИ


-h
Відобразити підсумок використання.

-w пух
Встановіть коефіцієнт нечіткої позначки часу для ідентифікації наборів патчів у секундах. За замовчуванням є
300 секунд. Цей параметр не має відношення до наборів змін з комітами.

-k
Вкажіть розширення ключового слова RCS/CVS. Ви можете вказати будь-яке розширення ключового слова CVS
типи: "kv" (ключове слово-значення), "kvl" (блокування ключового слова-значення), "k" (лише ключове слово), "v"
(лише значення), "o" (без розширення) або "b" (двійковий - без розширення, без закінчення рядка
перетворення). Правила CVS: (1) якщо у головному ключі у внутрішньому ключовому слові встановлено -kb
поле, зробіть це, інакше (2) якщо в командному рядку встановлено тип розширення, зробіть
що, інакше (3) якщо внутрішнє поле ключового слова файлу встановлено, зробіть це, інакше
використовувати кв. cvs-fast-export поводиться трохи інакше; за замовчуванням є kb, а не
kkv, kvl розглядається як kv, а ko розглядається як kb (тобто немає кінця рядка
нормалізація коли-небудь виконується).

-g
генерувати зображення графа фіксації мовою розмітки DOT, яку використовує graphviz
інструменти, а не швидкий експорт.

-l
Попередження зазвичай переходять до стандартної помилки. Ця опція, яка приймає назву файлу, дозволяє
переспрямувати їх у файл> Зручно за допомогою параметра -p.

-a
Дайте список ідентифікаторів авторів, знайдених у сховищі, замість швидкого експорту.

-C
Примусово встановлювати канонічний порядок (такий же, як і git-fast-export) у випущеному потоці. Краплі є
випускаються якомога пізніше до комітів, які їх потребують. Це зменшує
пропускна здатність приблизно в два рази. Репозиторії, в яких фіксується часовий порядок
несумісний з їх топологічним порядком, призведе до неправильного швидкого експорту
потоки в режимі -C; вони призведуть до збою імпортера Git.

-F
Примусьте швидкий порядок. Спочатку випускаються краплі, а потім фіксуються.

-A авторська карта
Застосуйте файл авторської карти до рядків атрибуції. Кожен рядок повинен мати форму

ferd = Ferd J. Foonly[захищено електронною поштою]> Америка/Чикаго

і буде застосовано до відображення імені користувача Unix ferd на ідентифікатор користувача в стилі DVCS
зазначено після знака рівності. Поле часового поясу (після > і пробілів) є
необов’язковий і (якщо є) використовується для встановлення зміщення часового поясу, яке буде прикріплено до
дата; прийнятні формати для поля часового поясу - це будь-які формати, які можуть бути в TZ
змінна середовища, включаючи зміщення [+-]hhmm. Пробіл навколо знака рівності
роздягається. Рядки, які починаються з # або не містять знаку рівності, відображаються без звуку
ігнорується.

-R revmap
Напишіть карту ревізій до вказаного аргументу імені файлу. Кожен рядок ревізійної карти
складається з трьох полів, розділених пробілами: ім’я файлу, номер версії RCS та
позначка коміта, якому було призначено цю пару ім'я файлу-версія. Не працює
з -g.

-v
Показуйте докладні повідомлення про прогрес, які в основному цікавлять розробників.

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

-T
Примусово детерміновані дати для регресійного тестування. Кожен набір патчів матиме a
монотонно-зростаюча атрибутивна дата, обчислена з її позначки у вихідному потоці -
значення позначки помножене на час фіксації, помножене на два.

--репохірург
Видавати для кожного коміту список пар файлів CVS:ревізії, які створюють його як стиль bzr
зафіксувати властивість під назвою "cvs-revisions". Починаючи з версії 2.12, репозитор(1) може
інтерпретуйте їх і використовуйте як підказки для посилення.

--embed-id
Додайте до кожного коментаря про фіксацію ідентифікацію комітів CVS, які зробили внесок
його.

-V
Видайте версію програми та вийдіть.

-e віддалений
Назви експортованих гілок мають префікс refs/remotes/віддалений замість refs/heads,
щоб імпорт здавалося з названого пульта.

-s stripprefix
Вилучіть вказаний префікс замість найдовшого загального префікса

-t кількість потоків
Виконання багатопоточного режиму збільшує обсяг пам’яті програми пропорційно
кількість потоків, але означає, що перетворення може виконуватися за менший загальний час через введення-виводу
операція, що включає один головний файл, не блокує інтенсивну обробку
інші. За замовчуванням програма консервативно припускає, що вона може використовувати два потоки
доступний процесор. Ви можете використовувати цю опцію для встановлення кількості потоків; значення 0
змушує послідовну обробку без потокової обробки.

-p
Увімкнути звіти про прогрес. Це також скидає статистичні дані (час та розмір
максимальний резидентний набір) для кількох точок під час перетворення.

-P
Зазвичай cvs-fast-export пропускає будь-яке ім'я файлу, представлене як аргумент або на stdin
який не закінчується розширенням RCS/CVS ",v", а також ігноруватиме ім'я шляху
містить рядок CVSROOT (це дозволяє уникнути неприємностей під час запуску з або вище a
каталог CVS верхнього рівня). Суворе читання RCS дозволяє майстрам без ,v
розширення. Цей параметр встановлює безладний режим, вимикаючи обидві перевірки.

-i дата
Увімкнути режим інкрементного дампу. Здійснює лише фіксацію з датою після цієї, зазначеної в
видаються аргументи. Кожна гілка кореня в прирістному відвалі прикрашена
git-stream magic, який, якщо його інтерпретувати в контексті живого репозиторію, буде підключатися
цю гілку до будь-якої філії з такою ж назвою. Очікується, що дата буде RFC3339
відповідний (наприклад, yy-mm-ddThh:mm:ssZ) або ціле число Unix-час у секундах.

Якщо не вказано ні -F, ні -C, cvs-fast-export вибере режим на основі
розмір репозиторію - канонічний порядок для невеликих сховищ, швидкий для великих. Інструменти, які
споживати потоки git-fast-import байдуже; ця поведінка для відсталих
Сумісність.

приклад


Дуже типовий виклик буде виглядати так:

знайти . | cvs-fast-export >stream.fi

Ваш дистрибутив cvs-fast-export також має забезпечувати cvssync(1), інструмент для отримання CVS
майстри з віддаленого репозиторію. Використання їх разом буде виглядати приблизно так:

cvssync [захищено електронною поштою]:/sources/groff groff
знайти грофа | cvs-fast-export >groff.fi

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

Набір cvs-fast-export містить сценарій обгортки під назвою cvsconvert що корисно для
запуск перетворення та автоматична перевірка його вмісту з оригіналом CVS.

RCS/CVS ОБМЕЖЕННЯ


Переклад сховищ RCS/CVS в загальну модель DVCS, виражену потоками імпорту, є
не просто складні та безладні, є дивні випадки RCS/CVS, які не можуть бути коректними
перекладено взагалі. cvs-fast-export спробує попередити вас про ці випадки, а не
мовчки створюють зламані або неповні переклади, але є дракони. Ми рекомендуємо
деякі запобіжні заходи в рамках ПЕРЕВІРКИ РОЗУМНОСТІ.

CVS-NT і версії GNU CVS після 1.12 (2004) додали ідентифікатор набору змін до файлу
метадані. Старі розділи історії CVS без них є вразливими до різних проблем
викликаний перекосом годинника між клієнтами; раніше це було відносно звичайним явищем для кількох
причини, включаючи менш поширене використання синхронізації годинника NTP. cvs-fast-export буде
попереджає вас ("здійснює до цієї дати без commitids"), коли бачить такий розділ у вашому
історії. Коли це відбувається, застосовуються такі застереження:

· Якщо часові позначки комітів у репозиторії CVS були недостатньо стабільними для використання для
упорядкування фіксує, зміни можуть бути повідомлені в неправильному порядку.

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

Ще одна властивість, на яку впливають коміти, - це стабільність старих наборів змін
додатковий демпінг. Згідно з реалізацією CVS, що видає коміти, нові коміти CVS
гарантовано не змінюватиме походження набору змін cvs-fast-export з попередньої історії;
таким чином, оновлення цільового сховища DVCS з додатковими дампами з живого CVS
установка буде працювати. Навіть якщо старі частини історії не мають комітів,
конверсії будуть стабільними. Ця гарантія стабільності втрачається, якщо ви використовуєте версію
CVS, який не видає коміти.

Також зауважте, що репозиторій CVS потрібно повністю повторно проаналізувати навіть для інкрементного
смітники; таким чином, час обробки та вимоги до пам'яті будуть зростати разом із загальним сховищем
розмір, навіть якщо запитуваний інтервал звітності інкрементного дампу невеликий.

Ці проблеми не можна виправити за допомогою cvs-fast-export; вони притаманні CVS.

CVS-FAST-EXPORT ВИМОГИ І ОБМЕЖЕННЯ


Оскільки код розроблений для роботи з великими наборами даних, він був оптимізований для
64-розрядні машини, і не було докладено особливих зусиль, щоб зберегти його 32-розрядну чистою. Різні
лічильники можуть переповнюватися, якщо ви спробуєте використовувати його для підняття великого сховища на 32-розрядній машині.

Відгалуження, що зустрічаються лише в підмножині аналізованих головних елементів, не розв'язані належним чином;
натомість буде створена повністю непересічна історія, яка містить редакції гілок і
всі батьки повертаються до коріння.

Гілки постачальників CVS є джерелом проблем. Досить дивні поєднання імпорту
і локальні модифікації будуть погано перекладатися, створюючи неправильний вміст на master і
в іншому місці.

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

Програма намагається зробити щось корисне у випадках, коли тег зустрічається в наборі
редакції, які не відповідають жодному коміту gitspace. У цьому випадку гілка з тегами
створюється лише один коміт, що гарантує, що ви можете перевірити набір файлів
містить вміст CVS для тегу. Корінь гілки — це фіксація gitspace
де вперше з'являється остання версія CVS у позначеному наборі; це фіксація
тег вказував би, якби його неповноту ігнорували.

Під час багатопотокової роботи існує крайній випадок, у якому поведінка програми є
недетерміновані. Якщо виглядає один і той же тег, його слід призначити двом різним
gitspace здійснює фіксацію з тією ж міткою часу, і тег, на який він насправді потрапляє, буде випадковим.

cvs-fast-export призначений для перекладу з усіма його проміжними структурами
пам'яті за один прохід. Це контрастує з cvs2git(1), який використовує кілька проходів і
журнали проміжних структур на диск. Компроміси полягають у тому, що cvs-fast-export дуже багато
швидше, ніж cvs2git, але не вийде через помилку браку пам’яті у великих сховищах CVS
достатньо, щоб переповнити вашу фізичну пам’ять. На практиці ви навряд чи пересунете цю межу
на машині з 32 ГБ оперативної пам’яті і фактично не з 64 ГБ. Спроби зробити
великі перетворення лише в 32-розрядному (4 ГБ) адресному просторі, з іншого боку, навряд чи
закінчиться добре.

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

У режимі -C програмі також потрібен тимчасовий дисковий простір, еквівалентний сумі
розміри всіх версій у всіх файлах. У режимі -F це не так.

У 2014 році на складі комп’ютерного обладнання, cvs-fast-export досягає швидкості обробки понад 64 тис.
CVS фіксує за хвилину на реальних репозиторіях. Продуктивність часу в першу чергу прив’язана до введення-виведення і
можна покращити, запустивши на SSD.

РОЗУМНІСТЬ ПЕРЕВІРКА


Після перетворення бажано виконати такі кроки перевірки:

1. Якщо ви запустили перетворення безпосередньо за допомогою cvs-fast-export, а не за допомогою cvsconvert,
використання різниця(1) з опцією -r, щоб порівняти виписку головки CVS з витягом
перетворений репозиторій. Єдині відмінності, які ви повинні побачити, пов’язані з ключовим словом RCS
розширення, зняття .cvsignore та невідповідності маніфесту через те, що CVS не відстежує файл
смерті цілком правильно. Якщо це не так, можливо, ви знайшли помилку
cvs-fast-export; будь ласка, повідомте про це разом із копією репо CVS.

2. Перегляньте перекладений репозиторій с репозитор(1) шукати (зокрема).
неправильно розміщені теги або з’єднання гілок. Часто їх можна відремонтувати вручну з незначними витратами
зусилля. Ці недоліки роблять НЕ обов'язково мають на увазі помилки в cvs-fast-export; вони можуть просто
вказують на раніше невиявлені вади розвитку в анамнезі CVS. Проте звітність
вони можуть допомогти покращити cvs-fast-export.

Вище наведено скорочену версію частини HOWTO щодо міграції DVCS; перегляньте його, щоб дізнатися більше.

ПОВЕРНЕННЯ VALUE


0, якщо всі файли знайдено та успішно перетворено, 1 інакше.

ERROR ПОВІДОМЛЕННЯ


Більшість повідомлень, які випускає cvs-fast-export, є очевидними. Ось кілька таких
не є. Там, де написано «перевірте голову», обов’язково перевірте осудність у відповідності до редакції голови.

тег не може бути призначений для коміту
Теги RCS/CVS є на файл, а не на ревізію. Якщо розробники не обережні у своєму
використання тегів, може бути неможливо пов’язати тег з будь-яким із наборів змін
що cvs-fast-export вирішує. Коли це станеться, cvs-fast-export видасть це
попередження, і названий тег буде відхилено.

дочірній коміт, виданий перед батьком
Під час канонізації експорту сталася помилка. Ймовірно, це було викликано CVS
фіксувати часові позначки в неправильному порядку для стосунків між батьками та дітьми. Спробуйте
параметр -F.

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

попередження - безіменна гілка
У гілці CVS з поточною версією немає мітки заголовка. Мітка з "-UNNAMED-BRANCH"
буде створено суфікс до імені батьківської гілки.

попередження - головна гілка не створена
cvs-fast-export не міг визначити гілку за замовчуванням (HEAD), тому її немає
«майстер» у конверсії; це серйозно заплутає git та, ймовірно, інші VCS
коли вони намагаються імпортувати вихідний потік. Можливо, ви зможете визначити та перейменувати a
головна гілка за допомогою репозитор(1).

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

tip фіксує старше, ніж приписане гілки приєднання
Подібна проблема до "новіше ніж", про яку повідомляється пізніше, коли файл розгалужується
в'яжуться в гілки набору змін. Одна гілка CVS у колекції, яка незабаром буде
об’єднаний у гілку gitspace, має фіксацію tip, старшу за найранішу, тобто
aa батьківський на деякі (інші) підказки в колекції. Придаткову гілку обрізають
вимкнути

деякі батьківські комісії молодші за дітей
Може вказувати на те, що cvs-fast-export агрегував деякі набори змін у неправильному порядку;
ймовірно, нешкідливий, але перевірте голову.

попередження - точка розгалуження пізніше гілки
Пізніше в аналізі, під час підключення гілок до їхніх батьків у наборі змін DAG,
дата фіксації кореневого фіксації гілки раніше дати батьківського
він підключається до. Це може бути ще одним симптомом перекосу годинника або може вказувати на
помилка в топологічному аналізі програми. Перевірте коміти біля з’єднання з
репозитор(1); гілку, можливо, доведеться відродити вручну.

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

{revision|patch} з непарною глибиною
Ніколи не повинно статися; тільки номери гілок повинні мати непарну глибину, а не файл
дельта чи номери патчів. Може вказувати на пошкоджений архів CVS; перевірка голови.

дубльований тег у головній частині CVS, ігноруючи
Майстер CVS має кілька екземплярів одного тегу, що вказує на різні дельти файлів.
Ймовірно, це помилка оператора CVS і відносно нешкідлива, але перевірте, чи є тег
референт у перетворенні має сенс.

тег або назва філії були порожні після очищення
Фатальна помилка: ім’я тегу було порожнім після того, як усі символи, заборонені для git, були видалені.
Ймовірно, це вказує на пошкоджений файл RCS.

номер версії задовгий, збільште CVS_MAX_DEPTH
Фатальна помилка: внутрішні буфери занадто короткі для обробки версії CVS в репо.
Збільште цю константу в cvs.h і перебудуйте. Попередження: це збільшить використання пам'яті
і дуже уповільнює тести.

порядковий номер знімка завеликий, розширте serial_t
Фатальна помилка: кількість знімків файлів у репо CVS перевищує внутрішню
лічильник. Перебудуйте cvs-fast-export з джерела з ширшим serial_t, виправленим у cvs.h.
Попередження: це значно збільшить розмір робочого набору

занадто багато гілок, розширте branchcount_t
Фатальна помилка: кількість гілок, що походять від деякого єдиного коміту, перевищує an
внутрішній лічильник. Перебудуйте cvs-fast-export із вихідного коду з більш широкою кількістю branchcount_t
виправлено в cvs.h. Попередження: це значно збільшить розмір робочого набору

внутрішня помилка - цикл розгалуження
cvs-fast-export знайшов цикл під час топологічної сортування комітів за батьківським посиланням. Це
ніколи не повинно статися і, ймовірно, вказує на серйозну внутрішню помилку: будь ласка, повідомте про помилку
повідомити.

внутрішня помилка - втрачений тег
Пізніше під час аналізу (після злиття набору змін) тег втратив посилання на фіксацію. Це
ніколи не повинно відбуватися і, ймовірно, вказує на внутрішню помилку: будь ласка, повідомте про помилку
повідомити.

ЗВІТНІСТЬ БУГИ


Повідомте про помилки Еріку С. Реймонду[захищено електронною поштою]>. Сторінка проекту знаходиться за адресою
http://catb.org/~esr/cvs-fast-export

Використовуйте cvs-fast-export онлайн за допомогою служб onworks.net


Безкоштовні сервери та робочі станції

Завантажте програми для Windows і Linux

Команди Linux

Ad




×
реклама
❤️Робіть покупки, бронюйте або купуйте тут — безкоштовно, це допомагає зберегти послуги безкоштовними.