Lire et modifier des fichiers locaux enregistrés par SHA-256

Vérifiez un projet, listez et lisez les fichiers enregistrés, et remplacez leur contenu uniquement lorsque le SHA-256 attendu correspond toujours.

Utilisez Altifigence CLI 0.1.9 sous Linux pour travailler avec les fichiers enregistrés d’un projet local sans ouvrir l’IDE. Chaque remplacement indique le SHA-256 du contenu que vous avez lu, et la commande le refuse lorsque le fichier enregistré n’a plus ce SHA-256.

Vérifier le projet

Utilisez un chemin absolu vers votre projet local. Cet exemple utilise $HOME/alti-projects/demo-project. Exécutez les commandes avec votre compte utilisateur habituel.

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 termine d’abord toute transaction de fichier en attente, puis rend compte du projet. Vérifiez que le code de sortie est 0 et que ok est égal à true. name est le nom du dossier du projet et git indique si le projet contient un dossier .git.

Lister et lire des fichiers

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

files liste les fichiers enregistrés sous forme de chemins triés relatifs au projet. total compte tous les fichiers listés et truncated vaut true lorsque total dépasse --limit. La limite par défaut est 500 et le maximum est 20000. Les dossiers tels que .git, .alti, .altifigence, node_modules, target et dist sont exclus.

Lisez un fichier texte UTF-8 enregistré. Ces exemples utilisent notes/review.txt :

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

Le résultat contient path, encoding (utf-8), sha256 et content. sha256 est le SHA-256 hexadécimal en minuscules du contenu enregistré. Les fichiers jusqu’à 4194304 octets peuvent être lus.

Remplacer un fichier

Écrivez le nouveau contenu dans un fichier, puis transmettez le sha256 que vous avez lu comme --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"

Vérifiez que le code de sortie est 0 et que outcome est égal à committed :

{
  "outcome": "committed"
}

Le reçu contient aussi transactionId, generation, recoveryStatus et files, où chaque entrée contient path, beforeSha256 et afterSha256. write remplace un fichier existant. --content - lit le nouveau contenu depuis l’entrée standard. Limitez le contenu à 4194304 octets.

Modifier plusieurs fichiers ensemble

Lisez chaque fichier, puis préparez un tableau JSON avec une entrée path, expected_sha256 et content par fichier :

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"

Après le code de sortie 0, les champs sélectionnés du reçu sont :

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

edit vérifie chaque entrée avant de modifier un fichier et applique les remplacements comme une seule transaction. Utilisez de 1 à 64 entrées, une entrée par chemin, chacune avec un nouveau contenu. Limitez chaque fichier à 4194304 octets, et le contenu d’origine et le nouveau contenu de toutes les entrées à 16777216 octets.

Reprendre après une modification rejetée

Lorsque le moteur de l’espace de travail rejette une requête write ou edit, la commande se termine avec le code de sortie 1 et écrit sur l’erreur standard un objet altifigence.ide-workspace-error.v1 avec un message. La CLI signale une entrée trop volumineuse ou une requête d’édition dont le JSON n’est pas un tableau sur l’erreur standard avec le préfixe error: et se termine avec le code de sortie 1. Pour chacun des messages ci-dessous, aucun fichier n’est modifié.

Pour workspace edit original digest mismatch: notes/review.txt, le fichier a changé après votre lecture. Relisez-le, vérifiez son content actuel et répétez le remplacement avec le nouveau sha256.

Pour workspace edit has no content change: notes/review.txt, le nouveau contenu est identique au contenu enregistré. Supprimez cette entrée ou modifiez son contenu.

Pour workspace edit transaction contains a duplicate path, fusionnez les entrées de ce chemin en une seule entrée avec le contenu final.

Pour workspace edit SHA-256 digest must be 64 lowercase hexadecimal characters, copiez la valeur sha256 de read sans la modifier.

Pour workspace path is outside the editable file surface, utilisez un chemin relatif au projet issu de la liste files, sans segment . ni ...

Lorsque files signale workspace exceeds 20000 files; narrow the project, ouvrez un dossier de projet plus petit.

Créer, remplacer et supprimer des fichiers locaux