خصوصیات
ccam اپ ڈیٹ کرنا
اس صفحے کا انگریزی سے مشینی ترجمہ کیا گیا ہے۔ اصلاحات کا خیرمقدم ہے۔ اس صفحے میں GitHub پر ترمیم کریں
ccam update ccam کی ایک ریلیز GitHub سے ڈاؤن لوڈ کرتا ہے، اسے ریلیز کی checksums.txt سے جانچتا ہے اور چلنے والی بائنری کو ایک ہی rename میں بدل دیتا ہے۔ اسے تب استعمال کریں جب آپ نے ccam انسٹال اسکرپٹ سے یا کسی آرکائیو سے انسٹال کیا ہو۔ ccam خود سے کبھی اپ ڈیٹس چیک نہیں کرتا: صرف یہی کمانڈ GitHub سے رابطہ کرتی ہے، اس لیے باقی ہر کمانڈ آف لائن بھی ویسے ہی کام کرتی ہے۔
استعمال
ccam update # install the latest release
ccam update --check # only say whether a newer release exists
ccam update --version v0.3.0 # install that release, also an older one
ccam --dry-run update # show what would be downloaded and replaced$ ccam update --check
ccam 0.5.0 is available (you have 0.4.0). Run `ccam update`.
$ ccam --dry-run update
Would update ccam 0.4.0 → 0.5.0:
download https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/ccam_linux_amd64.tar.gz
verify with https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/checksums.txt
replace /home/you/.local/bin/ccam
$ ccam update
→ downloading https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/ccam_linux_amd64.tar.gz
✓ Updated ccam 0.4.0 → 0.5.0 (/home/you/.local/bin/ccam)جب کوئی نئی ریلیز موجود نہ ہو تو ccam ccam 0.4.0 is up to date. پرنٹ کرتا ہے اور کچھ تبدیل نہیں کرتا۔ --version کے ساتھ وہی ورژن دینے پر جو آپ پہلے سے چلا رہے ہیں، یہ ccam 0.4.0 is already installed. پرنٹ کرتا ہے۔
آپشنز
| آپشن | کیا کرتا ہے | ڈیفالٹ |
|---|---|---|
--check |
صرف یہ بتاتا ہے کہ کوئی نئی ریلیز موجود ہے یا نہیں | بند |
--version <tag> |
یہ ریلیز ٹیگ انسٹال کرتا ہے، جیسے v0.3.0، جو موجودہ سے نیا یا پرانا ہو سکتا ہے |
تازہ ترین |
--dry-run |
لاگو ہوتا ہے: تازہ ترین ٹیگ تلاش کرتا ہے (جب تک --version کوئی ٹیگ نہ بتائے)، بائنری پر وہی جانچ چلاتا ہے، اور ڈاؤن لوڈ کیے بغیر ڈاؤن لوڈ، چیک سم اور بدلنے کے راستے پرنٹ کرتا ہے |
بند |
--check اور --version ایک ساتھ استعمال نہیں ہو سکتے۔ ٹیگ vMAJOR.MINOR.PATCH جیسا ہونا چاہیے، جس کے بعد اختیاری طور پر pre-release یا build کا لاحقہ ہو سکتا ہے؛ شروع کا v چھوڑا جا سکتا ہے۔ اس کے علاوہ کچھ بھی ناکام ہوتا ہے، مثلاً --version takes a release tag such as v0.3.0, not "1.2"۔
انوائرنمنٹ ویری ایبل CCAM_RELEASES_URL، کسی مرر یا ٹیسٹس کے لیے، https://github.com/jhyunwoo/ccam/releases کی جگہ لے لیتا ہے۔ اس کی ترتیب بھی ویسی ہی ہونی چاہیے: <url>/latest کو <url>/tag/<tag> پر ری ڈائریکٹ ہونا چاہیے، اور فائلیں <url>/download/<tag>/<asset> پر ہونی چاہئیں۔
یہ کیسے کام کرتا ہے
کوڈ internal/update میں ہے، جسے صرف ccam update امپورٹ کرتا ہے۔ Claude Code شروع کرنے والا راستہ اسے کبھی کال نہیں کرتا۔
cli.updateCmd،os.Executableسے چلنے والی بائنری تلاش کرتا ہے اورfilepath.EvalSymlinksسے symlinks حل کرتا ہے۔ یہی اصل راستہ بدلا جاتا ہے۔--versionکے بغیر،Updater.Latestری ڈائریکٹ پر عمل کیے بغیر<releases>/latestکی درخواست کرتا ہے، اور ٹیگLocationہیڈر سے پڑھتا ہے (…/tag/v0.5.0)۔ اس میں GitHub API کے بجائے ریلیزز کا صفحہ استعمال ہوتا ہے، اس لیے API کی 60 درخواستیں فی گھنٹہ کی حد لاگو نہیں ہوتی۔ اس تلاش کے لیے 10 سیکنڈ ہوتے ہیں۔parseVersionٹیگ کو ایک سخت پیٹرن سے جانچتا ہے۔ ٹیگ ڈاؤن لوڈ URLs اور پرنٹ کی گئی شیل کمانڈ میں جاتا ہے، اس لیے/،%، اسپیس یا شیل کے حروف والی کوئی چیز آگے نہیں جاتی۔compareVersionsاسے چلنے والے ورژن سے موازنہ کرتا ہے؛ pre-release اپنی ریلیز سے پہلے شمار ہوتی ہے۔managed()اورwritable()طے کرتے ہیں کہ ccam بائنری بدل بھی سکتا ہے یا نہیں (نیچے دیکھیں)۔Updater.Fetch،ccam_<os>_<arch>.tar.gzاورchecksums.txtایک ساتھ ڈاؤن لوڈ کرتا ہے، دونوں کے لیے 2 منٹ۔ ہر ڈاؤن لوڈ کی حد 256 MB ہے۔- کچھ اور ہونے سے پہلے آرکائیو کا SHA-256،
checksums.txtمیں اس کی لائن سے ملنا چاہیے۔ لائن نہ ہو یا چیک سم مختلف ہو تو اپ ڈیٹnothing was changedکے ساتھ رک جاتا ہے۔ extract()ٹار پڑھتا ہے اورccamنام کی پہلی عام فائل لیتا ہے۔ فولڈرز، لنکس اور دوسری اینٹریز نظر انداز ہوتی ہیں، اور بائنری کی حد بھی 256 MB ہے۔Updater.Installنئی بائنریfsutil.AtomicWriteسے لکھتا ہے: بائنری کے ساتھ ایک عارضی فائل.ccam.tmp*، پرانی فائل کی اجازتوں کے ساتھ، جو ڈسک پر محفوظ ہو کر پرانی فائل کی جگہ rename ہو جاتی ہے۔
ٹیگ تلاش کرنے سے لے کر rename تک پورا عمل:
آرکائیو اور checksums.txt ساتھ ساتھ ڈاؤن لوڈ ہوتے ہیں، اور چیک سم ملنے تک کچھ نہیں لکھا جاتا۔ rename ایٹامک ہے، اس لیے کریش یا بھری ہوئی ڈسک کے بعد یا تو پرانی بائنری رہتی ہے یا نئی، کبھی آدھی نہیں۔ ~/.local/bin/ccwork جیسی شارٹ کٹ کمانڈز ccam بائنری کے symlinks ہیں، اس لیے وہ بغیر کسی تبدیلی کے نیا ورژن چلاتی ہیں۔
پیکیج سے انسٹال شدہ ccam
.deb سے انسٹال کیا گیا ccam، apt کی ملکیت ہے، اور اسے apt کے علم کے بغیر بدلنے سے پیکیج ڈیٹا بیس غلط ہو جائے گا۔ ڈاؤن لوڈ سے پہلے ccam دیکھتا ہے کہ بائنری کس کی ملکیت ہے:
/usr/bin،/bin،/usr/sbinیا/sbinمیں موجود بائنری پیکیج سے منظم شمار ہوتی ہے۔- کسی اور جگہ، اگر
dpkgانسٹال ہو اورdpkg -S <path>کامیاب ہو، تو وہ بھی پیکیج سے منظم شمار ہوتی ہے۔ - ورنہ ccam بائنری کے ساتھ ایک عارضی
.ccam-update-*فائل بنا کر ہٹاتا ہے تاکہ یقین ہو جائے کہ وہ وہاں لکھ سکتا ہے۔
پیکیج سے منظم بائنری کے لیے ccam رک جاتا ہے اور apt کے مراحل پرنٹ کرتا ہے:
$ ccam update
ccam: /usr/bin/ccam was installed by a package, so `ccam update` leaves it alone.
To update the .deb, download ccam_0.5.0_linux_amd64.deb from https://github.com/jhyunwoo/ccam/releases/tag/v0.5.0 and run:
sudo apt install ./ccam_0.5.0_linux_amd64.deb
Or install a copy in ~/.local/bin with the install script:
curl -fsSL https://raw.githubusercontent.com/jhyunwoo/ccam/main/install.sh | shLinux کے علاوہ دوسرے سسٹمز پر صرف انسٹال اسکرپٹ والی لائن پرنٹ ہوتی ہے۔ جب فولڈر میں لکھا نہ جا سکے تو ccam انسٹال اسکرپٹ دوبارہ چلانے کا مشورہ دیتا ہے، جو ccam کو ~/.local/bin میں انسٹال کرتا ہے۔
حفاظت اور خاص صورتیں
- ڈیولپمنٹ بلڈ اپنا ورژن
devبتاتا ہے اور اس کے موازنے کے لیے کوئی ریلیز نہیں ہوتی، اس لیےccam updateاورccam update --checkاسے مسترد کر دیتے ہیں۔ccam update --version vX.Y.Zاس کے اوپر ایک ریلیز انسٹال کر دیتا ہے۔ - ناکام ڈاؤن لوڈ، آپ کے پلیٹ فارم کی فائل کا نہ ہونا، یا چیک سم کا نہ ملنا انسٹال شدہ بائنری کو ویسا ہی چھوڑ دیتا ہے۔
- جو ریلیز موجود نہ ہو وہ
there is no release <tag>کے ساتھ ناکام ہوتی ہے۔ جب GitHub HTTP 403 یا 429 سے انکار کرے تو ccam بتاتا ہے کہ یہ غالباً ریٹ لمٹ ہے اور بعد میں دوبارہ کوشش کرنے کو کہتا ہے۔ --checkصرف پڑھتا ہے۔ یہ نہیں جانچتا کہ بائنری پیکیج سے منظم ہے یا اس میں لکھا جا سکتا ہے۔- پرانے ٹیگ کے ساتھ
--versionہی پچھلے ورژن پر واپس جانے کا طریقہ ہے۔