2016-03-30 6 views

Antwort

0

Jede Antwort hängt stark von der Arbeitsumgebung ab (in der Frage nicht angegeben). CVS selbst bietet diese Funktionalität nicht per se, obwohl es eine Lösung unterstützen kann, die den Status eines Checkouts nutzt.

Wenn man die Verwendung einer GNU/Linux- oder ähnlichen Shell-Umgebung annimmt, könnte man ein Skript erstellen, das nur die Dateien prüft, die CVS als lokal modifiziert, nicht festgeschrieben oder nicht hinzugefügt erkennt. Die folgende Lösung ist umgebungsabhängig und ziemlich umständlich, veranschaulicht jedoch das Konzept.

Eine Probe Shell-Sitzung könnte wie folgt aussehen:

$ cvs -nq update 2>/dev/null \ 
> | awk '/^[M?]/ { system(sprintf("stat \"%s\"", $2)) }' - \ 
> | grep ^Modify: \ 
> | sort \ 
> | tail -1 
Modify: 2016-04-27 10:22:35.000000000 -0500 

Diese Befehlsfolge wird am oberen Ende der Kasse laufen, so dass die Ergebnisse umfassen alle Unterverzeichnisse innerhalb dieser Gruppe.

Der Befehl cvs -nq update 2</dev/null generiert einen relativ knappen Bericht über den Dateistatus. Es werden nur lokal geänderte oder nicht festgeschriebene neue Dateien, unbekannte Dateien und Upstream-Dateien angezeigt.

Die 2>/dev/null unterdrückt uninteressante stderr Ausgabe des Befehls cvs.

Die Anweisung awk verwendet einen regulären Ausdruck, um nur die lokal hinzugefügten und lokal geänderten Dateien im Arbeitsbereich zuzuordnen. Es extrahiert dann den relativen Pfad zu der Datei und führt eine Operation stat aus, um Änderungszeit jeder Datei abzurufen.

Die Anweisung grep verwirft uninteressante Ausgabe des Befehls stat.

Ein Befehl sort ordnet die Änderungszeit der Ausgabe vom ältesten zum neuesten Befehl an, und tail -1 zeigt nur die letzte Änderungszeit an.

Der letzte von CVS erkannte "Wechsel" zur Kasse ist im Ergebnis und folgt dem Wort "Ändern:".

Verwandte Themen