2017-06-26 4 views
0

Ich arbeite an einem Projekt, bei dem die Copyright-Header obligatorisch sind. Alle Dateien haben sie aber vor kurzem die Richtlinien für die Header geändert und müssen daher aktualisiert werden. Ich arbeite auf Linux-Plattform (aber Dateien sind auch über Windows zugänglich). Einige Dateien haben die neuen Header (müssen aber im Jahr-Feld aktualisiert werden), einige haben den alten Header, manche haben es auf eine grobe Art und Weise nicht dem Standard angepasst (ja, sie sind leider durchgereist) und einige nicht t haben es überhaupt (ja, diese auch durch Überprüfung).Copyright-Header über geänderte Dateien in einem Projekt aktualisieren

Daher hatte ich drei Anforderungen:

  1. ändern die alten Header auf die aktualisierten Header zusammen mit aktualisiertem Jahren

  2. Für diejenigen, die neue Header haben, deren Datum (genauer Jahr) muss aktualisiert werden.

  3. hinzufügen Header zu denen, die jede

Ich will nicht nicht über diese in das Projekt für alle Dateien tun, nur diejenigen, die ich für meine Verlegenheit bin zu ändern. Mit anderen Worten, nur Dateien, die bei der Ausgabe des Git-Status angezeigt werden. Die möglichen Szenarien, während das Datum der Aktualisierung können sein:

  1. 2011-2014, 2016 ==> 2012-2014,2016-2017
  2. 2011-2012, 2014-2015 ==> 2011-2012, 2014-2015, 2017
  3. 2011-2016 ==> 2012-2017
  4. 2011-2017 ==> Keine Änderung

auch ist es .java, CPP, .c, .h und .xml-Dateien im Projekt.

Ich sah this, aber es scheint nur Kopfzeilen hinzuzufügen. Ich bin nicht so gut in sed und awk. Ich ging durch this, aber es nimmt einen Standardanfang aller Dateien und this an, aber es bezieht auch einen allgemeinen Titel mit ein. Ist es möglich, dies zu tun?

EDIT: Ich akzeptierte @Hoalls Antwort und tat es manuell, da es mit sed zu tun schien zu mühsam für jetzt!

Antwort

1

Unter Linux können Sie somthing wie folgt zu tun:

for i in `git diff --name-only --cached`; do echo $i; done 

Ersetzen Sie den Echo-Befehl mit einem sed, awk oder so den kompletten Header innerhalb der Datei zu ersetzen.

EDIT:

Für den sed Teil sehen sed: replace a block of text

+0

Dank. Das bringt mich einen Schritt voraus. Nun zum sed/awk Teil. – Zoso

+0

Ich habe meine Antwort aktualisiert. Passt es jetzt? – Hoall

+0

Danke für deinen Link, aber nein, es hilft nicht viel. Dieser Link behandelt auch Dateien mit einem Standardformat zum Ersetzen von Text. Ich brauche etwas, das Text bedingt modifiziert (die Bedingungen, die ich aufgelistet habe). – Zoso

Verwandte Themen