Empfohlenes Verfahren für Codeüberprüfungen mit Mercurial

18

Wir haben in der Regel Perforce und SmartBears Code Collaborator verwendet, Big Corpund jetzt werden wir Mercurial auch für bestimmte Projekte verwenden.

Unterstützung für Code Collaborator Mercurial (wir verwenden Version 5) und ich versuche festzustellen, wann die beste Zeit (während des Festschreibens / Push-to-Server-Vorgangs) die beste / effizienteste Zeit für eine Codeüberprüfung ist

Vielen Dank

cbrulak
quelle
Sie sollten wahrscheinlich die beiden Fragen trennen. (a) gehört hier, aber (b) würde wahrscheinlich gehören auf Stackoverflow oder serverfault
blueberryfields
Danke @blueberryfields. Ich habe das Problem tatsächlich behoben. Das Problem lag darin, dass sich die Datei bin / hg.cmd im Pfad befand und nicht die exe.
cbrulak

Antworten:

22

Wir haben in meiner Firma in letzter Zeit fast dasselbe durchgemacht. Folgendes haben wir getan:

  • Wir behalten eine zentrale definitive Kopie aller unserer Repositorys auf einem Server. Wenn Entwickler Code "auschecken" möchten, gehen sie zu diesem Server und klonen von den dortigen Repositorys. Wenn der Entwicklungszyklus abgeschlossen ist, wird der Code ebenfalls in das entsprechende Repository verschoben.

  • Wir trennen stabile Repositorys von Entwicklungs- Repositorys. Der Code muss überprüft werden, bevor er in ein stabiles Repository verschoben wird. (Dies ist von Bedeutung, da wir auch verlangen, dass unsere stabilen Repositorys den Code enthalten, der derzeit in der Produktion ausgeführt wird, und sich nur durch ausstehende Code-Promotions unterscheiden.)

Um die Codeüberprüfung durchzusetzen, haben wir einen pretxnchangegroupHook geschrieben (dokumentiert im HG Book ). Wir machen uns die Tatsache zunutze, dass bei Ausführung dieses Hooks das Repository so angezeigt wird, als ob die Codeänderungen dauerhaft wären, und dass wir gleichzeitig die Möglichkeit haben, den Push zu verhindern. Grundsätzlich ist der Prozess wie folgt:

  1. Der Entwickler leitet einen Push zum Stable-Repository ein (ja, dies ist wirklich der erste Schritt).
  2. Der Hook führt eine Liste aller in der Transaktion enthaltenen Changesets aus und ruft diese auf (indem er das HG-Protokoll ausführt). Anschließend wird eine von uns erstellte Datenbank abgefragt, um festzustellen, ob diese Änderungssätze in einer Codeüberprüfung enthalten waren. (Die Tabelle entspricht dem Hash eines Änderungssatzes mit einer Codeüberprüfungs-ID.)
    • Wenn dies das erste Mal ist, dass eines dieser Änderungssätze angezeigt wird, erstellen wir eine neue Codeüberprüfung (mithilfe der Code Collaborator-Befehlszeile) und zeichnen diese Änderungssätze in der Datenbank mit der ID dieser Codeüberprüfung auf.
    • Wenn wir einige (aber nicht alle) Änderungssätze gesehen haben, führen wir den Befehl (Code Collaborator) aus, um die neuen Änderungssätze an die vorhandene Überprüfung anzuhängen und diese neuen Änderungssätze in der Datenbank aufzuzeichnen.
    • Wenn alle Änderungen in der Datenbank gefunden wurden (dh alle wurden der Codeüberprüfung hinzugefügt), überprüfen wir, ob der Status der Codeüberprüfung abgeschlossen ist. Wenn jedoch neue Änderungssätze vorhanden waren (oder die Codeüberprüfung nicht abgeschlossen ist), wird der Hook mit einem Statuscode ungleich Null beendet (was dazu führt, dass Mercurial die Transaktion zurücksetzt) ​​und dem Entwickler eine angezeigte Meldung zum Standardfehler mit einer Erläuterung aus dass die Codeüberprüfung abgeschlossen sein muss.

