[Gelistirici] pisi'de dosya tipinin analizi

Ozan Çağlayan ozan at pardus.org.tr
15 Eyl 2009 Sal 12:00:24 EEST


Selam,

pisi şu anda özel dosyaları ayıklamak ve DSO'ları strip etmek için
install dizinindeki her bir dosya için fork()'layarak file komutunun
çıktısını elde ediyor.

Aşağıdaki yama bunun yerine file paketinden gelen Python modülünü
kullanmasını sağlıyor.

Cache cold iken (a.k.a echo 3 > /proc/sys/vm/drop_caches), inşa edilmiş
ve yerleştirilmiş bir kernel kaynak paketinden çıkan pisi paketlerinin
oluşturulması 10 dakika 40 saniye sürerken, yamayla bu süre 7 dakika 11
saniyeye düşüyor.

Hani olmaz ya ama sağlam olsun diye tüm sistemim üzerinde file çıktısı
ve python modülünden alınan tip bilgisini karşılaştırıyorum şu anda.
Eğer tutarlı olursa iyi bir hız kazancı sağlayıp fork()'un scheduler'a
falan da bindirdiği yükten kurtulabiliriz (kernel paketi için 53210
dosyadan bahsediyoruz mesela)

Ha yama ayrıca gereksiz yere debug modunda ekrana [NoStrip]'leri basmayı
da kaldırıyor..


===================================================================
--- build.py    (revision 25702)
+++ build.py    (working copy)
@@ -131,7 +131,6 @@
     for exclude in excludelist:
         if p.startswith(exclude):
             strip = False
-            ctx.ui.debug("%s [%s]" %(p, "NoStrip"))

     if strip:
         if pisi.util.strip_file(filepath, fileinfo, outputpath):
@@ -838,13 +837,20 @@

     def file_actions(self):
         install_dir = self.pkg_install_dir()
+
+        import magic
+        ms = magic.open(magic.MAGIC_NONE)
+        ms.load()
+
         for root, dirs, files in os.walk(install_dir):
             for fn in files:
                 filepath = pisi.util.join_path(root, fn)
-                fileinfo = os.popen("file \"%s\"" % filepath).read()
+                fileinfo = ms.file(fn)
                 strip_debug_action(filepath, fileinfo, install_dir,
self.actionGlobals)
                 exclude_special_files(filepath, fileinfo, install_dir,
self.actionGlobals)

+        ms.close()
+



Gelistirici mesaj listesiyle ilgili daha fazla bilgi