In Mercurial Ist es "sicher", wenn ein mq-Patch angewendet wird?

8

Die Programmiersprache hat eine Seite für Code-Reviews mit mq und besagt: "Seit dem Ziehen, Drücken, Aktualisieren Wenn Sie Patches anwenden, kann Ihr Repository beschädigt werden. "

Ich verstehe, warum Pushen oder Aktualisieren ein Problem sein könnte, aber ein Problem verursacht?

Wenn Sie mq-Patches angewendet haben und Sie ziehen, wird Ihr Repository beschädigt?

    
Brandon Leiran 01.03.2011, 22:08
quelle

2 Antworten

5

Es kann sicherlich ein Problem sein, wenn Sie versehentlich mit den Upstream-Changesets verschmelzen, während MQ-Patches in Ihrem Repository angewendet werden. Hier ist ein Szenario, das ich gerade ausprobiert habe und das Probleme aufzuweisen scheint:

  • Nehmen wir an, Sie schieben in Ihrem Klon alle Ihre Patches mit hg qpush -a
  • Dann ziehen Sie changesets von upstream mit hg pull (aber nicht hg update ). Dadurch wird ein neuer Zweig erstellt ( hg heads zeigt den Zweig, in dem Sie sich befinden, als qtip und der neue Zweig, den Sie gerade gezogen haben, als tip )
  • Während Sie hacken, entscheiden Sie sich, zum neuen Zweig zu wechseln und hg update -C tip auszuführen, aber tun Sie dies, ohne Ihre Patches zu öffnen.
  • Wenn Sie etwas mehr hacken, beschließen Sie, die Zweige mit hg merge zusammenzuführen. Hoppla! Sie haben gerade einen MQ-Patch eingefügt, der nie qfinished .
  • war

Da MQ erstellt und zerstört Geschichte, sehen die Patch-Changesets wie normale Teile der Geschichte. Da Sie jedoch die angewendeten Patches "überspringen" und mit einem nicht -Patch-Änderungsset zusammengeführt haben, können Sie die Patches nicht mehr entfernen. Das Ausführen von hg qpop wird in der Tat mit einer Nachricht abgebrochen, die besagt:

%Vor%

Ich versuche im Allgemeinen nur, vorsichtig und bewusst zu sein, wenn ich mit einer Patch-Warteschlange arbeite, aber die von der Go-Seite vorgeschlagenen Hooks bieten einen guten Schutz.

Beachten Sie, dass Sie Ihre Patches immer noch zusätzlich zu den Upstream-Änderungssets hinzufügen können. Eine Beschreibung dazu finden Sie auf dieser Seite .

    
bjlaub 02.03.2011, 01:05
quelle
6
  

Wenn Sie mq Patches angewendet haben und Sie ziehen, wird Ihr Repository beschädigt?

Die Antwort lautet nein . Wenn Sie ziehen, fügen Sie Ihrem lokalen Verlauf weitere Änderungsmengen hinzu. Die angewendeten MQ-Patches werden auch als Changesets im Changeset-Diagramm gespeichert. Dies ist jedoch nicht gefährlich und Sie verlieren keine Daten.

Was kann ist, dass Sie einige Patches angewendet haben:

%Vor%

Sie senden dann die Patches zur Aufnahme an die Upstream-Mailingliste. Jemand überprüft die Patches, schreibt sie fest und verschiebt die Changesets in das Haupt-Repository. Andere Changesets werden anschließend gedrückt und das nächste Mal, wenn Sie ziehen, endet mit:

%Vor%

Changesets p1 bis p3 sind immer noch MQ-Patches in Ihrem Repository, aber sie haben jetzt non-MQ -Kinder! Der Versuch, sie zu knacken, ergibt (mit Mercurial 2.1.1):

%Vor%

Dies ist ein bisschen ein Dead-Lock. Es ist ärgerlich, aber nicht gefährlich. Um es zu lösen, müssen Sie MQ verständlich machen, dass p1 bis p3 nicht mehr von MQ verwaltet werden. Dazu entfernen Sie die Zeilen für diese Änderungsmengen aus .hg/patches/status . MQ sollte diese Zeilen eventuell selbst entfernen, wenn das passiert - aber es passiert ziemlich selten, also hat noch niemand diesen Patch geschrieben.

    
Martin Geisler 12.03.2012 16:07
quelle

Tags und Links