---
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)!
