Helfer für Hugo zur Vorverarbeitung von Dateien.
Sorgen Sie für einen flexiblen Vorprozessor für Hugo, da wir als Community scheinbar nicht in der Lage sind, bestimmte Dateitypen für externe Handler/Prozessoren im Hugo-Kerncode zu unterstützen.
Soll bei jeder Art von Vorverarbeitung helfen, die für die Veröffentlichung von Dateien erforderlich ist, wie zum Beispiel:
Zur Definition der Verarbeitung wird eine Konfigurationsdatei verwendet. Standardmäßig lautet der Name der Konfigurationsdatei .hugo-preproc.yaml
(oder .toml
oder .json
).
Sie können eine Konfigurationsdatei in der Befehlszeile mit der Option -c
/ --config
angeben.
Führen Sie den Befehl aus und die Verarbeitung erfolgt entsprechend der Konfiguration.
Die Datei hat zwei Primärschlüssel: git
und processors
, wie in diesem Beispiel:
git :
- path : path/to/repo
processors :
- mode : head | each | all
file : path/to/output/{{ .Commit.Hash }}
template : Entry {{ .<field> }}
exec :
- path : path/to/top/directory
pattern : " *.md "
command : echo {{ . }}
Der git
-Schlüssel ist ein Array-Objekt, wobei jedes Array-Element wie folgt definiert ist:
path
– Definiert den Pfad zum Git-Repo (Standard: „.“)processors
– Array von Git-Log-Handlern.mode
– Werte von head
(nur der Head-Commit), each
(jeder Protokolleintrag, der nacheinander durch den Prozessor geleitet wird) oder all
(alle Einträge, die durch den Prozessor geleitet werden).file
– Die auszugebende Datei; als Vorlage verarbeitet.template
– Die Vorlage, über die der/die Git-Log-Einträge verarbeitet und dann in file
geschrieben werden. Der exec
-Schlüssel ist ein Array-Objekt, wobei jedes Array-Element wie folgt definiert ist:
path
– Der Pfad der obersten Ebene, der durchlaufen und nach übereinstimmenden Dateinamen durchsucht wird.pattern
– Das Muster, das verwendet wird, um die Dateinamen abzugleichen, während der path
rekursiv durchsucht wird.command
– Der Befehl, der für übereinstimmende Dateien ausgeführt werden soll; Dieser Wert wird als Go-Vorlage verarbeitet.Die Array-Einträge werden seriell in der Reihenfolge ausgeführt, in der sie definiert sind.
Wir verwenden Go Templates, um die file
und template
in jedem git
Handler sowie die command
in jedem processors
zu verarbeiten.
Zusätzlich zu den standardmäßigen Go Template-Funktionen fügen wir außerdem Folgendes hinzu:
fields
- structs.Names
replace
- strings.Replace
{{replace <input> <search> <replace> <n>}}
example.drawio
command
: draw.io --export --output {{replace . ".md" ".svg" -1}} --format svg {{.}}
exec
verwendete Vorlagenausgabe: draw.io --export --output example.svg --format svg example.drawio
split
- strings.Split
{{split <input> <separator>}}
trimsuffix
- strings.TrimSuffix
{{trimsuffix <input> <trim_string>}}
Darüber hinaus haben wir jetzt die vollständige Bibliothek der Masterminds/Sprig-Vorlagenfunktionen zugeordnet. Für 1.x
Versionen von hugo-preproc
belassen wir unsere benutzerdefinierten Vorlagenfunktionen. Wenn wir auf 2.x
Releases umsteigen, werden wir die oben genannten benutzerdefinierten Funktionen zugunsten von sprig
verwerfen.
Wir stellen die folgenden Eingaben für die konfigurierten Handler bereit.
git
Handler
head
und each
. {
Commit {
Hash string // Hash of the commit object.
Author { // Author is the original author of the commit.
Name string // Name of the Author.
Email string // Email address of the Author.
When time . Time // Date/time of the commit.
}
Committer { // Committer is the one performing the commit,
// might be different from Author.
Name string // Name of the Committer.
Email string // Email address of the Committer.
When time . Time // Date/time of the commit.
}
Message string // Message is the commit message, contains arbitrary text.
TreeHash string // TreeHash is the hash of the root tree of the commit.
ParentHashes [] string // ParentHashes are the hashes of the parent commits of the commit.
PGPSignature string // PGPSignature is the PGP signature of the commit.
}
Stats [] string // Array of strings for files changed and their stats.
}
all
. {
// Array of Commits
Commits []{
Commit {
Hash string // Hash of the commit object.
Author string // Author is the original author of the commit.
Name string // Name of the Author.
Email string // Email address of the Author.
When time . Time // Date/time of the commit.
}
Committer { // Committer is the one performing the commit,
// might be different from Author.
Name string // Name of the Committer.
Email string // Email address of the Committer.
When time . Time // Date/time of the commit.
}
Message string // Message is the commit message, contains arbitrary text.
TreeHash string // TreeHash is the hash of the root tree of the commit.
ParentHashes [] string // ParentHashes are the hashes of the parent commits of the commit.
PGPSignature string // PGPSignature is the PGP signature of the commit.
}
Stats [] string // Array of strings for files changed and their stats.
}
// Head Commit
Head {
Commit {
Hash string // Hash of the commit object.
Author string // Author is the original author of the commit.
Name string // Name of the Author.
Email string // Email address of the Author.
When time. Time // Date/time of the commit.
}
Committer { // Committer is the one performing the commit,
// might be different from Author.
Name string // Name of the Committer.
Email string // Email address of the Committer.
When time. Time // Date/time of the commit.
}
Message string // Message is the commit message, contains arbitrary text.
TreeHash string // TreeHash is the hash of the root tree of the commit.
ParentHashes [] string // ParentHashes are the hashes of the parent commits of the commit.
PGPSignature string // PGPSignature is the PGP signature of the commit.
}
Stats [] string // Array of strings for files changed and their stats.
}
}
exec
Handler
. string // String representing the matched filename,
// including its full path (handler top search path + sub-path to file).