Gemeinsame Merkmale der Modi

Was du wissen musst

Malachite ist im Repository-Modus ziemlich umfangreich, im Workspace-Modus dagegen nicht so sehr.

Das liegt natürlich nicht daran, dass ich faul bin und den Arbeitsbereich-Modus hasse oder so, es gibt einfach nicht nicht viel hinzufügen.

Werfen wir nun einen Blick auf diese Beispiel-Konfigurationsdatei.

# mlc.toml

[base]
mode = "workspace"
smart_pull = true

[mode.workspace]
git_info = true
colorblind = true

[repositories]
repos = [
  "foo:repo1:2",
  "foo:repo2/testing",
  "bar:baz!",
  "bar:qux/testing!:1",
]

[repositories.urls]
foo = "https://example.org/{}.git"
bar = "https://example.org/other/{}.git"

Das wird auf den ersten Blick sehr verwirrend aussehen, aber haben Sie Vertrauen in mich.

In diesem Dokument wird nur das behandelt, was man für beide Modi wissen muss. Speziellere Anleitungen werden für jeden Modus am Ende dieser Seite verlinkt.

Beginnen wir mit den Grundlagen

Basis-Konfiguration

Die Basiskonfiguration definiert einige gemeinsame Parameter für alle Malachite-Modi.

[base]
mode = "workspace"
smart_pull = true

In diesem Ausschnitt definieren wir "mode" als "workspace".

base.mode" kann in Malachite immer nur eine der Optionen "workspace" oder "repository" sein, und definiert, Trommelwirbel... Der Modus, in dem er arbeitet. Wenn er auf etwas anderes als diese 2 Modi eingestellt ist, stürzt er ab.

Ebenfalls in diesem Ausschnitt definiert ist smart_pull, das steuert, ob intelligent gezogen werden soll.

Das bedeutet, dass Malachite anstelle eines einfachen git pull in jedem Repository, Malachite wird:

  • Führt zuerst git remote update aus, um neue Remotes vom Source zu holen.
  • Dann wird ausgeführt git status und analysiert die Ausgabe, um festzustellen, ob der aktuelle Zweig im Rückstand ist
  • Wenn der aktuelle Zweig im Rückstand ist, wird ein reguläres git pull ausgeführt, das die bereits aktualisierten Remote ausnutzt.

Theoretisch beschleunigt dies die Dinge nur um einen winzigen Betrag (man denke an Millisekunden, wirklich). Wo diese Funktion jedoch glänzt, ist im Repository-Modus, wo es hilfreiche Automatisierungsfunktionen wie build_on_update ermöglicht.

Trotzdem ist es empfehlenswert, diese Funktion zu aktivieren, um die Geschwindigkeit zu erhöhen, und sie nur zu deaktivieren, wenn sie Probleme verursacht. Ich persönlich hatte in der Vergangenheit noch nie Probleme damit, aber wer weiß, was alles passieren kann. Wir reden hier über Git.

Repositories-Konfiguration

Die Konfiguration der Repositories ist realistisch gesehen das, was Malachite intern zu Butter werden lässt. Sie ist der ganze und deshalb haben wir versucht, ein kleines, aber feines System zu entwickeln, mit dem man viele Pakete zu erleichtern, ohne jede URL eine Million Mal eingeben zu müssen.

[repositories]
repos = [
  "foo:repo1:2",
  "foo:repo2/testing",
  "bar:baz!",
  "bar:qux/testing!:1",
]

[repositories.urls]
foo = "https://example.org/{}.git"
bar = "https://example.org/other/{}.git"

Der Weg wie das funktioniert ist einfach:

  • Wir haben 2 URLs im Schlüssel repositories.urls.
  • Jedem repo im Schlüssel repositories.repos ist ein Bezeichner vorangestellt.
  • Wenn die Nummer foo ist, wird die URL mit der ID foo eingefügt.
    • Insbesondere wird in der URL der Name des definierten repo anstelle der Teilzeichenkette %repo% eingefügt.

Moment mal, was sind die besonderen Symbole????

Ich bin froh, dass Sie gefragt haben!

  • Wenn Sie einen bestimmten Zweig klonen wollen, verwenden Sie einfach den Begrenzer /. Um das Repository foo auf den Zweig bar zu klonen, verwenden Sie id:foo/bar.
  • Wenn Sie wollen, dass ein bestimmtes Paket zuerst gebaut wird, verwenden Sie Instanzen von !, um die Priorität festzulegen. Dies wird später auf der Seite Repository Mode erklärt.

Das letzte : Trennzeichen ist völlig optional und verhält sich je nach Modus unterschiedlich:

  • Im Repository-Modus definiert es den gewünschten Commit-Hash/Rev/Tag zum Auschecken beim Klonen des Repositorys
  • Im Arbeitsbereich-Modus definiert es die gewünschte Tiefe, um das Repository zu klonen, was bei großen Git-Repositories wie nixpkgs nützlich ist.

Das war's buchstäblich!

Modus-spezifische Konfig.

Für modusspezifische Konfigurationen, schauen Sie sich die folgenden Links an!

Beispiel

Funktionierende Konfigurationsbeispiele für beide Modi sind im Verzeichnis examples verfügbar!

Verwendung

Alternativ können Sie sich auch den Usage Guide ansehen!