İçeriğe geç
ivralo
Bölümler

Dokümantasyon / Geliştirici modu

Changeset'ler

Changeset, bir turun düzenlemelerini ayrı bir ağaçta hazırlar, orada doğrular, sonra ya hepsini birden uygular ya da hepsini birden atar. Changeset'leri açmak, hazırlık ağacı, uygulama ve atma ve başında kimse olmayan çalıştırmalar için geçerli kural bu sayfada.

Açmak

Changeset'ler varsayılan olarak kapalıdır, yani bir düzenleme onayladığınız anda uygulanır.

NeredeNasıl
Bir oturumda/changeset on her turun düzenlemelerini hazırlık ağacına alır; /changeset off bunu durdurur; tek başına /changeset bekleyen changeset'i yeniden açar
Tek bir çalıştırmadaivralo ask --changeset "..." yalnızca kontroller geçerse uygular; --keep-changeset hazırlar ama hiçbir zaman uygulamaz
Her çalıştırmadaIVRALO_CHANGESET=1 varsayılan olarak açar; ivralo ask --no-changeset tek bir çalıştırma için kapatır

ivralo doctor changeset'lerin açık olup olmadığını gösterir ve hâlâ hazırda bekleyen bütün changeset'leri listeler.

Hazırlık ağacı

Repo'larda hazırlık ağacı, ivralo'nun home dizini altında bir git worktree'dir:

<home>/worktrees/<slug>-<hash>/changeset-<id>

Worktree HEAD'den açılır ve working tree'nizin güncel hâline getirilir: commit'lenmemiş düzenlemeleriniz ve takip edilmeyen dosyalarınız geçici bir index üzerinden aktarılır, böylece kendi staging alanınıza hiç dokunulmaz. Ignore edilen dosyalar aktarılmaz: virtual environment, build çıktısı, .env gibi.

Repo olmayan bir çalışma alanında hazırlık ağacı, isteğinizde adı geçen dosyaların .ivralo/changesets/<id>/ altındaki bir kopyasıdır. Hiçbir dosya adı geçmeyen bir istek, tur çalışmadan reddedilir.

Orada neler çalışır

Turun çalışma alanında yaptığı her şey hazırlık ağacında olur: dosya araçları, shell, Python worker'ı, kontroller, indirmeler. Changeset'in değiştirdiği bir dosya okunduğunda çıktı [staged: ...] ile başlar. Düzenleme diyaloğundaki where satırı da düzenlemenin changeset'e yazılacağını belirtir. Her düzenleme yine her zamanki gibi onay ister.

Üç şey hâlâ gerçek ağacınıza bakar ve bunu en başta belirtir: dil sunucusu araçları, kod indeksi ve okuma yüzeyi. Sembol düzenlemeleri ve formatter gerçek ağacınızda dil sunucusu üzerinden çalıştığı için changeset açıkken reddedilir. Bunların yerine edit_file hazırlık ağacındaki dosyayı değiştirir.

Hazırlık ağacında doğrulama

verify_changes, IVRALO.md'de tanımlı komutları sizin ağacınızdan okur ve hazırlık ağacını çalışma klasörü yaparak çalıştırır. Ortam sizinkiyle ortaktır: shell'in izin verilen değişkenleri ve PATH'iniz. Hiçbir şey kurulmaz ya da link'lenmez. Gerçek çalışma alanınızdaki bir ortama ihtiyaç duyan komutlar için IVRALO_REAL_TREE gerçek çalışma alanınızın yolunu verir.

Bağımlılıklarınız değişmediği sürece bu yöntem hem hızlıdır hem de doğru sonuç verir. Changeset bir bağımlılık manifest'ine dokunduysa rapor bunu başlığın hemen ardından belirtir ve sonuç, başında kimse yokken uygulama kararında hesaba katılmaz. Manifest; tanımlı install komutunda adı geçen bir dosya, IVRALO.md'nin kendisi ya da sizin listelediğiniz herhangi bir dosyadır:

