Verhindern, dass Drücker mein zentrales Mercurial-Repository beschädigen [geschlossen]

7

Ich führe das zentrale Quecksilber-Repository aus und verstehe, dass der normale "Push" -Befehl beendet wird, wenn der Remote-Benutzer versucht, mehrere "Köpfe" in mein zentrales Repository zu zwingen. Die Absicht ist, dass der Remote-Benutzer zuerst zieht und zusammenführt, bevor er erneut versucht, zu pushen.

Die Verwendung hg push --forceüberschreibt dies jedoch. Ich möchte dieses Verhalten blockieren.

Ich verwende derzeit das hgwebdir.cgiPlus einige Apache-Auth-Sachen, um die Fähigkeit der Benutzer zum Ziehen und Schieben einzuschränken.

BEARBEITEN: Ein pretxnchangegroup-Hook hat das Problem gelöst. Haken funktionierte:

#!/bin/bash
# force-one-head
# add the following to <repository>/.hg/hgrc :
# [hooks]
# pretxnchangegroup.forceonehead = /path/to/force-one-head

if [[ `hg heads -q | wc -l` -gt 1 ]]; then
    echo "There are multiple heads."
    echo "Please 'hg pull' and get your repository up to date first."
    echo "Also, don't 'hg push --force' because that won't work either."
    exit 1
fi
user9748
quelle
Haben Sie eine Lösung gefunden?
kmarsh
1
Die "Auch nicht 'hg push --force', weil das auch nicht funktioniert." Ein Teil Ihres Skripts wird nicht benötigt. Wenn Benutzer dies tun hg push, wird Mercurial abgebrochen, bevor etwas gepusht wird und Ihr Skript nicht ausgeführt wird. Wenn dies hg push --forceder Fall ist, wird Ihr Skript ausgeführt, die Zeile ist jedoch redundant.
Martin Geisler
Ich denke, die meisten Workflows würden es Benutzern ermöglichen, einen neuen Kopf in einen Feature-Zweig zu verschieben, möchten aber nur verhindern, dass Benutzer mehrere Köpfe in den Standardzweig verschieben . Ersetzen Sie dazu hg heads -qim obigen Skript durch hg heads -q default.
mo.

Antworten:

6

Dies ist keine Apache-Änderung, aber Sie müssen sie im Mercurial-Repository selbst festlegen.

Sie können Hooks einrichten, die ein Skript ausführen, bevor Sie einen Push in Ihr Repository akzeptieren. In den durch die pretxncommitoder pretxnchangegroupHooks ausgelösten Skripten können Sie überprüfen, ob diese Änderungen einen neuen Kopf erzeugen, und sie gegebenenfalls ablehnen.

Weitere Informationen finden Sie im Kapitel über Haken im Hg-Buch .

Marijn
quelle
1
Es sieht so aus, als ob pretxncommit der Ort ist, an dem dieser Haken angebracht werden kann. Gibt es jedoch einen vorinstallierten Haken für diese Art von Test (wie die acl- oder bugzilla-Haken)? Muss ich einen externen Hook erstellen? Wenn Sie Vorschläge zum Testen haben, bin ich ganz Ohr.
user9748
1

Es wird kein Hook mitgeliefert, der dieses Verhalten erzeugt. Sie müssen es selbst schreiben.


quelle
0

Erwägen Sie, das Repository auf einen zugriffsgesteuerten Server zu stellen und dann den Mercurial-Server (früher als hg-admin-tools bekannt) zu implementieren . Benutzer drücken SSH (unter Windows oder Linux) durch und unterliegen Ihren Zugriffskontrollen.

Es gibt zwei Berechtigungsdateien, mit denen Sie genau steuern können, wer lesen oder pushen kann. Unter einem Managementsystem können mehrere Repositorys eingerichtet werden, sodass Sie es nicht immer wieder installieren müssen.

kmarsh
quelle