[Gelistirici] [PATCH] --use-quilt
S.Çağlar Onur
caglar at pardus.org.tr
6 Nis 2007 Cum 20:46:49 EEST
Selamlar;
Büyük kısmımız bir paketin yama yönetim akışında bugüne kadar aşağı yukarı şu
işlemleri yapıyordu;
pisi build --unpack pspec.xml -d
cp /var/pisi/X/work/X /var/pisi/X/work/X.orig
cd /var/pisi/X/work/X
...yama ekle/yama değiştir v.s v.s v.s...
diff -Nur X.orig X
...yamayı al paketin files/ klasörüne koy, pspec.xml içine yaz...
pisi build pspec.xml -d
Veya bir pakete yapılan n tane yamanın bir tanesini devre dışı bırakmak/veya
yeni sürümle sync etmek için
...pspec.xml içinden sil/comment out et...
pisi build --unpack pspec.xml -d
cp /var/pisi/X/work/X /var/pisi/X/work/X.orig
cd /var/pisi/X/work/X
...yama ekle/yama değiştir/yama sync et/ v.s v.s v.s...
diff -Nur X.orig X
...yamayı al paketin files/ klasörüne koy, pspec.xml içine yaz...
pisi build pspec.xml -d
Gibi yorucu, uzun (özellikle cp ve rediff kısmı) bir sürü işlem yapmak zorunda
kalıyordu. Özellikle birbirini etkileyen yamalarda bu işleri el ile yapmak
neredeyse imkansız hale geliyordu.
Taki bir süredir depoda kendi ve GUI'si olan quilt [1] isimli araç ile
tanışana kadar. quilt Andrew Morton'un zamanında 1000 sayılarına ulaşan
kernel yamalarını maintain edebilmek için yazmaya başladığı daha sonrada
maintainer'lığını başka birinin aldığı bir proje. Halen aktif olarak birçok
projede de kullanılıyor (örn yoğun olarak çekirdek için)
Kabaca bir versiyon kontrol yönetim sistemi kullanmadan yamaları
push/pop/refresh/import/export/fork gibi temel işlemlerle kod ağacına
uygulamaya/geri almaya/yenilemeye yarıyor (bir seri shell scripti aslında),
birbirinin etkileyen yamalarda işlemleri bu yamalar tek yamaymış gibi
yapabiliyor v.s. v.s (hallice faydalı bir araç). Temel kullanımı için kısa ve
öz olarak şuraya göz atabilirsiniz [2]
İşin girizgah bölümünden sonra ekteki yama build işlemi için kullanılan
pisi/util.py do_patch fonksiyonuna GNU Patch yerine quilt de kullanma desteği
ekliyor [Aynı yamanın pisi-catbox ve pisi-1.1 branchları için olanları da
mevcut :P, 1.1 için olanı ayrı bir e-posta'da atıp başka bir konu daha
acacağım].
Gelelim --use-quilt bize ne kazandırıyor bölümüne, örnek bir akış ile
anlatmaya çalışayım;
[caglar at zangetsu][~/svk/devel/system/base/jpeg]> sudo pisi build
pspec.xml --unpack --use-quilt -d
DEBUG: PiSi API initialized
Paketler çalışma dizinine yazılıyor.
Last state was unpack
Arşiv açılıyor... açıldı (/var/pisi/jpeg-6b-5/work)
* Yama uygulanıyor: 05_all_jpeg-Makefile.patch
DEBUG: "quilt import -p 1 -n
05_all_jpeg-Makefile.patch /home/caglar/svk/devel/system/base/jpeg/files/05_all_jpeg-Makefile.patch"
için dönüş değeri 0
DEBUG: "quilt push" için dönüş değeri 0
* Yama uygulanıyor: 06_all_jpeg-libtool.patch
DEBUG: "quilt import -p 1 -n
06_all_jpeg-libtool.patch /home/caglar/svk/devel/system/base/jpeg/files/06_all_jpeg-libtool.patch"
için dönüş değeri 0
DEBUG: "quilt push" için dönüş değeri 0
* Yama uygulanıyor: 07_all_jpeg-LANG.patch
DEBUG: "quilt import -p 1 -n
07_all_jpeg-LANG.patch /home/caglar/svk/devel/system/base/jpeg/files/07_all_jpeg-LANG.patch"
için dönüş değeri 0
DEBUG: "quilt push" için dönüş değeri 0
* Yama uygulanıyor: 30_all_jpeg-crop.patch
DEBUG: "quilt import -p 1 -n
30_all_jpeg-crop.patch /home/caglar/svk/devel/system/base/jpeg/files/30_all_jpeg-crop.patch"
için dönüş değeri 0
DEBUG: "quilt push" için dönüş değeri 0
* Yama uygulanıyor: 50_all_jpeg-Debian-rdjpgcom_locale.patch
DEBUG: "quilt import -p 1 -n
50_all_jpeg-Debian-rdjpgcom_locale.patch /home/caglar/svk/devel/system/base/jpeg/files/50_all_jpeg-Debian-rdjpgcom_locale.patch"
için dönüş değeri 0
DEBUG: "quilt push" için dönüş değeri 0
* Yama uygulanıyor: 51_all_jpeg-Debian-jpeglib.h_c++.patch
DEBUG: "quilt import -p 1 -n
51_all_jpeg-Debian-jpeglib.h_c++.patch /home/caglar/svk/devel/system/base/jpeg/files/51_all_jpeg-Debian-jpeglib.h_c++.patch"
için dönüş değeri 0
DEBUG: "quilt push" için dönüş değeri 0
* Yama uygulanıyor: 52_all_jpeg-Debian-rdppm.patch
DEBUG: "quilt import -p 1 -n
52_all_jpeg-Debian-rdppm.patch /home/caglar/svk/devel/system/base/jpeg/files/52_all_jpeg-Debian-rdppm.patch"
için dönüş değeri 0
DEBUG: "quilt push" için dönüş değeri 0
DEBUG: PiSi API finalized
Buraya kadar bir fark yok, kodu yamalamak için sadece quilt kullandık patch
yerine.
zangetsu jpeg-6b # quilt series
05_all_jpeg-Makefile.patch
06_all_jpeg-libtool.patch
07_all_jpeg-LANG.patch
30_all_jpeg-crop.patch
50_all_jpeg-Debian-rdjpgcom_locale.patch
51_all_jpeg-Debian-jpeglib.h_c++.patch
52_all_jpeg-Debian-rdppm.patch
Diyelim 52_all_jpeg-Debian-rdppm.patch isimli yama arkasında HUNK bırakıyordu
zangetsu jpeg-6b # quilt refresh
Refreshed patch 52_all_jpeg-Debian-rdppm.patch
artık bırakmıyor.
52_all_jpeg-Debian-rdppm.patch isimli yamayı geri alalım;
zangetsu jpeg-6b # quilt pop
Removing 52_all_jpeg-Debian-rdppm.patch
Restoring rdppm.c
Now at patch 51_all_jpeg-Debian-jpeglib.h_c++.patch
Hangi yama kimi etkliyor görmek isteyelim;
zangetsu jpeg-6b # quilt graph --all
digraph dependencies {
n0 [label="05_all_jpeg-Makefile.patch"];
n1 [label="06_all_jpeg-libtool.patch"];
n2 [label="07_all_jpeg-LANG.patch"];
n0 -> n1 [len="1.39"];
n1 -> n2 [len="1.39"];
}
Koda bir seri değişiklik yapmak isteyelim;
zangetsu jpeg-6b # quilt new pardus.patch
Patch pardus.patch is now on top
zangetsu jpeg-6b # quilt edit jcsample.c
File jcsample.c added to patch pardus.patch
zangetsu jpeg-6b # quilt diff -z
Index: jpeg-6b/jcsample.c
===================================================================
--- jpeg-6b.orig/jcsample.c 1996-01-07 01:25:54.000000000 +0200
+++ jpeg-6b/jcsample.c 2007-04-06 20:36:32.613583302 +0300
@@ -1,5 +1,6 @@
/*
* jcsample.c
+ * Pardus Rocks!
*
* Copyright (C) 1991-1996, Thomas G. Lane.
* This file is part of the Independent JPEG Group's software.
zangetsu jpeg-6b # quilt refresh
Refreshed patch pardus.patch
Sonra bunu beğenmeyip geri alalım
zangetsu jpeg-6b # quilt pop
Removing pardus.patch
Restoring jcsample.c
Now at patch 52_all_jpeg-Debian-rdppm.patch
Ve bunların hepsini ve daha fazlasını kodun bir kopyası v.s olmadan yapalım :)
P.S: util/uncompress bir hata içeriyor, uncompress ettiği şeyin adını
değiştimiyor! Mesela pciutils paketi içinde files/updated-pciids.patch.bz2
/var/pisi/ altına aynı isimle fakat unpack edilmiş olarak konuyor.
Index: pisi/util.py
===================================================================
--- pisi/util.py (revision 13315)
+++ pisi/util.py (working copy)
@@ -468,6 +468,7 @@
os.path.basename(patchFile))
else:
filePath = os.path.basename(patchFile)
+ filePath = filePath.split(".")[0]
if compressType == "gz":
from gzip import GzipFile
gibi birşey gerekiyor. Yama bu kısmı bu sebeple içeriyor :)
Faik?
[1] http://savannah.nongnu.org/projects/quilt
[2] www.suse.de/~agruen/quilt.pdf
Saygılar
--
S.Çağlar Onur <caglar at pardus.org.tr>
http://cekirdek.pardus.org.tr/~caglar/
Linux is like living in a teepee. No Windows, no Gates and an Apache in house!
-------------- sonraki bölüm --------------
A non-text attachment was scrubbed...
Name: quilt.patch
Type: text/x-diff
Size: 2616 bytes
Desc: kullanılamıyor
URL: <http://liste.pardus.org.tr/gelistirici/attachments/20070406/38c12d94/attachment.patch>
-------------- sonraki bölüm --------------
A non-text attachment was scrubbed...
Name: kullanılamıyor
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part.
URL: <http://liste.pardus.org.tr/gelistirici/attachments/20070406/38c12d94/attachment-0002.pgp>
Gelistirici mesaj listesiyle ilgili
daha fazla bilgi