Hintergrund
Manchmal müssen Themes/Plugins Änderungen vornehmen, die nur mit der neuesten Version von Discourse kompatibel sind. In diesem Fall können ältere Versionen von Discourse angewiesen werden, eine ältere ‘gepinnte’ Version des Plugins zu verwenden.
Dies wird durch eine .discourse-compatibility-Datei im Stammverzeichnis eines Theme/Plugin-Repositorys erreicht. Es ist eine YAML-Datei, bei der die Schlüssel die Discourse-Kernversion angeben und die Werte die zugehörige Version Ihres Themes/Plugins darstellen.
Discourse-Kernversionen können mit den Operatoren <= und < angegeben werden. <= ist aus historischen Gründen der Standard, aber im Allgemeinen ist es sinnvoller, < zu verwenden.
Anheften einer Theme/Plugin-Version
Wenn beispielsweise die Discourse-Kernversion eine Änderung während 3.2.0.beta2-dev (in version.rb gefunden) vornimmt und Ihr Plugin/Theme davon abhängig wird, würden Sie einen Eintrag zur .discourse-compatibility-Datei wie folgt hinzufügen:
< 3.2.0.beta2-dev: abcde
wobei abcde ein Verweis auf den ‘Legacy’-Commit-Hash IHRES PLUGINS ist, der auf älteren Versionen von Discourse verwendet werden soll.
Jeder, der eine ältere Version von Discourse (z. B. 3.2.0.beta1 oder 3.1.4) verwendet, wird nun Version abcde Ihres Themes/Plugins verwenden. Jeder, der 3.2.0.beta2-dev oder höher verwendet, wird weiterhin die neueste Version verwenden.
Mehrere Einträge
Im Laufe der Zeit können Sie der .discourse-compatibility-Datei mehrere Zeilen hinzufügen. Discourse wählt immer die ‘niedrigste’ Spezifikation aus, die mit der aktuellen Discourse-Kernversion übereinstimmt. Die Reihenfolge der Zeilen in der Datei spielt technisch gesehen keine Rolle, aber wir empfehlen, die neuesten Einträge oben zu platzieren.
Änderungen für alte Discourse-Versionen ‘zurückportieren’
Stellen wir uns eine .discourse-compatibility-Datei wie diese vor, mit zwei verschiedenen Versionsspezifikationen, die an bestimmte Plugin-Commits angeheftet sind:
< 3.2.0.beta1-dev: commithashfordiscourse31
< 3.1.0.beta1-dev: commithashfordiscourse30
Wenn Sie eine Änderung für Discourse 3.1 ‘zurückportieren’ müssen, würden Sie Folgendes tun:
-
Erstellen Sie einen Branch vom alten Commit (
git checkout -b my_branch_name commithashfordiscourse31) -
Committen Sie Ihre Änderung und pushen Sie sie an den Ursprung. Wenn Sie die Branch-Schutzfunktionen von GitHub verwenden, möchten Sie diesen Branch möglicherweise vor versehentlichem Löschen schützen.
-
Aktualisieren Sie die
.discourse-compatibility-Datei im Hauptbranch, sodass sie nun auf Ihren neuen Commit im 3.1-Support-Branch verweist.
Praxisbeispiel
Hier ist eine echte .discourse-compatibility-Datei aus dem discourse-solved-Plugin. Beachten Sie, dass zum Zeitpunkt der Erstellung immer noch die ‘Legacy’-Syntax ohne explizite < oder <= Operatoren verwendet wird. Daher wird jede Zeile automatisch als <= interpretiert.
Dieses Dokument ist versionskontrolliert - schlagen Sie Änderungen auf GitHub vor.