Gespeicherte lokale Dateien anhand von SHA-256 lesen und bearbeiten

Prüfen Sie ein Projekt, listen Sie gespeicherte Dateien auf, lesen Sie sie und ersetzen Sie ihren Inhalt nur, wenn der erwartete SHA-256-Wert noch übereinstimmt.

Verwenden Sie Altifigence CLI 0.1.9 unter Linux, um mit den gespeicherten Dateien eines lokalen Projekts zu arbeiten, ohne die IDE zu öffnen. Jede Ersetzung nennt den SHA-256-Wert des gelesenen Inhalts, und der Befehl lehnt sie ab, wenn die gespeicherte Datei diesen SHA-256-Wert nicht mehr hat.

Das Projekt prüfen

Verwenden Sie einen absoluten Pfad zu Ihrem lokalen Projekt. Dieses Beispiel verwendet $HOME/alti-projects/demo-project. Führen Sie die Befehle mit Ihrem normalen Benutzerkonto aus.

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 schließt zuerst jede ausstehende Dateitransaktion ab und meldet dann das Projekt. Prüfen Sie, dass der Exit-Status 0 und ok gleich true ist. name ist der Name des Projektordners, und git gibt an, ob das Projekt einen Ordner .git enthält.

Dateien auflisten und lesen

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

files listet gespeicherte Dateien als sortierte Pfade relativ zum Projekt auf. total zählt alle aufgelisteten Dateien, und truncated ist true, wenn total den Wert --limit überschreitet. Das Standardlimit ist 500 und das Maximum ist 20000. Ordner wie .git, .alti, .altifigence, node_modules, target und dist werden ausgelassen.

Lesen Sie eine gespeicherte UTF-8-Textdatei. Diese Beispiele verwenden notes/review.txt:

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

Das Ergebnis enthält path, encoding (utf-8), sha256 und content. sha256 ist der hexadezimale SHA-256-Wert des gespeicherten Inhalts in Kleinbuchstaben. Dateien bis zu 4194304 Bytes können gelesen werden.

Eine Datei ersetzen

Schreiben Sie den neuen Inhalt in eine Datei und übergeben Sie dann den Wert sha256, den Sie gelesen haben, als --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"

Prüfen Sie, dass der Exit-Status 0 und outcome gleich committed ist:

{
  "outcome": "committed"
}

Der Beleg enthält außerdem transactionId, generation, recoveryStatus und files, wobei jeder Eintrag path, beforeSha256 und afterSha256 enthält. write ersetzt eine vorhandene Datei. --content - liest den neuen Inhalt aus der Standardeingabe. Begrenzen Sie den Inhalt auf 4194304 Bytes.

Mehrere Dateien gemeinsam bearbeiten

Lesen Sie jede Datei und bereiten Sie dann ein JSON-Array mit je einem Eintrag aus path, expected_sha256 und content pro Datei vor:

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"

Nach dem Exit-Status 0 lauten die ausgewählten Felder des Belegs:

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

edit prüft jeden Eintrag, bevor eine Datei geändert wird, und wendet die Ersetzungen als eine Transaktion an. Verwenden Sie 1 bis 64 Einträge, einen Eintrag pro Pfad, jeweils mit neuem Inhalt. Begrenzen Sie jede Datei auf 4194304 Bytes und den ursprünglichen und neuen Inhalt aller Einträge auf 16777216 Bytes.

Nach einer abgelehnten Bearbeitung fortfahren

Wenn die Workspace-Engine eine write- oder edit-Anfrage ablehnt, endet der Befehl mit dem Exit-Status 1 und schreibt ein Objekt altifigence.ide-workspace-error.v1 mit einer message in die Standardfehlerausgabe. Die CLI meldet eine zu große Eingabe oder eine Edit-Anfrage, deren JSON kein Array ist, in der Standardfehlerausgabe mit dem Präfix error: und endet mit dem Exit-Status 1. Bei jeder der folgenden Meldungen wird keine Datei geändert.

Bei workspace edit original digest mismatch: notes/review.txt hat sich die Datei nach dem Lesen geändert. Lesen Sie sie erneut, prüfen Sie ihren aktuellen content und wiederholen Sie die Ersetzung mit dem neuen sha256.

Bei workspace edit has no content change: notes/review.txt entspricht der neue Inhalt dem gespeicherten Inhalt. Entfernen Sie diesen Eintrag oder ändern Sie seinen Inhalt.

Bei workspace edit transaction contains a duplicate path fassen Sie die Einträge für diesen Pfad zu einem Eintrag mit dem endgültigen Inhalt zusammen.

Bei workspace edit SHA-256 digest must be 64 lowercase hexadecimal characters kopieren Sie den Wert sha256 unverändert aus read.

Bei workspace path is outside the editable file surface verwenden Sie einen Pfad relativ zum Projekt aus der Auflistung von files, ohne die Segmente . oder ...

Wenn files die Meldung workspace exceeds 20000 files; narrow the project ausgibt, öffnen Sie einen kleineren Projektordner.

Lokale Dateien erstellen, ersetzen und löschen