2009-06-24 17 views
5

Belirli bir etiketle etiketlenmiş, ancak ayarlanmış başka herhangi bir etiket içermeyen dosyaları ClearCase içinde bulmak istiyorum. ÖrneğinClearCase: Tam olarak belirli bir etikete sahip dosyaları bul ve daha fazla değil

, böyle etiketli dosyaları varsa:

file1 LBL_A, LBL_B 
file2 LBL_A 

Bana sadece file2 değil dosya1 veren bir sorgu olsun isterim.

Cleartool bulmak için bunu yapmanın bir yolu var mı? Bu tek bir sorgu ile yapmak mümkün değilse, ben de birkaç adımda bunu yapmak için herhangi bir fikir için mutlu olurdu (Ben bir perl betiğinden cleartool çağırıyor olacağım, bu yüzden dosya listelerini kaydetmek kolay olacak geçici olarak ve daha fazla komut çalıştırabilirsiniz.

Çok önceden teşekkürler!

Oca

+0

Sadece güncellenen benim komut satırları için – VonC

cevap

6

LBL_A size sonra perl kontrol edebilir veya filtre edebilirsiniz çıktı olarak

file1: (LBL_A, LBL_B) 
file2: (LBL_A) 

vermelidir

cleartool find /some/dir -version 'lbtype(LBL_A)' -print | xargs cleartool describe -fmt "%n: %l" 

çalıştıran istediğiniz (yalnızca) etikettir varsayarsak sed -n 's/\(.*\): (LBL_A)/\1/p' (dosya isimlerinde herhangi bir virgül olmadığı varsayılarak).

Güncelleme:. VonC doğru işaret ettiği gibi, yukarıdaki komut olarak bu run işlemek için boşluk olan dosyalar için başarısız olur: boş ASCII içine yeni satır çevirecek

cleartool find ... -print | tr '\012' '\000' | xargs -0 cleartool .... 

ve sonra Xargs olarak kullanıp var sınırlayıcı.

+0

@hlovdal öğesinin yerine sürümleri göstererek bir şey kaçırmadınız (yaptığım gibi). Az önce reddedildi ve yazımı yeniden yazdım :) – VonC

+0

@hlovdal Mesajımı düzeltir ve sonucu filtrelemek için başka bir basit yol öneririm. Gönderiniz tam olarak doğru olduğu için: +1 – VonC

+0

Teşekkürler, tam ihtiyacım olan şey bu! – Jan

2

hlovdal's answer ihtiyacınız daha bu durumda, daha fazla eleman bulmak zorunda ve sonra (bütün ClearCase find features rağmen) filtrelemedikçe, göstermektedir.

Not:

cleartool find . -type f -element 'lbtype_sub(LBL_A)' -print 

size verebilir doğrudan elemanları (bu durumda ilginç olmayabilir ve değildir versiyonu). Versiyonu -version ve aşağıda açıklandığı gibi bir format direktifiyle bulabilirsiniz. fmt_ccase yardımıyla

, almak için çıktı uyarlayabilirsiniz kesin sizin perl komut gitmek gerekenleri:

cleartool find . -type f -element 'lbtype_sub(LBL_A)' -exec 'cleartool describe -fmt "%En %Cl\n" \"$CLEARCASE_XPN\"' | grep -v "," 
  • -fmt "%En %l\n"tam yolunu gösterecektir öğe (sürüm:/a/b/myFile @@/main/myVersion yerine) => /a/b/myFile'. the ' \ n` satır başına bir sonuç alın.
  • -version ve -fmt "%n %l\n" sürümü
  • \"$CLEARCASE_XPN\" gösterir: çift tırnak versiyonunun uzun yol çalışmaya devam eder adında boşluk içeren bir dosyayı sağlamak bulundu arount.
  • grep -v ",": etiket tüm listesini görüntüleyen kaçının: Herhangi virgül varsa, o "birden çok etiket"
  • %Cl anlamına gelir. Her neyse, birden fazla varsa, sen ilgilenmiyorsun!

Yani, tam sürümü bulmak için:

cleartool find . -type f -version 'lbtype_sub(LBL_A)' -exec 'cleartool describe -fmt "%n %Cl\n" \"$CLEARCASE_XPN\"' | grep -v ","|awk '{sub(/ \(.*/,"");print}' 

Not: unix sözdizimi ile
yukarıdaki çalışır. Pencerelerin sözdizimi, yalnızca bir (doğru) etiketle dosyaların sürümünü listeleyecek olan .

  • awk '{sub(/ \(.*/,"");print}' "myFile @@/ana/myVersion" içine "[email protected]@/main/myVersion (LBL_A)" dönüştürecek
+0

Eh, bir şey mi özledim? Soru "başka etiketler" diyor, sadece LBL_B'yi açıkça test ediyorsunuz. – hlovdal

+0

@hlovdal Doğru, ve gerçekten OP yanıt vermek için yanıtımı yeniden yazdı;) – VonC

+0

size de teşekkürler - çünkü versiyona ihtiyacım var, hlovdal'ın versiyonu bana daha iyi uyuyor, ama aynı zamanda fmtccase'in bağlantısı da çok yardımcı oldu ! – Jan

5

doğrudan boruya gerek kalmadan bunu yapabilirsiniz:

cleartool find . -ver "lbtype(LBL_A) && !lbtype(LBL_B)" -print 
+0

Bunun gerçekten işe yarayıp yaramadığını kimse doğruladı mı? Cleartool çıktısını filtrelemekten çok daha verimli bir çözüm gibi geliyor. Tabii ki, bu etiket tam olarak hangi etiketlerin ortaya çıkabileceğini bilmedikçe, bu soruya tam olarak cevap vermiyor. – clacke