按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,请打开更小的项目文件夹。

创建、替换和删除本地文件