[Gelistirici] Ters bağımlılıklar
Fatih Aşıcı
fatih at pardus.org.tr
21 Mar 2010 Paz 18:23:01 EET
Selamlar,
libproxy'nin ABI kırması sonrası bir sorunu farkettim. Pisi'nin şu anki hali,
bir paketi güncellemeden önce ters bağımlılıklarının kırılıp kırılmadığını
kontrol ediyor. Bu oldukça normal; ancak ters bağımlılıkları bulmak için
packagedb'ye (yani depo index'inden gelen bilgilere) bakıyor. Oysa bakması
gereken yer installdb. Çünkü kırılan paket sistemde yüklü olandır.
"reverseDependencyUpdate" için de aynı durum geçerli. Bu hatanın uzun zamandır
farkındaydım ve düzeltmeyi düşünüyordum; ancak bugün ilgili koda baktığımda
yapacağım değişikliğin başka bir yan etkisini gördüm.
libproxy örneği üzerinden gideceğim. libproxy ABI kırdı ve bunun üzerine
"reverseDependencyUpdate" eklenerek ters bağımlılıkların güncellenmesi
sağlandı; fakat bir sorun vardı: Bazı paketlerin libproxy bağımlılığı
yazılmamıştı. Bağımlılıklar sonradan eklendi ve index'e bu yeni bağımlılık
bilgisi girdi. Pisi'nin şu anki hali packagedb'ye baktığı için bu paketlerin
ters bağımlılık olduğunu algılıyor ve güncelleme listesine alıyor. Eğer
installdb'ye baksaydı bu mümkün olmayacaktı.
Yapacağım değişiklikten vazgeçmiş değilim. Her ne kadar yukarıdaki durumu
kurtarıyor da olsa yapılan şey yanlış. Hatta başka bir durumda hataya da neden
olabilir. Aşağıdaki durumu düşünün:
A-1 paketi B-1 paketine bağımlı olsun. Depoda ise A'nın yeni sürümü A-2
bulunsun ve bu yeni sürüm B bağımlılığını atmış olsun. B-2'nin ABI kırdığını
ve kullanıcının B'yi güncellemek istediğini düşünün.
Pisi'nin şu anki haliyle güncelleme yapıldığında packagedb'ye göre B'nin ters
bağımlılıkları arasında A bulunmadığı için A güncellenmeyecek. Bu durumda B
ABI kırdığı için kurulu olan A çalışmayacak. Pisi eğer installdb kullansaydı
böyle bir sorun olmayacaktı.
İlk durumda (libproxy örneği) hata, eksik bağımlılık yazılmasından ötürü paket
bakıcısına ait. Diğer örnekte ise pisi. Bu nedenle pisi'yi installdb'ye
bakacak şekilde düzeltmeyi düşünüyor ve eksik bağımlılık yazılmaması konusunda
depoda daha dikkatli olmamız gerektiğini düşünüyorum. Olası bakıcı hatalarını
gizlemek için pisi'yi bu durumda bırakmamız herhalde yanlış olur.
Gelistirici mesaj listesiyle ilgili
daha fazla bilgi