cruft
=====
Ein Problem mit cookiecutter-Vorlagen besteht darin, dass Projekte, die auf
älteren Versionen der Vorlage basieren, veralten, wenn sich nur die Vorlage im
Laufe der Zeit den sich ändernden Anforderungen angepasst wird. `cruft
`_ versucht, die Übernahme von Änderungen im
Git-Repository des :doc:`Cookiecutter-Templates ` in daraus
abgeleitete Projekte zu vereinfachen.
Die wesentlichen Features von cruft sind:
* Mit ``cruft check`` könnt ihr schnell überprüfen, ob ein Projekt die neueste
Version einer Vorlage verwendet. Diese Prüfung kann auch leicht in
CI-Pipelines integriert werden, um sicherzustellen, dass eure Projekte
synchron sind.
* cruft automatisiert auch die Aktualisierung der Projekte aus den
cookiecutter-Vorlagen.
Installation
------------
.. code-block:: console
$ python -m pip install cruft
Ein neues Projekt erstellen
---------------------------
Um ein neues Projekt mit cruft zu erstellen, könnt ihr :samp:`cruft create
{PROJECT_URL}` auf der Kommandozeile ausführen, :abbr:`z.B. (zum Beispiel)`:
.. code-block:: console
$ cruft create https://github.com/veit/cookiecutter-namespace-template
full_name [Veit Schiele]:
…
cruft verwendet dabei :doc:`Cookiecutter ` und der einzige Unterschied
in der resultierenden Ausgabe ist eine :file:`.cruft.json`-Datei, die den
Git-Hash der verwendeten Vorlage sowie die angegebenen Parameter enthält.
.. tip::
Bestimmte Dateien eignen sich selten zum Aktualisieren, :abbr:`z.B. (Zum
Beispiel)` Testfälle oder :file:`__init__`-Dateien. Ihr könnt cruft
anweisen, die Aktualisierung dieser Dateien in einem Projekt immer zu
überspringen, indem ihr das Projekt mit den Argumenten
:samp:`--skip vsc__init__.py --skip tests` erzeugt oder sie manuell zu
einem Skip-Abschnitt in eurer :file:`.cruft.json`-Datei hinzufügt:
.. code-block:: javascript
:emphasize-lines: 4-7
{
"template": "https://github.com/veit/cookiecutter-namespace-template",
"commit": "521d4b2aa603aec186cd7e542295edb458ba4552",
"skip": [
"vsc/__init__.py",
"tests"
],
"checkout": null,
"context": {
"cookiecutter": {
"full_name": "Veit Schiele",
...
}
},
"directory": null
}
Ein Projekt aktualisieren
-------------------------
Um ein bestehendes Projekt zu aktualisieren, das mit cruft erstellt wurde, könnt
ihr ``cruft update`` im Stammverzeichnis des Projekts ausführen. Wenn es
Aktualisierungen gibt, wird cruft euch zunächst bitten, diese zu überprüfen.
Wenn ihr die Änderungen akzeptiert, wird cruft sie auf euer Projekt anwenden und
die Datei :file:`.cruft.json` aktualisieren.
Ein Projekt überprüfen
----------------------
Um festzustellen, ob ein Projekt eine Vorlagen-Aktualisierung verpasst hat,
könnt ihr ganz einfach, ``cruft check`` aufrufen. Wenn das Projekt veraltet ist,
wird ein Fehler und der :samp:`Exit-Code 1` zurückgegeben. ``cruft check`` kann
auch zu :doc:`Python4DataScience:productive/git/advanced/hooks/pre-commit` und
CI-Pipelines hinzugefügt werden, um sicherzustellen, dass Projekte nicht
ungewollt veralten.
Ein bestehendes Projekt verknüpfen
----------------------------------
Wenn ihr ein bestehendes Projekt habt, das ihr in der Vergangenheit mit
Cookiecutter direkt aus einer Vorlage erstellt habt, könnt ihr es mit
:samp:`cruft link {TEMPLATE_REPOSITORY}` mit der Vorlage verknüpfen, mit der es
erstellt wurde, :abbr:`z.B. (zum Beispiel)`:
.. code-block:: console
$ cruft link https://github.com/veit/cookiecutter-namespace-template
Ihr könnt dann den letzten Commit der Vorlage angeben, mit dem das Projekt
aktualisiert wurde, oder die Vorgabe akzeptieren, den letzten Commit zu
verwenden.
Diff anzeigen
-------------
Mit der Zeit kann sich euer Projekt stark von der eigentlichen
Cookiecutter-Vorlage unterscheiden. ``cruft diff`` ermöglicht euch, schnell zu
sehen, was sich in Ihrem lokalen Projekt im Vergleich zur Vorlage geändert hat.