저장된 로컬 파일을 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은 나열된 모든 파일의 수이고, truncated는 total이 --limit을 초과하면 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바이트 이내로 유지하세요.

여러 파일 함께 편집하기

각 파일을 읽은 다음, 파일당 하나씩 path, expected_sha256, content를 담은 항목으로 구성된 JSON 배열을 준비하세요:

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가 표시되면 더 작은 프로젝트 폴더를 여세요.

로컬 파일 만들기, 바꾸기, 삭제하기