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