Чтение и редактирование сохранённых локальных файлов по SHA-256

Проверьте проект, выведите список и прочитайте сохранённые файлы и заменяйте их содержимое только тогда, когда ожидаемый SHA-256 всё ещё совпадает.

Используйте Altifigence CLI 0.1.9 в Linux, чтобы работать с сохранёнными файлами локального проекта, не открывая IDE. Каждая замена указывает SHA-256 прочитанного вами содержимого, и команда отклоняет её, если у сохранённого файла уже другой SHA-256.

Проверка проекта

Используйте абсолютный путь к локальному проекту. В этом примере используется $HOME/alti-projects/demo-project. Выполняйте команды от имени обычного пользователя.

set -euo pipefail
PROJECT="$(cd "$HOME/alti-projects/demo-project" && pwd -P)"
WORK="$(mktemp -d)"
alti ide workspace health --project "$PROJECT" > "$WORK/health.json"
jq '{ok, git}' "$WORK/health.json"

health сначала завершает все незавершённые файловые транзакции, затем сообщает о проекте. Убедитесь, что код завершения равен 0, а ok равно true. name — это имя папки проекта, а git показывает, есть ли в проекте папка .git.

Список и чтение файлов

alti ide workspace files --project "$PROJECT" --limit 100 > "$WORK/files.json"
jq '{total, truncated, first: .files[:5]}' "$WORK/files.json"

files выводит сохранённые файлы как отсортированные пути относительно проекта. total считает все перечисленные файлы, а truncated равно true, когда total превышает --limit. Лимит по умолчанию — 500, максимум — 20000. Такие папки, как .git, .alti, .altifigence, node_modules, target и dist, не включаются.

Прочитайте один сохранённый текстовый файл UTF-8. В этих примерах используется notes/review.txt:

alti ide workspace read --project "$PROJECT" notes/review.txt > "$WORK/review.json"
jq '{path, encoding, sha256}' "$WORK/review.json"

Результат содержит path, encoding (utf-8), sha256 и content. sha256 — это SHA-256 сохранённого содержимого в шестнадцатеричном виде в нижнем регистре. Можно читать файлы размером до 4194304 байт.

Замена одного файла

Запишите новое содержимое в файл, затем передайте прочитанный sha256 как --expected-sha256:

printf 'Third review\n' > "$WORK/review.txt"
alti ide workspace write --project "$PROJECT" notes/review.txt \
  --expected-sha256 "$(jq -r .sha256 "$WORK/review.json")" \
  --content "$WORK/review.txt" > "$WORK/write.receipt.json"
jq '{outcome}' "$WORK/write.receipt.json"

Убедитесь, что код завершения равен 0, а outcome имеет значение committed:

{
  "outcome": "committed"
}

Квитанция также содержит transactionId, generation, recoveryStatus и files, где каждая запись имеет path, beforeSha256 и afterSha256. write заменяет существующий файл. --content - читает новое содержимое со стандартного ввода. Размер содержимого не должен превышать 4194304 байт.

Редактирование нескольких файлов одновременно

Прочитайте каждый файл, затем подготовьте массив JSON с одной записью path, expected_sha256 и content на каждый файл:

alti ide workspace read --project "$PROJECT" notes/review.txt > "$WORK/review.json"
alti ide workspace read --project "$PROJECT" notes/todo.txt > "$WORK/todo.json"
jq -s '[
  {path: .[0].path, expected_sha256: .[0].sha256, content: "Fourth review\n"},
  {path: .[1].path, expected_sha256: .[1].sha256, content: "Check the review\n"}
]' "$WORK/review.json" "$WORK/todo.json" > "$WORK/edit.json"
alti ide workspace edit --project "$PROJECT" --request "$WORK/edit.json" \
  > "$WORK/edit.receipt.json"
jq '{outcome, files: [.files[].path]}' "$WORK/edit.receipt.json"

После завершения с кодом 0 выбранные поля квитанции имеют следующие значения:

{
  "outcome": "committed",
  "files": [
    "notes/review.txt",
    "notes/todo.txt"
  ]
}

edit проверяет каждую запись, прежде чем изменить какой-либо файл, и применяет замены как одну транзакцию. Используйте от 1 до 64 записей, по одной записи на путь, и у каждой — новое содержимое. Размер каждого файла не должен превышать 4194304 байт, а исходное и новое содержимое всех записей — 16777216 байт.

Действия при отклонённой правке

Когда движок рабочего пространства отклоняет запрос write или edit, команда завершается с кодом 1 и записывает в стандартный поток ошибок объект altifigence.ide-workspace-error.v1 с полем message. CLI сообщает о слишком большом входе либо запросе редактирования, JSON которого не является массивом, в стандартном потоке ошибок с префиксом error: и завершается с кодом 1. Ни при одном из приведённых ниже сообщений файлы не изменяются.

При workspace edit original digest mismatch: notes/review.txt файл изменился после того, как вы его прочитали. Прочитайте его ещё раз, проверьте текущее content и повторите замену с новым sha256.

При workspace edit has no content change: notes/review.txt новое содержимое совпадает с сохранённым. Удалите эту запись или измените её содержимое.

При workspace edit transaction contains a duplicate path объедините записи для этого пути в одну запись с итоговым содержимым.

При workspace edit SHA-256 digest must be 64 lowercase hexadecimal characters скопируйте значение sha256 из read без изменений.

При workspace path is outside the editable file surface используйте путь относительно проекта из списка files без сегментов . или ...

При workspace exceeds 20000 files; narrow the project из files откройте папку проекта поменьше.

Создание, замена и удаление локальных файлов