Leggere e modificare file locali salvati tramite SHA-256

Controlla un progetto, elenca e leggi i file salvati e sostituisci il loro contenuto solo quando lo SHA-256 atteso corrisponde ancora.

Utilizza Altifigence CLI 0.1.9 su Linux per lavorare con i file salvati di un progetto locale senza aprire l’IDE. Ogni sostituzione indica lo SHA-256 del contenuto che hai letto e il comando la rifiuta quando il file salvato non ha più quello SHA-256.

Controllare il progetto

Utilizza un percorso assoluto del progetto locale. Questo esempio utilizza $HOME/alti-projects/demo-project. Esegui i comandi con il tuo normale account utente.

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 completa prima qualsiasi transazione di file in sospeso, poi riporta lo stato del progetto. Verifica che il codice di uscita sia 0 e che ok sia uguale a true. name è il nome della cartella del progetto e git indica se il progetto ha una cartella .git.

Elencare e leggere i file

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

files elenca i file salvati come percorsi ordinati relativi al progetto. total conta tutti i file elencati e truncated è true quando total supera --limit. Il limite predefinito è 500 e il massimo è 20000. Cartelle come .git, .alti, .altifigence, node_modules, target e dist sono escluse.

Leggi un file di testo UTF-8 salvato. Questi esempi utilizzano notes/review.txt:

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

Il risultato contiene path, encoding (utf-8), sha256 e content. sha256 è lo SHA-256 esadecimale in minuscolo del contenuto salvato. È possibile leggere file fino a 4194304 byte.

Sostituire un file

Scrivi il nuovo contenuto in un file, quindi passa lo sha256 che hai letto come --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"

Verifica che il codice di uscita sia 0 e che outcome sia uguale a committed:

{
  "outcome": "committed"
}

La ricevuta contiene anche transactionId, generation, recoveryStatus e files, dove ogni voce ha path, beforeSha256 e afterSha256. write sostituisce un file esistente. --content - legge il nuovo contenuto dallo standard input. Mantieni il contenuto entro 4194304 byte.

Modificare più file insieme

Leggi ogni file, quindi prepara un array JSON con una voce path, expected_sha256 e content per ogni file:

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"

Dopo il codice di uscita 0, i campi selezionati della ricevuta sono:

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

edit controlla ogni voce prima di modificare qualsiasi file e applica le sostituzioni come un’unica transazione. Utilizza da 1 a 64 voci, una voce per percorso, ciascuna con nuovo contenuto. Mantieni ogni file entro 4194304 byte e il contenuto originale e nuovo di tutte le voci entro 16777216 byte.

Riprendere dopo una modifica rifiutata

Quando il motore dell’area di lavoro rifiuta una richiesta write o edit, il comando termina con codice di uscita 1 e scrive nello standard error un oggetto altifigence.ide-workspace-error.v1 con un message. La CLI segnala un input troppo grande o una richiesta di modifica il cui JSON non è un array nello standard error con il prefisso error: e termina con codice di uscita 1. Per ciascuno dei messaggi seguenti, nessun file viene modificato.

Per workspace edit original digest mismatch: notes/review.txt, il file è cambiato dopo che l’hai letto. Leggilo di nuovo, esamina il suo content attuale e ripeti la sostituzione con il nuovo sha256.

Per workspace edit has no content change: notes/review.txt, il nuovo contenuto è uguale al contenuto salvato. Rimuovi quella voce oppure modifica il suo contenuto.

Per workspace edit transaction contains a duplicate path, unisci le voci di quel percorso in un’unica voce con il contenuto finale.

Per workspace edit SHA-256 digest must be 64 lowercase hexadecimal characters, copia il valore sha256 da read senza modificarlo.

Per workspace path is outside the editable file surface, utilizza un percorso relativo al progetto preso dall’elenco di files, senza segmenti . o ...

Per workspace exceeds 20000 files; narrow the project da files, apri una cartella di progetto più piccola.

Creare, sostituire ed eliminare file locali