Clearcase: Hier finden Sie Dateien mit genau einem bestimmten Label und nicht mehr
Frage
Ich möchte Dateien in Clearcase finden, die mit einem bestimmten Label gekennzeichnet sind, aber das haben keine andere Etiketten .
Zum Beispiel, wenn ich Dateien wie diese gekennzeichnet:
file1 LBL_A, LBL_B
file2 LBL_A
Ich möchte eine Abfrage haben, die mich nur file2 und nicht file1 gibt.
Gibt es eine Möglichkeit, dies zu tun mit Cleartool finden? Wenn dies nicht möglich ist, mit einer einzigen Abfrage zu tun, würde ich auch für alle Ideen glücklich sein, wie dies in mehreren Schritten zu tun (ich Aufruf Cleartool von einem Perl-Skript würde, so wird es leicht sein, Listen von Dateien zu speichern vorübergehend und führen weitere Befehle auf sie).
Vielen Dank im Voraus!
Jan
Lösung
Unter der Annahme, LBL_A ist die (nur) Label, das Sie laufen möchten
cleartool find /some/dir -version 'lbtype(LBL_A)' -print | xargs cleartool describe -fmt "%n: %l"
geben sollte
file1: (LBL_A, LBL_B)
file2: (LBL_A)
als Ausgabe, die Sie dann in Ihrem Perl-Skript überprüfen oder durch Filter sed -n 's/\(.*\): (LBL_A)/\1/p'
(keine Doppelpunkte in Dateinamen vorausgesetzt).
Update: Wie VonC korrekt ausgeführt hat, über den Befehl für Dateien mit Leerzeichen fehl Um diesen Lauf als Griff.
cleartool find ... -print | tr '\012' '\000' | xargs -0 cleartool ....
die Zeilenumbrüche in ascii übersetzt null und dann xargs verwenden, dass als Trennzeichen.
Andere Tipps
Sie können dies direkt tun, ohne zu Rohr mit:
cleartool find . -ver "lbtype(LBL_A) && !lbtype(LBL_B)" -print
hlovdal Antwort , dass in diesem Fall zeigt, müssen Sie mehr Elemente finden, als Sie brauchen, und filtern sie dann (trotz all der Clearcase finden Features ).
Hinweis:
cleartool find . -type f -element 'lbtype_sub(LBL_A)' -print
könnten Sie direkt die Elemente (und nicht die Version, die in diesem Fall nicht interessant sein kann). Sie können die Version mit -version
und eine Formatierungsanweisung finden, wie unten erläutert wird.
Mit Hilfe von fmt_ccase , können Sie die Ausgabe anpassen bekommen genau , was Ihr perl-Skript müssen weitergehen:
cleartool find . -type f -element 'lbtype_sub(LBL_A)' -exec 'cleartool describe -fmt "%En %Cl\n" \"$CLEARCASE_XPN\"' | grep -v ","
-
-fmt "%En %l\n"
wird den vollständigen Pfad des -Element anzuzeigen . (Statt der Version: / a / b / myFile @@ / main / myversion)=> /a/b/myFile'. the '
\ n 'gewährleisten ein Ergebnis pro Zeile -
-version
und-fmt "%n %l\n"
würde zeigen die Version -
\"$CLEARCASE_XPN\"
: die doppelten Anführungszeichen arount der erweiterte Pfad der Version mit Leerzeichen in seinem Namen wird noch arbeiten, um eine Datei sichern gefunden .
-
grep -v ","
: wenn es irgendein Komma, dass „mehr als ein Etikett“ bedeutet
-
%Cl
: Vermeiden Sie die zeigt alle Liste von Etiketten. Wie auch immer, wenn es mehr als eine ist, sind Sie nicht interessiert!
, für die Suche nach der genauen Version :
cleartool find . -type f -version 'lbtype_sub(LBL_A)' -exec 'cleartool describe -fmt "%n %Cl\n" \"$CLEARCASE_XPN\"' | grep -v ","|awk '{sub(/ \(.*/,"");print}'
Hinweis:
Die oben genannten Arbeiten mit Unix-Syntax. Die Windows-Syntax wäre:
cleartool find . -type f -element "lbtype(LBL_A)" -exec "cleartool describe -fmt \"%n %Cl\n\" \"%CLEARCASE_XPN%\"" | grep -v "," | gawk "{gsub(/ \(.*,"");print}"
, die die Version der Dateien mit nur einer (richtig) Etikettenliste würde.
-
awk '{sub(/ \(.*/,"");print}'
wird "myFile@@/main/myVersion (LBL_A)
" in "myFile @@ / main / myversion" verwandeln