Ich erwarte nicht, dass dies eine erfolgreiche Antwort ist, aber es ist eine ziemlich ungewöhnliche Situation. Ich erwähne es, falls jemand anderes als ich darauf stößt.
Heute bekam ich die Meldung "waiting for lock on repository" bei einem hg push Befehl.
Als ich den angehängten hg-Befehl beendete, konnte ich kein .hg/store/lock sehen
Als ich nach .hg/store/lock suchte, während der Befehl angehängt war, existierte es. Aber die Sperrdatei wurde gelöscht, als der hg-Befehl beendet wurde.
Als ich zum Ziel des Stoßes ging und hg pull ausführte, kein Problem.
Schließlich stellte ich fest, dass sich die Prozess-ID in der Nachricht "hg push was lock waiting" jedes Mal änderte. Es stellte sich heraus, dass "hg push" auf eine Sperre wartete, die von ihm selbst gehalten wurde (oder möglicherweise von einem Unterprozess, ich habe das nicht weiter untersucht).
Es stellte sich heraus, dass die beiden Arbeitsbereiche, nennen wir sie A und B, .hg-Bäume hatten, die durch Symlink gemeinsam genutzt wurden:
A/.hg --symlinked-to--> B/.hg
Das ist KEINE gute Sache, die man mit Mercurial machen sollte. Mercurial versteht das Konzept nicht, dass zwei Arbeitsbereiche das gleiche Repository teilen. Ich verstehe jedoch, dass jemand, der von einem anderen VCS zu Mercurial kommt, dies vielleicht möchte (Perforce tut dies, obwohl es kein DVCS ist; das Bazaar DVCS kann dies angeblich). Ich bin überrascht, dass ein symlinked REP-Root/.hg überhaupt funktioniert, obwohl es so scheint, außer für diesen Push.