2009-10-27 34 views
13

Bir depoya bağlanan, işlem listesini indirip yerel olarak saklayan bir PHP aracı yapıyorum. Ancak, belirli depoların BÜYÜK olması ve günlük bekleme süreleri ile bekleme süreleri ve olası zaman aşımları/hatalarını yakalama olasılığından dolayı, her bir taahhüt mesajını asenkron istekleri kullanarak indirmek istiyorum.SVN: Verilen yol için revizyon numaralarının listesini almak mümkün mü?

Yani, düzeltme geçmişinde bir başlangıç ​​ve bitiş noktaları vardır ve bu gibi tüm günlükleri yakala:

svn log -r <from_revision>:<to_revision> <REPO_URL>

... ve muhtemelen bir XML dosyası ile sona erecek Bu kadar büyük, uzun zaman ve ayrıştırmak için çok sayıda kaynak ve uzun zaman depolamak için uzun zaman alacaktır.

Ben başlangıç ​​ve bitiş noktasını biliyorsanız, ben tek revizyonlar bir kapmak için bir için() döngü oluşturabilirsiniz: Belirli revizyonlar mevcut olduğu bilmiyorum çünkü

svn log -r <revision> ...

AMA Verilen yol için bir hata mesajı alırım. Uygulamanın güncelleme sırasında bu hatayı görmezden gelmesini sağlayabilirim, ancak kötü bir kesmek ve istekleri yayınlayacak ve yine de yanıtları bekleyecek - ki bu hiç de iyi değil.

  • "Bana bu yolu için revizyon numaralarının listesini ver", OR:
  • "arasında ve bu yol için bana revizyon numaralarının listesini vermek

    Yani, böyle bir şey gerekiyor

ben depo yolu için geçerli revizyonlar bir dizi yapmak ve onları teker teker almak mümkün olacaktır Bu şekilde. önceden

Tüm öneriler, bekliyoruz teşekkürler .

+0

SVN CLI yürütülebilirliğini çağırmak yerine SVN bağlamaları kullanmayı düşündünüz mü? IIRC, zaten PHP için varlar. Çok daha programlı ve daha az hata eğilimli bir arayüz olacaktır. – rmeador

cevap

9

En iyi bahsinizin, verilen bir dizin veya dosya için ilk 100 günlükleri alacağınız aşağıdaki svn log -l 100 0:{$newest} .\ yapmak olacağını düşünüyorum. Daha sonra geri gönderilen son revizyon numarasını okuyun, sonra her bir istekle 99 yeni kayıt girişi elde edeceğinizden, ancak hepsini alamayacağınız bir sonraki 100 svn log -l 100 {$last_ret_log}:{$newest} .\

'u isteyin.

+0

Oh, ilk gözden geçirmenin ne olduğunu bilmediğinizden, #: # bitini bırakmak isteyebileceğiniz ilk kepçeye eklemeliyim. ayy. –

+0

Bu, iyi bir uzlaşma gibi geliyor. Yineleme başına çok sayıda günlük alın, ancak bunlardan çok fazla alma. BTW, 'svn günlüğü', svn günlüğü 1: HEAD ' olarak, depo içindeki herhangi bir yol için kullanılabilir, ancak SVN, yalnızca içinde bulunan yolları etkileyen 1 ve HEAD düzeltmesi arasındaki günlükleri döndürecek kadar akıllı olacaktır. İstenen . –

+0

Yararlı bilgi. Genellikle tüm subversion gereksinimleri için sürümleri kullanıyorum .. ancak yönetim vermek için svn günlüklerini ayrıştıran birkaç betiğe sahibim. :) –

2

svn list'a bakmak isteyebilirsiniz. Yani amaç için :


$ svn list --verbose file:///var/svn/repos 
    16 sally   28361 Jan 16 23:18 README.txt 
    27 sally    0 Jan 18 15:27 INSTALL 
    24 harry    Jan 18 11:27 examples/ 

Bu, herhangi bir dosyanın son (baş) revizyon listeler.

+0

Teşekkürler, ancak bu tüm revizyonları listelemiyor, sadece her yol için son olanları. –

3

Subversion sunucunuzdaki havuz ağacına erişiminiz varsa, revizyon numaralarının listesini almak için svnlook history'u kullanabilirsiniz.

Daha fazla ayrıntı http://svnbook.red-bean.com/en/1.1/re49.html adresinde bulunabilir.

+0

Yikes, neredeyse sorunu çözdünüz, ancak tek sorun' svnlook'un URL'lerle çalışmadığı . Bu uygulama çoğunlukla, URL'leri kullanarak veri uzak depolarını almak için kullanılacak, yollar değil :( –

+0

Teşekkürler! Bu benim sorunumu çözmüş olabilir. Bu, TortoiseSVN'nin bir yoldaki Günlüğü Göster'i tıkladığınızda döndüğü aynı devirleri döndürüyor mu? – styfle

2
svn log url -l limitNumber - r fromReversion:toReversion 

U (sonraki yeni (büyük) reversion bulmak istiyorsanız toReversion daha

svn log url -l 4 -r someVersion:1 
or 
    svn log url -l 4 -r 99: 3 

fromReversion fazla örneğin sonraki yaşlı (küçük) reversiyon (versiyon) bulmak istiyorsanız versiyon)

svn log url -l 4 -r someVersion:head 
or 
    svn log url -l 4 -r 3:99 
    fromReversion lower than toReversion 
3

Benzer bir sonuç almaya çalışıyorum. Sadece belirli bir dal için tüm revizyon numaralarını istiyorum.

Aşağıdakileri oldukça yararlı buldum.

svn log <svn_server_path> | grep "^r[0-9]\+ | " | cut -d' ' -f1 | cut -c2- > revisions.csv 

Bu, ayrı satırlardaki tüm düzeltme numaralarını içeren bir dosya veriyor.

Umarım siz ya da bir başkası yardımcı bulacaktır.

Bizim repo 25000'den fazla düzeltmeye sahip ve bu dosyayı üretmek için birkaç saniye sürüyor.

İlgili konular