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 बाइट के भीतर रखें।

कई फ़ाइलें एक साथ संपादित करें

हर फ़ाइल पढ़ें, फिर हर फ़ाइल के लिए एक 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 आने पर छोटा प्रोजेक्ट फ़ोल्डर खोलें।

लोकल फ़ाइलें बनाएँ, बदलें और हटाएँ