--- title: Основні можливості --- Як `[mode]`, спільний між е-м… сховищами… чи щось подібне. ## Що потрібно знати Malachite досить конкретизований у режимі Сховища, і не дуже в режимі Робочого простору. Звісно, це не тому, що я ледачий і ненавиджу режим Робочого простору чи щось інше, просто нема чого _додавати_. Без зайвих слів, давайте подивимося на цей приклад конфігураційного файлу. ```toml # mlc.toml [base] mode = "workspace" smart_pull = true [mode.workspace] git_info = true colorblind = true [repositories] repos = [ "foo:repo1:2", "foo:repo2/testing", "bar:baz!", "bar:qux/testing!:1", ] [repositories.urls] foo = "https://example.org/{}.git" bar = "https://example.org/other/{}.git" ``` Спочатку це буде виглядати дуже заплутаним, але потерпіть мене. У цьому документі ми розглянемо лише те, що потрібно знати для **обох** режимів. Посилання на додаткові спеціалізовані посібники для кожного режиму розташовано внизу цієї сторінки. Почнемо з `[base]`. ## Базова конфігурація Базова конфігурація визначає кілька загальних параметрів для всіх режимів Malachite. ```toml [base] mode = "workspace" smart_pull = true ``` У цьому фрагменті ми визначаємо `mode` як `"workspace"`. `base.mode` у Malachite може бути лише одним із `"workspace"` або `"repository``, і визначає, барабанний дріб… Режим, в якому він працює. Якщо для нього встановлено будь-який режим, окрім цих 2 режимів, він аварійно завершує роботу. У цьому фрагменті також визначено `smart_pull`, який контролює, чи слід виконувати команду pull… розумно. Насправді це означає, що замість того, щоб просто виконувати простий `git pull` у кожному сховищі, Malachite буде: - Спочатку запустить `git remote update`, щоб отримати нові віддалені сховища з джерела - Потім запустить `git status` і проаналізує вивід, щоб побачити, чи поточна гілка відстала - Якщо поточна гілка відстає, вона запускає звичайний `git pull`, який використовує переваги віддаленого керування, яке вже оновлюється. Теоретично, це прискорює роботу лише на хвилину (справді, подумайте, мілісекунди). Проте, де ця функція сяє, так у режимі сховища, де він активує корисні функції автоматизації, такі як `build_on_update`. Незважаючи на це, рекомендовано залишати його ввімкненим для невеликого прискорення та вимикати, лише якщо це спричиняє проблеми. У мене особисто ніколи з цим не було проблем у минулому, але хто знає, що може статися. Це ж Git, про який ми говоримо. ### Конфігурація сховища Конфігурація сховищ – це те, що дійсно змушує Malachite збивати сховища внутрішньо. Уся мета у тому, що він робить, і тому ми спробували придумати акуратну маленьку систему, яка допоможе полегшити багато пакетів без необхідності вводити кожну URL-адресу мільйон разів. ```toml [repositories] repos = [ "foo:repo1:2", "foo:repo2/testing", "bar:baz!", "bar:qux/testing!:1", ] [repositories.urls] foo = "https://example.org/{}.git" bar = "https://example.org/other/{}.git" ``` Працює це дуже просто: - Ми маємо 2 URL-адреси в ключі `repositories.urls`. - Кожний `repo` в ключі `repositories.repos` має префікс ідентифікатора. - Якщо числом є `foo`, буде вставлено URL-адресу з ідентифікатором `foo`. - Зокрема, в URL-адресу замість підрядка `%repo%` буде вставлено визначене ім’я `repo`. ### Почекайте, які спеціальні символи???? Я радий, що ви запитали! - Якщо ви хочете скопіювати певну гілку, просто використовуйте роздільник `/`. Щоб скопіювати сховище `foo` у гілці `bar`, використовуйте `id:foo/bar`. - Якщо ви хочете, щоб певний пакет збирався першим, використовуйте екземпляри `!`, щоб установити пріоритет. Це пояснюється пізніше на сторінці [Режим сховища](repository-mode). Останній роздільник `:` є необов'язковим і поводиться по-різному залежно від режиму: - У режимі сховища він визначає бажаний хеш/ревізію/тег для перевірки на клоні сховища - У режимі робочого простору він визначає бажану глибину для клонування сховища, що корисно для великих сховищ git, таких як `nixpkgs`. Це буквально все! ## Спеціальна конфігурація режиму Щоб отримати спеціальну конфігурацію режиму, подивіться наступні посилання! - [Режим робочого простору](workspace-mode) - [Режим сховища](repository-mode) ## Examples Приклади функціональної конфігурації для обох режимів доступні в каталозі [examples](https://github.com/crystal-linux/malachite/tree/main/examples)! ## Використання Крім того, ви можете переглянути довідник з [Використання](detailed-usage)!