[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