依SHA-256讀取並編輯已儲存的本機檔案
檢查專案、列出並讀取已儲存的檔案,且僅在預期的SHA-256仍然相符時才取代其內容。
在Linux上使用Altifigence CLI 0.1.9,不開啟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計算所有列出的檔案,當total超過--limit時,truncated為true。預設上限為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結束,並將帶有message的altifigence.ide-workspace-error.v1物件寫入標準錯誤。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,請從read原封不動複製sha256值。
若出現workspace path is outside the editable file surface,請使用files清單中相對於專案的路徑,且不含.或..區段。
若files出現workspace exceeds 20000 files; narrow the project,請開啟較小的專案資料夾。