манифесты стали данными, заведён convy sync
- убраны комментарии из suite.toml и .conventions.toml: файл, который машина переписывает, комментарий через круг не проносит; объяснения ушли в README рядом, который suite init теперь заводит - удалена текстовая правка манифеста целиком — 520 строк ручного лексера TOML вместе со всем классом ошибок порчи данных - запись идёт из структур энкодером; ключ, которого инструмент не знает, запись останавливает, а не теряется молча - convy sync сверяет манифест и подводит под него раскладку файлов: чего не хватает — собирает, что осиротело — удаляет, копию с локальной частью не трогает никогда
This commit is contained in:
@@ -84,7 +84,8 @@ go build -o convy .
|
||||
В проекте:
|
||||
convy init подключить конвенции: источник и первый компонент
|
||||
convy add <тема> подписаться и собрать
|
||||
convy pull пересобрать подписанное
|
||||
convy pull пересобрать подписанное, текст и всё
|
||||
convy sync привести файлы в соответствие манифесту
|
||||
convy list что подключено и что ещё есть в наборе
|
||||
convy check проверить форму того, что здесь
|
||||
```
|
||||
@@ -180,6 +181,52 @@ topics = ["logging", "time"]
|
||||
`postgres` действуют вместе, это разные таблицы одного сервиса. Два языка не
|
||||
действуют вместе никогда — ради этого компонент и заведён.
|
||||
|
||||
## Манифесты — данные, а не текст
|
||||
|
||||
Оба манифеста инструмент и читает, и переписывает целиком. Поэтому комментариев
|
||||
в них нет: файл, который машина переписывает, комментарий через круг не
|
||||
проносит, а вид, что проносит, стоит этого комментария в день, когда никто не
|
||||
смотрит. Объяснения живут в соседних файлах, которых ни одна команда не
|
||||
касается: `convy suite init` заводит рядом `README.md` и пишет их туда.
|
||||
|
||||
Ключ, которого инструмент не знает, при записи потерялся бы. Поэтому он не
|
||||
пишет вовсе:
|
||||
|
||||
```
|
||||
$ convy suite add --topic time --about "время" --prefix TIME --title "Время"
|
||||
suite.toml holds 1 key the tool does not know (language.descriptoin); a write
|
||||
goes out of what the tool understands, so the key would be dropped — fix the
|
||||
spelling first
|
||||
```
|
||||
|
||||
## Манифест — источник истины
|
||||
|
||||
`.conventions.toml` правится руками так же законно, как командой. Дальше
|
||||
раскладку под него подводит `sync`:
|
||||
|
||||
```
|
||||
$ convy sync --dry-run
|
||||
backend → docs/conventions
|
||||
+ docs/conventions/errors.md subscribed, and no file
|
||||
- docs/conventions/logging.md nothing subscribes to "logging"
|
||||
|
||||
2 files would change; run without --dry-run to do it
|
||||
```
|
||||
|
||||
Деление с `pull` проходит по тому, о чём команда. `pull` — о содержимом:
|
||||
берёт текст всех подписок заново, и оставленный им дифф и есть смысл запуска.
|
||||
`sync` — о наборе файлов: чего манифест требует и нет — собирается, что есть и
|
||||
никому не нужно — удаляется.
|
||||
|
||||
Копия с локальной частью не удаляется никогда: ниже маркера лежит
|
||||
единственное, чего нет больше нигде. Такая копия называется в отчёте, и `sync`
|
||||
завершается с ошибкой, пока её не убрали руками или не подписались снова.
|
||||
|
||||
Перед тем как что-то трогать, `sync` сверяет манифест: подписка на снятую или
|
||||
несуществующую тему, тема дважды, два языка в одном компоненте, тема без
|
||||
подходящего слоя, общая директория у двух компонентов. Находки называются
|
||||
разом, и ничего не пишется.
|
||||
|
||||
Копия плоская, файл на тему. Первый слой — сам документ; каждый следующий
|
||||
становится его разделом, и заголовки внутри опускаются на уровень: слой
|
||||
реализует и сужает базу, а не стоит рядом с ней. Строка о версии языка
|
||||
@@ -255,4 +302,6 @@ errors: 1, warnings: 0
|
||||
- не переносит правки из проекта в набор: операция ручная и редкая;
|
||||
- не перенумеровывает правила: номер — идентификатор, а не позиция;
|
||||
- не кэширует источник: клон делается заново и удаляется;
|
||||
- не знает нескольких наборов сразу: `source` в проекте один.
|
||||
- не знает нескольких наборов сразу: `source` в проекте один;
|
||||
- не хранит комментарии в манифестах: они данные, а объяснения — в соседних
|
||||
файлах.
|
||||
|
||||
Reference in New Issue
Block a user