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üsselrepositories.repos
ist ein Bezeichner vorangestellt. - Wenn die Nummer
foo
ist, wird die URL mit der IDfoo
eingefügt.- Insbesondere wird in der URL der Name des definierten
repo
anstelle der Teilzeichenkette%repo%
eingefügt.
- Insbesondere wird in der URL der Name des definierten
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 Repositoryfoo
auf den Zweigbar
zu klonen, verwenden Sieid: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!