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

War es hilfreich?

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!
So

, 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top