# Dependencies

- uv.lock
- requirements/*.txt

Uygulamak, atmak ya da bekletmek

Oturumda bir tur bitince diff görüntüleyici changeset'i göstererek açılır.

TuşNe yapar
lAğacınıza uygular
xOnay aldıktan sonra atar
qHazırda bekletir; /changeset onu yeniden açar

Bekleyen bir changeset varken yazdığınız sonraki mesaj aynı changeset üzerinde devam eder. Boş bir changeset bir notla atılır.

Uygulama öncesinde changeset'in değiştirdiği her dosya, hazırlandığı andaki hâliyle içerik bazında karşılaştırılır. Bu arada bu dosyalardan birini değiştirdiyseniz (düzenlediyseniz, oluşturduysanız ya da sildiyseniz) hiçbir şey yazılmaz: uygulama PATCH_CONFLICT ile tamamen reddedilir ve görüntüleyici iki değişikliği yan yana gösterir. Bu durumda yalnızca x seçeneği sunulur. Merge yapılmaz, tahmin yürütülmez: ya atarsınız ya da bekletip elle çözersiniz. Çakışma yoksa changeset tek seferde uygulanır, geçmiş değiştirdiği her dosyanın bir sürümünü saklar ve değişiklikler panelinde onun için tek bir değişiklik kaydı görünür.

Atmak ağacınızı byte'ı byte'ına olduğu gibi bırakır.

Canlı bir turun açık tuttuğu bir changeset, hiçbir istemci tarafından turun elinden alınıp uygulanamaz ya da atılamaz. Onu tutan süreç artık yoksa ivralo changeset release <id> bu işareti temizler, böylece changeset uygulanabilir ya da atılabilir.

Başında kimse olmayan çalıştırmalar

ivralo ask --changeset ve API'deki "changeset": "auto" değeri tek bir kurala uyar:

Doğrulamanın sonucuNe olur
Geçti, klasör güvenilir, allow_tools'ta edit_file varUygulanır
BaşarısızAtılır
Değerlendirilemeyen her durum: hiçbir komut tanımlanmamış, bir kontrol reddedilmiş, bir manifest değişmiş ya da çalışma alanı bir doküman çalışma alanıHazırda bekletilir; sonradan nasıl uygulanacağı ya da atılacağı yazdırılır

--keep-changeset (API'de "keep") hiçbir zaman uygulamaz. ivralo ask --format json'ın JSON sonucunda bir changeset nesnesi bulunur: id'si, landed, dropped ya da kept durumu, nedeni, dosyaları, bekletilen bir changeset'in nerede hazırlandığı, reddedilen bir uygulamanın çakışmaları ve ağacınızda changeset dışında değişen dosyalar.

Komut satırından ve API'den

ivralo changeset list            # hazır bekleyen changeset'ler (--json)
ivralo changeset show [id]       # birinin dosyaları ve hunk'ları (--json)
ivralo changeset land [id]       # uygula, ya da iki tarafı yazdırıp 1 ile çık
ivralo changeset drop [id] -y    # sormadan at
ivralo changeset release <id>    # artık çalışmayan bir turun işaretini temizle

Id'nin baştaki birkaç karakterini vermeniz yeterli. Id vermezseniz hazırda bekleyen changeset kullanılır.

Yerel API'de (ivralo serve) aynı işlemler bulunur:

RouteNe yapar
GET /changesetsHazırda bekleyen changeset'ler
POST /changesets/{changeset}/landBirini uygular
POST /changesets/{changeset}/dropBirini atar
POST /changesets/{changeset}/releaseArtık var olmayan bir turun işaretini temizler

Bir plan changeset değildir: dalgalarının checkpoint'leri, coder'larının da kendi worktree'leri vardır (Plan modu). API ikisini birden isteyen bir isteği reddeder.