Im Wesentlichen bietet dies dem Entwickler einen ziemlich optimierten Prozess (alles, was sie tun müssen, ist ein hg-Push) und automatisiert die Erstellung der Codeüberprüfung vollständig (und das Hochladen zusätzlicher geänderter Dateien zur Überprüfung), während sichergestellt wird, dass der gesamte Code überprüft wird .

Hinweis: Dies ist ein ziemlich einfacher Prozess (und für uns relativ neu), sodass er möglicherweise nicht für alle funktioniert und es möglicherweise einige Designfehler gibt, auf die wir noch nicht gestoßen sind. Aber bisher hat es ganz gut geklappt.

Ryan
quelle
Würden Sie Ihre Entscheidung für das Einchecken in Ihre stabile Umgebung vor der Codeüberprüfung erläutern? Für mich scheint Stable eine Fehlbezeichnung zu sein.
Jordanien
1
Es war wahrscheinlich nicht klar aus der Antwort, aber es schafft es nicht wirklich in das Repository, es sei denn, alle Änderungen wurden zur Codeüberprüfung hinzugefügt und die Überprüfung ist abgeschlossen. Wenn der Hook mit einem Exit-Code ungleich Null beendet wird, setzt Mercurial alle Änderungen zurück, die übertragen wurden. Somit bietet dieser bestimmte Hook einen sehr praktischen Ort, um nicht nur die Unterschiede für die Überprüfung abzurufen, sondern auch die Überprüfung zu erzwingen, bevor die Änderungen in das Repository aufgenommen werden.
Ryan
1
Wow. Kann ich für Sie arbeiten kommen?
Rich
@Ryan - Wie implementieren wir einen pretxnchangegroup-Hook? Der von Ihnen angegebene Link gibt keine detaillierte Erklärung darüber, wie er implementiert werden kann. Er gibt nicht die Art von Funktionsvorlage an, der wir folgen sollten, und gibt nicht an, wo der Hook platziert werden soll. Ich habe keine Python-Erfahrung. Könnten Sie mich bitte zu einer korrekten Quelle oder der Schablone für pretxnchangegroup Haken umleiten. Ta
Simple-Solution
2

Dies hängt davon ab, wie Ihre Repository-Struktur aufgebaut ist und was Sie erreichen möchten. Wir bevorzugen "Pre-Commit" -Reviews, was in der DVCS-Welt wirklich "Pre-Push" bedeutet. DVCSs sind in dieser Umgebung (im Vergleich zu herkömmlichen SCMs) besser geeignet, da sie über integrierte Funktionen zum Speichern Ihrer lokalen Änderungen und zum Zurückholen Ihres Arbeitsbereichs verfügen, sodass Sie an etwas anderem arbeiten können.

Wenn Sie Nachprüfungen durchführen möchten, hängt der ideale Workflow stark von Ihrer Repository-Struktur ab. Nehmen wir zum Beispiel eine Repository-Struktur an, die der in diesem Artikel über Git-Repository-Layouts beschriebenen ähnelt . In diesem Fall möchten Sie möglicherweise die Änderungen überprüfen, mit denen zusammengeführt wird develop. Einzelne Commits für Feature-Zweige sind möglicherweise nicht sinnvoll zu überprüfen. Offensichtlich hotfixesmuss auch alles zusammen mit dem Zusammenführen in überprüft werden master.

Wenn Sie stattdessen einen einzelnen Integrationszweig haben, in dem die Benutzer direkt einchecken, möchten Sie alle Pushs zu diesem Zweig überprüfen. Das ist wohl etwas weniger effizient, könnte aber trotzdem funktionieren. In dieser Umgebung müssten Sie sicherstellen, dass alle Änderungen, die übertragen wurden, überprüft werden, bevor Sie eine Veröffentlichung ausschneiden. Das kann schwieriger sein.

Was b) betrifft, würde ich nur vorschlagen, den SmartBear-Support ([email protected]) direkt per E-Mail zu kontaktieren. Wir (ja, ich arbeite für SmartBear) helfen Ihnen gerne dabei, Ihre Pfadprobleme zu lösen, aber diese Frage enthält nicht genügend Informationen, um Ihr Problem zu beheben. Der normale Prozess ist, einfach das Installationsprogramm auszuführen und alles funktioniert einfach. Anscheinend ist dabei etwas schiefgelaufen.

Brandon DuRette
quelle