Mercurial Hook - Ändern einer Commit-Nachricht vor dem Commit

8

Bearbeiten Dieser grundlegende Haken wurde erstellt, um den Zweignamen & amp; Commit Message BugID Mismatches. Ссылка

Im Grunde ist die Idee, dass der Hook "BugID: xyz" an das Ende der Commit-Nachrichten anhängen sollte, wenn der Zweigname wie bug_123 oder feature_123 ist. Allerdings habe ich Probleme, herauszufinden, wie dies zu tun ist, da die meisten Beispiele von pretxncommit-Personen die Änderungssatzbeschreibung nicht mutieren wollen.

Das habe ich bisher. Es aktualisiert .hg / commit.save mit der richtigen Nachricht, aber diese Nachricht wird niemals zum Commit übertragen. Es wird jedoch im Standard-Meldungsfeld (tortoisehg) des nächsten Commits angezeigt. Vielleicht ist pretxncommit nicht der richtige Haken?

Kann ich einen Precommit-Hook verwenden, die Datei commit.save und repo ['tip']. branch () lesen und ändern Wenn ja, woher würde ich den Namen des Zweiges holen?

%Vor%

Wenn jemand aus dem Fogbugz / Kiln-Team dies sieht ... Bitte aktualisieren Sie Ihre Software, um den Branchennamen zu lesen. Ich sollte nicht unbedingt eine BugID: x auf jedes verdammte Commit setzen. Vor allem verschwendet es meine Zeit. Zweitens, wenn eine Fall-ID falsch eingegeben wird, wird es nicht auf dem Fehler angezeigt, ohne viel herumzualbern. Viele Entwickler verwenden einen Zweig pro Fehler / Feature-System. Es ist die Unternehmenspolitik, in der ich arbeite. Fogbugz saugt.

    
Keyo 29.04.2012, 23:47
quelle

2 Antworten

6

Ich denke, das Problem hier ist, dass der pretxncommit Hook an einem Punkt ausgeführt wird, an dem man wirklich nichts mehr ändern kann. Und Sie können die Commit-Nachricht zu diesem Zeitpunkt auch nicht wirklich erhalten, da sie nicht auf ein zugreifbares Context-Objekt gesetzt ist.

repo['tip'].description() bezieht sich nicht auf das Changelog, das festgeschrieben wurde, sondern auf den alten Tip, der bereits committed ist, das wäre repo[None] , aber wenn man in der Quelle entdeckt, ist es nicht das gleiche Kontextobjekt, das beibehalten wird zeigen Sie darauf, es zu ändern.

Der einzige Weg, den ich finden könnte, wäre, einen früheren Hook zu verwenden - wie precommit - und monkeypatch die Methode commitctx des Repository wie folgt:

%Vor%

Auf diese Weise kann cou direkt vor dem Commit auf das Kontextobjekt zugreifen.

    
mata 06.05.2012 00:19
quelle
5

mata's Antwort ist clever, aber es gibt tatsächlich eine eingebaute Möglichkeit, dies zu tun, wenn Sie bereit sind, Ihre eigene Erweiterung zu schreiben (es ist ) wirklich einfach , wenig mehr als nur die Hook-Funktionalität schreiben, die Sie sowieso schreiben wollten).

Der "richtige" Weg besteht darin, das Repository in reposetup zu untergliedern, wie im Docstring von mercurial.extensions.wrapfunction gezeigt (weil wrapfunction für Repos nicht der richtige Weg ist, dies zu tun:

%Vor%

Zum Beispiel würde Ihre Erweiterung so aussehen (abgespeckt):

%Vor%

Ich habe das getestet und es funktioniert gut. Sie können die Erweiterung verwenden, indem Sie sie in einer Python-Datei speichern, z. B. /some-path/fogbugz.py , und sie in der Gruppe extensions in Ihrem hgrc:

hinzufügen %Vor%     
brianmearns 29.10.2013 14:56
quelle