Doku vervollständigt, kleinere Fehler bereinigt
This commit is contained in:
parent
70d2a68ced
commit
3c2aabbdf5
@ -7,29 +7,41 @@
|
||||
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
|
||||
\definecolor{blau}{rgb}{0,0,0.75}
|
||||
\definecolor{orange}{rgb}{0.8,0.3,0}
|
||||
%\usepackage[%
|
||||
% backend=biber,
|
||||
% sortlocale=de_DE,
|
||||
% style=authoryear,
|
||||
% bibencoding=UTF8,
|
||||
% block=space,
|
||||
% autocite=inline,
|
||||
% language=ngerman,
|
||||
%]{biblatex}
|
||||
%\addglobalbib{.bib}
|
||||
%\renewcommand*{\mkbibnamelast}{\textsc}
|
||||
|
||||
%\DeclareCiteCommand{\citeauthorfull}
|
||||
% {%
|
||||
% \boolfalse{citetracker}%
|
||||
% \boolfalse{pagetracker}%
|
||||
% \usebibmacro{prenote}}
|
||||
% {\ifciteindex%
|
||||
% {\indexnames{labelname}}
|
||||
% {}%
|
||||
% \printnames[first-last]{author}}
|
||||
% {\multicitedelim}
|
||||
% {\usebibmacro{postnote}}
|
||||
\begin{filecontents}{gitfile-info.bib}
|
||||
@electronic{gitpython,
|
||||
editor = "gitpython-developers",
|
||||
month = {Jun},
|
||||
year = "2016",
|
||||
title = "GitPython",
|
||||
subtitle = "GitPython is a python library used to interact with Git repositories",
|
||||
url = {https://github.com/gitpython-developers/GitPython},
|
||||
urldate = {2016-06-23},
|
||||
}
|
||||
\end{filecontents}
|
||||
\usepackage[%
|
||||
backend=biber,
|
||||
sortlocale=de_DE,
|
||||
style=authoryear,
|
||||
bibencoding=UTF8,
|
||||
block=space,
|
||||
autocite=inline,
|
||||
language=ngerman,
|
||||
]{biblatex}
|
||||
\addglobalbib{gitfile-info.bib}
|
||||
\renewcommand*{\mkbibnamelast}{\textsc}
|
||||
|
||||
\DeclareCiteCommand{\citeauthorfull}
|
||||
{%
|
||||
\boolfalse{citetracker}%
|
||||
\boolfalse{pagetracker}%
|
||||
\usebibmacro{prenote}}
|
||||
{\ifciteindex%
|
||||
{\indexnames{labelname}}
|
||||
{}%
|
||||
\printnames[first-last]{author}}
|
||||
{\multicitedelim}
|
||||
{\usebibmacro{postnote}}
|
||||
|
||||
|
||||
\usepackage{hyperref}
|
||||
@ -58,30 +70,7 @@ pdftitle = {\LaTeX-package for reading git commit info for specific files}
|
||||
\newrefformat{klasse}{Klasse~\ref{#1}, S.\,\pageref{#1}}
|
||||
\newrefformat{fig}{Abb.\,\ref{#1}}
|
||||
\newrefformat{tab}{Tab.\,\ref{#1}}
|
||||
\newrefformat{bsp}{Bsp.\,\ref{#1}, S.\,\pageref{#1}}
|
||||
\newcommand{\refMacro}[1]{Makro \texttt{\textbackslash#1}, S.\,\pageref{#1}}
|
||||
\DeclareFloatingEnvironment[name={Bsp.},
|
||||
listname={Beispielverzeichnis}, within=section]{example}
|
||||
\floatstyle{ruled}
|
||||
\restylefloat{example}
|
||||
\NewDocumentEnvironment{beispiel}{o o m}{
|
||||
\begin{example}[ht!]
|
||||
\centering
|
||||
\vspace{0.2cm}
|
||||
\IfNoValueTF{#2}{
|
||||
\caption{#3}
|
||||
}{
|
||||
\caption[#2]{#3}
|
||||
}
|
||||
}{
|
||||
\IfNoValueTF{#1}{
|
||||
\label{\theexample}
|
||||
}{
|
||||
\label{#1}
|
||||
}
|
||||
\vspace{0.2cm}
|
||||
\end{example}
|
||||
}
|
||||
\DisableCrossrefs
|
||||
\makeatletter
|
||||
\makeatother
|
||||
@ -111,13 +100,12 @@ pdftitle = {\LaTeX-package for reading git commit info for specific files}
|
||||
numberstyle=\tiny\color{gray},
|
||||
keywordstyle=\color{OliveGreen}\textbf,
|
||||
commentstyle=\color{gray}\itshape,
|
||||
stringstyle=\color{mauve},
|
||||
stringstyle=\color{orange},
|
||||
morekeywords={
|
||||
minisec, subsection, glqq, grqq, euro, Name, Vorname, Street,
|
||||
Plz, Stadt, MeinBeruf, EMail, Tel, Mobile, Sta, GebDatum, ID,
|
||||
Anhang, includepdf, includepdfmerge, cventry, cvlistitem,
|
||||
cvlanguage, definecolor, maketitle, makePerson, cp, ln, mkdir,
|
||||
todayOrt, todayDatum,
|
||||
minisec, subsection, glqq, grqq, euro, href,
|
||||
gfiGetAuthorName, gfiGetAuthorMail, gfiGetCommit, gfiGetCommitAbr,
|
||||
gfiGetDate, gfiGetMin, gfiGetHour, gfiGetDay, gfiGetMonth,
|
||||
gfiGetYear, gfiInfo,
|
||||
},
|
||||
literate=%
|
||||
{Ö}{{\"O}}1
|
||||
@ -131,16 +119,338 @@ pdftitle = {\LaTeX-package for reading git commit info for specific files}
|
||||
{«}{{\flqq}}4
|
||||
{~}{$\sim$}1
|
||||
}
|
||||
\newcommand{\wM}[1]{\texttt{\textbackslash#1}}
|
||||
|
||||
\xspaceaddexceptions{\guillemotright,\guillemotleft}
|
||||
|
||||
\usepackage{gitfile-info}
|
||||
\usepackage{scrpage2}
|
||||
\pagestyle{scrheadings}
|
||||
\ifoot{Commit: \gfiGetCommitAbr}
|
||||
\ofoot{\thepage}
|
||||
\ihead{\gfiGetAuthorName}
|
||||
\ohead{Stand: \gfiGetDate}
|
||||
|
||||
\CheckSum{0}
|
||||
|
||||
\author{André Hilbig}
|
||||
|
||||
\begin{document}
|
||||
\title{Gitfile-Info}
|
||||
%\clearpage
|
||||
%\addcontentsline{toc}{section}{Literatur}
|
||||
%\printbibliography
|
||||
\title{Gitfile-Info\newline\newline
|
||||
\LaTeX-Paket zum Auslesen von git Ver"-sions"-in"-for"-ma"-tion"-en für eine
|
||||
Datei\newline\newline
|
||||
\LaTeX-package for reading git commit info for specific files
|
||||
}
|
||||
\author{Andr\'e Hilbig -- \href{mailto:mail@andrehilbig.de}{mail@andrehilbig.de}}
|
||||
\date{\today}
|
||||
\maketitle
|
||||
|
||||
\begin{abstract}
|
||||
\foreignlanguage{english}{
|
||||
If you are using git to control versions of \LaTeX-files, you may want to show yourself or
|
||||
other users or devs the current version of the file, information about the author and last
|
||||
edited date. All packages for git known make that kind of information available for the whole
|
||||
repository. But sometimes you have a lot of files within the same repository in different
|
||||
versions, from different authors etc. Perhaps you also split up a big project in small files
|
||||
and want to show within the document who had edited what. This package gives you the
|
||||
opportunity to do so.
|
||||
}
|
||||
|
||||
Wenn Versionen von \LaTeX-Dateien mit git kontrolliert werden, dann kommt es vor, dass für
|
||||
einen selbst, anderen Nutzern oder Entwicklern der aktuelle Entwicklungsstand der Datei,
|
||||
Hinweise zum Autor und dem Datum der letzten Bearbeitung im PDF gezeigt werden sollen. Mir
|
||||
bekannte Pakete können zwar den Stand des Repositories auslesen, jedoch nicht für eine
|
||||
bestimmte Datei unterscheiden. Allerdings wird manchmal mit vielen Dateien in einem Repository
|
||||
gearbeitet, die jeweils in verschiedene Versionen vorliegen. Möglicherweise soll auch ein
|
||||
großes Projekt in mehrere \TeX-Dateien aufgeteilt werden. Dann soll dennoch für jede einzelne
|
||||
Datei die Versionsinfo angezeigt werden können. Dieses Paket soll diese Funktionalität
|
||||
liefern.
|
||||
\end{abstract}
|
||||
\begin{multicols}{2}
|
||||
\tableofcontents
|
||||
\end{multicols}
|
||||
|
||||
\section{Änderungen}
|
||||
\begin{description}
|
||||
\item[v0.1] Veröffentlichung
|
||||
\end{description}
|
||||
|
||||
\section{Installation}
|
||||
\subsection{Systemanforderungen}
|
||||
Um die Informationen über einzelne Dateien aus dem git auszulesen, müssen entsprechende
|
||||
Scripte bzw. Hooks innerhalb des Repositories platziert werden. Damit eine möglichst breite
|
||||
Nutzbarkeit möglich ist, habe ich mich dazu entschieden mit Python und der
|
||||
gitpython-Bibliothek zu arbeiten.
|
||||
|
||||
\begin{itemize}
|
||||
\item Python>=3
|
||||
\item gitpython: \fullcite{gitpython}
|
||||
|
||||
(kann über \verb|pip| installiert werden)
|
||||
\end{itemize}
|
||||
|
||||
\textbf{Hinweis:} Die Scripte werden in erster Linie für Unix-basierte Betriebssysteme
|
||||
geschrieben. Support für andere Systeme kann und möchte ich nicht leisten.
|
||||
|
||||
\subsection{Automatische Installation}
|
||||
Das Paket ist über \verb|CTAN| verfügbar und kann so mit dem \verb|tlmgr| bzw. der
|
||||
Paketverwaltung des Betriebssystems\footnote{Leider halten viele Distributionen ihre
|
||||
\LaTeX-Installationen nicht aktuell. Daher wird empfohlen die direkten Quellen, etwa von
|
||||
|texlive|, zu verwenden.} abgerufen werden.
|
||||
|
||||
\subsection{Manuelle Installation}
|
||||
Falls eine automatisierte Installation nicht möglich ist, können die Pakete auch manuell
|
||||
installiert werden. Es wird jedoch empfohlen, eine aktuelle Distribution zu verwenden, etwa
|
||||
\verb|texlive2016|. Für Versionen davor kann keine Kompatibilität gewährleistet werden. Zur
|
||||
Installation werden die Dateien \verb|gitfile-info.ins| und \verb|gitfile-info.dtx| benötigt.
|
||||
|
||||
\begin{itemize}
|
||||
\item Erzeugung der Paket- und Klassendateien
|
||||
|
||||
\begin{lstlisting}[gobble=12,numbers=none,language=bash,%
|
||||
linewidth=0.7\textwidth,resetmargins=false]
|
||||
latex gitfile-info.dtx
|
||||
\end{lstlisting}
|
||||
\item Die erzeugte Paketdatei (*.sty) muss in einem für \TeX\ lesbarem Verzeichnis platziert
|
||||
werden. Für eine lokale Installation bietet sich dafür
|
||||
|
||||
\verb|~/texmf/tex/latex/bewerbung/|
|
||||
|
||||
an.
|
||||
\item Außerdem werden die drei Python-Scripte
|
||||
|
||||
\verb|gfi-run|, \verb|post-commit| und \verb|post-merge|
|
||||
|
||||
erstellt. Diese Dateien müssen im Repository platziert werden
|
||||
(vgl. \prettyref{sec:installation-git}).
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Einrichtung des Repositories}\label{sec:installation-git}
|
||||
Die beiden Hooks \verb|post-commit| und \verb|post-merge| müssen innerhalb des Repositories im
|
||||
Verzeichnis \verb|.git/hooks| als ausführbare Dateien platziert werden.
|
||||
\begin{description}
|
||||
\item[\verb|post-commit|] wird bei jedem Commit ausgeführt (nachdem der Commit vollständig
|
||||
beendet ist) und schreibt für die veränderten \TeX-Dateien Änderungen in eine Hilfsdatei.
|
||||
\item[\verb|post-merge|] wird nach jedem merge (erfolgreich und nicht erfolgreich --
|
||||
explizit auch nach einem pull) ausgeführt, um Veränderungen in die Hilfsdatei einzutragen.
|
||||
\end{description}
|
||||
|
||||
Außerdem sollte das Script \verb|gfi-run| möglichst für jeden Nutzer im Repository ausführbar
|
||||
platziert werden. Wird das Script ohne Parameter ausgeführt liest es sämtliche unter
|
||||
Versionsverwaltung stehende Dateien aus und erstellt die passenden Hilfsdateien. Wird dem
|
||||
Script eine \TeX-Datei (inkl. Endung) übergeben, wird die Hilfsdatei für diese spezielle Datei
|
||||
neu erstellt.
|
||||
\begin{lstlisting}[gobble=10,numbers=none,language=bash,%
|
||||
linewidth=0.7\textwidth,resetmargins=false]
|
||||
# alle *.tex-Dateien aktualisieren
|
||||
python gfi-run
|
||||
# eine spezielle *.tex-Datei aktualisieren
|
||||
python gfi-run datei.tex
|
||||
\end{lstlisting}
|
||||
|
||||
\textbf{Hinweis:} Die drei Dateien sollten Nutzern zur Verfügung gestellt werden.
|
||||
Typischerweise sind sie nach einem Clone nicht im Baum enthalten. Jeder Nutzer muss sich die
|
||||
Hooks selbstständig einrichten -- außer es werden entsprechende Konfigurationen festgelegt.
|
||||
|
||||
Außerdem muss in der \verb|*.gitignore| der Filter \verb|*.gfi| festgelegt werden, da die
|
||||
Hilfsdateien in \textbf {keinem} Fall unter Versionsverwaltung stehen dürfen. Daher muss ein
|
||||
Nutzer nach einem \textit{frischen} Clone das Script \verb|gfi-run| aufrufen, um alle
|
||||
Hilfsdateien lokal zu erstellen.
|
||||
|
||||
\section{Funktionsweise}
|
||||
\subsection{Vorüberlegungen}
|
||||
Zunächst stand die Überlegung im Raum, Meta-Daten ähnlich wie beim Paket \verb|svninfo| direkt
|
||||
in die betreffenden \TeX-Dateien einzutragen. Dadurch wird jedoch der Arbeitsstand verändert
|
||||
und der eingetragene Commit ist nicht mehr aktuell. Es müsste ein erneuter Commit erfolgen
|
||||
usw. Hier gäbe es die Möglichkeit, automatisierte Commits zu erstellen. Diese würden jedoch
|
||||
das Repository aufblähen.
|
||||
|
||||
Daher entschied ich mich dafür, die passenden Meta-Daten in eine Hilfsdatei (\verb|*.gfi|)
|
||||
einzutragen. Hier können per simplem \LaTeX-Befehl Metadaten eingegeben werden.
|
||||
|
||||
\subsection{Umsetzung}
|
||||
Bei jedem Commit oder Pull gehen die Scripte alle geänderten \TeX-Dateien durch und
|
||||
aktualisieren die entsprechenden Hilfsdateien. Hier werden \textbf{nur} Dateien mit der Endung
|
||||
\verb|*.tex| berücksichtigt! Bei Problemen kann das Script \verb|gfi-run| per Hand aufgerufen
|
||||
werden, um eine Aktualisierung zu erzwingen (vgl. \prettyref{sec:installation-git}).
|
||||
|
||||
|
||||
\section{Nutzung des Pakets}
|
||||
Alle Makros geben immer die Versionsinformationen für die \textit{aktuelle} Datei zurück, sofern
|
||||
diese geeignet geladen wurde (vgl. \prettyref{sec:nutzung-include}). Das Paket wird dazu in der
|
||||
Präambel des Dokumentes geladen.
|
||||
\begin{lstlisting}[gobble=8,numbers=none,%
|
||||
linewidth=0.7\textwidth,resetmargins=false]
|
||||
\usepackage{gitfile-info}
|
||||
\end{lstlisting}
|
||||
Weitere Optionen müssen nicht angegeben werden. Sofern notwendige Hilfsdateien mit der Endung
|
||||
\verb|*.gfi| noch nicht vorhanden sind, werden alle Makros mit Standardwerten belegt und eine
|
||||
Warnung ausgegeben.
|
||||
|
||||
\subsection{Auslesen der Metadaten}
|
||||
\DescribeMacro{\gfiGet}
|
||||
Über die \verb|\gfiGet*|-Makros können die Metadaten aus dem Repository ausgelesen werden.
|
||||
|
||||
\begin{description}
|
||||
\item[\wM{gfiGetDay}] gibt den Tag der letzten Änderung als zweistellige Ziffer zurück.
|
||||
\item[\wM{gfiGetMonth}] gibt den Monat der letzten Änderung als zweistellige Ziffer zurück.
|
||||
\item[\wM{gfiGetYear}] gibt das Jahr der letzten Änderung als zweistellige Ziffer zurück.
|
||||
\item[\wM{gfiGetHour}] gibt die Stunde der letzten Änderung als zweistellige Ziffer zurück.
|
||||
\item[\wM{gfiGetMin}] gibt die Minute der letzten Änderung als zweistellige Ziffer
|
||||
zurück.
|
||||
\item[\wM{gfiGetDate}] gibt das volle Datum der letzten Änderung mit Uhrzeit im Format
|
||||
\verb|dd. Monat yyyy HH:MM| zurück\footnote{Das Format wird durch die Scripte vorgegeben und muss in
|
||||
diesen ggfs. angepasst werden, sofern eine Lokalisierung gewünscht ist (vgl.
|
||||
\prettyref{sec:implementierung-scripte})}
|
||||
\item[\wM{gfiGetAuthorName}] gibt den Namen des Autors der letzten Änderung zurück.
|
||||
\item[\wM{gfiGetAuthorMail}] gibt die E-Mailadresse des Autors der letzten Änderung zurück.
|
||||
\item[\wM{gfiGetCommit}] gibt den Hash des letzten Commits zurück.
|
||||
\item[\wM{gfiGetCommitAbr}] gibt die Kurzform des letzten Commits zurück.
|
||||
\end{description}
|
||||
|
||||
\subsection{Versionsinfo}
|
||||
\DescribeMacro{\gfiInfo}
|
||||
Sofern eine kleine Zusammenfassung der aktuellen Datei gezeigt werden soll, kann dazu das Makro
|
||||
|
||||
|\gfiInfo|\oarg{Hashlänge}\oarg{Datumsformat}\oarg{Autorformat}\oarg{tcolorbox}
|
||||
|
||||
benutzt werden. Sofern alle optionalen Argumente leer gelassen werden, wird der lange Hash, das
|
||||
Standard \wM{gfiGetDate} und der Name des Autors als Hyperlink auf die E-Mailadresse in einer
|
||||
|tcolorbox| mit dem Namen |gfiInfoBox| ausgegeben.
|
||||
|
||||
\gfiInfo
|
||||
|
||||
\begin{description}
|
||||
\item[Hashlänge] kann durch Angabe von |abr| als verkürzter Hash ausgegeben werden. Standard:
|
||||
lang.
|
||||
\item[Datumsformat, Autorformat] können jeweils beliebige \TeX-Befehle enthalten. Standard:
|
||||
langes Datum und Name als Hyperlink.
|
||||
\item[tcolorbox] kann einer beliebigen über |\newtcolorbox{}| eingeführten tcolorbox
|
||||
entsprechen. Standard: |gfiInfoBox|.
|
||||
\end{description}
|
||||
|
||||
\DescribeMacro{gfiInfoBox}
|
||||
Durch Verwendung der definierten Box \verb|gfiInfoBox| können auch beliebige andere
|
||||
Zusammenstellungen erstellt werden.
|
||||
|
||||
\begin{lstlisting}[gobble=6,]
|
||||
\begin{gfiInfoBox}
|
||||
\vspace{1mm}
|
||||
Die letzte Änderung wurde durch den Autor \gfiGetAuthorName\
|
||||
(\href{mailto:\gfiGetAuthorMail}{\gfiGetAuthorMail}) am
|
||||
\gfiGetDay.\gfiGetMonth.\gfiGetYear\ um
|
||||
\gfiGetHour:\gfiGetMin\,Uhr commited. Die letzte Änderung
|
||||
hat den Commit \gfiGetCommitAbr.
|
||||
\vspace{1mm}
|
||||
\end{gfiInfoBox}
|
||||
\end{lstlisting}
|
||||
|
||||
\begin{gfiInfoBox}
|
||||
\vspace{1mm}
|
||||
Die letzte Änderung wurde durch den Autor \gfiGetAuthorName\
|
||||
(\href{mailto:\gfiGetAuthorMail}{\gfiGetAuthorMail}) am \gfiGetDay.\gfiGetMonth.\gfiGetYear\ um
|
||||
\gfiGetHour:\gfiGetMin\,Uhr commited. Die letzte Änderung hat den Commit \gfiGetCommitAbr.
|
||||
\vspace{1mm}
|
||||
\end{gfiInfoBox}
|
||||
|
||||
\subsection{Laden weiterer \TeX-Dateien}\label{sec:nutzung-include}
|
||||
Ähnlich wie im Paket \verb|svninfo| soll auch die Aufsplittung eines größeren Projekts in
|
||||
mehrere Teildateien mit den entsprechenden Versionen der einzelnen Dateien auslesbar sein. Dafür
|
||||
müssen diese Dateien ebenfalls die Endung \verb|*.tex| haben, um von den Scripten erkannt zu
|
||||
werden.
|
||||
|
||||
\DescribeMacro{gfiInclude}
|
||||
\DescribeMacro{gfiInput}
|
||||
Im Hauptdokument werden die Metadaten automatisch beim Beginn geladen. Sofern eine weitere Datei
|
||||
per \wM{include} oder \wM{input} geladen werden sollen, müssen dafür die Befehle
|
||||
|
||||
|\gfiInclude|\marg{Datei} bzw. |\gfiInput|\marg{Datei}
|
||||
|
||||
genutzt werden. Die Endung der Datei sollte dabei \textbf{nicht} mit angegeben werden. Intern
|
||||
werden die jeweiligen Befehle zum Laden einer weiteren Datei entsprechend genutzt. Außerdem wird
|
||||
die zugehörige Hilfsdatei eingebunden, um die notwendigen Metadaten zu erhalten. Nachdem die
|
||||
inkludierte Datei vollständig bearbeitet wurde, werden die Metadaten der vorherigen bzw. dann
|
||||
aktuellen Datei geladen. Es ist auch möglich, beliebige Verschachtelungen vorzunehmen.
|
||||
|
||||
|
||||
|
||||
\section{Implementierung}
|
||||
\subsection{Paket}
|
||||
Das Paket lädt automatisch die zugehörige Hilfsdatei eines Hauptdokuments über den
|
||||
entsprechenden \wM{jobname}. Der Nutzer musst hierfür keine Anpassung vornehmen. Sollten
|
||||
weitere Dokumente in eingebunden werden, müssen die bereitgestellten Befehle genutzt werden,
|
||||
sofern die zugehörigen Versioninformationen geladen werden sollen (vgl.
|
||||
\prettyref{sec:nutzung-include}). Die Hilfsdatei trägt den selben Namen, wie die zugehörige
|
||||
\TeX-Datei und enthält passende Aufrufe des \wM{gfiSet*}-Makros.
|
||||
|
||||
\DescribeMacro{\gfiSetDate}
|
||||
|\gfiSetDate|\marg{Tag}\marg{Monat}\marg{Jahr}\marg{Stunde}\marg{Minute}\marg{Lokalisierte
|
||||
Langfassung}
|
||||
|
||||
Tag, Monat, Stunde und Minute sind jeweils als zweistellige Ziffern einzulesen. Das Jahr wird
|
||||
als vierstellige Ziffer eingelesen und in der Langassung kann beliebiger Text stehen, der
|
||||
einer durch die Scripte lokalisierten Version entspricht. Entsprechend werden dadurch die
|
||||
\wM{gfiGet*}-Makros definiert. \wM{gfiGetDate} entspricht der Langfassung.
|
||||
|
||||
\DescribeMacro{\gfiSetAuthor}
|
||||
|\gfiSetAuthor|\marg{Name}\marg{E-Mail}
|
||||
|
||||
Name und E-Mail sollten die zugehörigen Daten enthalten und werden mit den \wM{gfiGet*}-Makros
|
||||
verknüpft.
|
||||
|
||||
\DescribeMacro{\gfiSetCommit}
|
||||
|
||||
|\gfiSetCommit|\marg{Hash}\marg{Hash-Abr}
|
||||
|
||||
Die volle Fassung des Commits wird im Hash, die kurze Version im Hash-Abr eingegeben und
|
||||
entsprechend mit \wM{gfiGet*} verknüpft.
|
||||
|
||||
\subsection{Scripte}\label{sec:implementierung-scripte}
|
||||
Die Scripte sind auf deutsche Monatsbezeichnungen eingestellt. Sofern hier eine andere
|
||||
Lokalisierung gewünscht wird, muss in \textit{allen} Scripten der entsprechende Eintrag in der
|
||||
Präambel geändert werden!
|
||||
|
||||
\begin{lstlisting}[gobble=8,numbers=none,language=python,%
|
||||
linewidth=0.7\textwidth,resetmargins=false]
|
||||
locale.setlocale(locale.LC_ALL, 'de_DE')
|
||||
\end{lstlisting}
|
||||
|
||||
|
||||
\subsubsection{gfi-run}
|
||||
Das \verb|gfi-run| kann sowohl zur Initialisierung als auch zur erzwungenen Aktualisierung
|
||||
aller \TeX-Dateien benutzt werden.
|
||||
\begin{lstlisting}[gobble=12,numbers=none,language=bash,%
|
||||
linewidth=0.7\textwidth,resetmargins=false]
|
||||
# alle *.tex-Dateien aktualisieren
|
||||
python gfi-run
|
||||
# eine spezielle *.tex-Datei aktualisieren
|
||||
python gfi-run datei.tex
|
||||
\end{lstlisting}
|
||||
|
||||
Das Script sucht dabei mithilfe von \verb|git ls-files| nach allen unter Versionsverwaltung
|
||||
stehenden Dateien und erstellt (überschreibend) aufgrund von \verb|git log| für jede Datei
|
||||
einzeln die passende Hilfsdatei mit den Metadaten. Wird eine Datei übergeben, so wird nicht
|
||||
geprüft, ob diese unter Verwaltung steht und eine Hilfsdatei (im Zweifel leer) erstellt.
|
||||
|
||||
\lstinputlisting[language=python,title=Quelltext von gfi-run]{gfi-run}
|
||||
|
||||
\subsubsection{post-commit}
|
||||
Der \verb|post-commit|-Hook von \verb|git| wird nach jedem Commit, der erfolgreich
|
||||
ausgeführt wurde, automatisch ausgeführt. Der Hook liest aus, welche Dateien sich verändert
|
||||
haben und ändert für die passenden \TeX-Dateien die Hilfsdateien mit den neuen Metadaten.
|
||||
Das Script sollte im Verzeichnis \verb|.git/hooks| ausführbar platziert werden.
|
||||
|
||||
\lstinputlisting[language=python,title=Quelltext von post-commit]{post-commit}
|
||||
|
||||
\subsubsection{post-merge}
|
||||
Der \verb|post-merge|-Hook von \verb|git| wird nach jedem Merge ausgeführt. Er wird auch bei
|
||||
einem nicht erfolgreichen Merge aufgerufen. Explizit bedeutet dies auch, dass nach jedem
|
||||
Pull das Script ausgeführt wird. Der Hook liest aus, welche Dateien sich verändert
|
||||
haben und ändert für die passenden \TeX-Dateien die Hilfsdateien mit den neuen Metadaten.
|
||||
Das Script sollte im Verzeichnis \verb|.git/hooks| ausführbar platziert werden.
|
||||
|
||||
\lstinputlisting[language=python,title=Quelltext von post-merge]{post-merge}
|
||||
|
||||
\clearpage
|
||||
\addcontentsline{toc}{section}{Literatur}
|
||||
\printbibliography
|
||||
\end{document}
|
||||
|
27
gfi-run
27
gfi-run
@ -18,20 +18,19 @@ index = repo.index
|
||||
|
||||
if len(sys.argv) <= 1:
|
||||
commFiles = git.ls_files(full_name=True).split("\n")
|
||||
#commit = git.log('-1', format='%h').rstrip()
|
||||
|
||||
#commit = git.log('-1', format='%h').rstriMin
|
||||
#cmt = subprocess.check_output('git log -1 --format="%s" ', shell=True).decode("utf-8").rstrip()
|
||||
|
||||
for fl in commFiles:
|
||||
flname, flext = os.path.splitext(fl)
|
||||
if flext == '.tex':
|
||||
rawdate = int(git.log('-1', fl, pretty='format:"%at"').split('"')[1])
|
||||
date = [time.strftime("%d. %B %Y %H:%M", time.gmtime(rawdate)),
|
||||
time.strftime("%d", time.gmtime(rawdate)),
|
||||
time.strftime("%m", time.gmtime(rawdate)),
|
||||
time.strftime("%Y", time.gmtime(rawdate)),
|
||||
time.strftime("%H", time.gmtime(rawdate)),
|
||||
time.strftime("%M", time.gmtime(rawdate))]
|
||||
date = [time.strftime("%d. %B %Y %H:%M", time.localtime(rawdate)),
|
||||
time.strftime("%d", time.localtime(rawdate)),
|
||||
time.strftime("%m", time.localtime(rawdate)),
|
||||
time.strftime("%Y", time.localtime(rawdate)),
|
||||
time.strftime("%H", time.localtime(rawdate)),
|
||||
time.strftime("%M", time.localtime(rawdate))]
|
||||
author = [git.log('-1', fl, pretty='format:"%an"').split('"')[1],
|
||||
git.log('-1', fl, pretty='format:"%ae"').split('"')[1]]
|
||||
commit = [git.log('-1', fl, pretty='format:"%H"').split('"')[1],
|
||||
@ -48,12 +47,12 @@ else:
|
||||
fl = sys.argv[1]
|
||||
flname, flext = os.path.splitext(fl)
|
||||
rawdate = int(git.log('-1', fl, pretty='format:"%at"').split('"')[1])
|
||||
date = [time.strftime("%d. %B %Y %H:%M", time.gmtime(rawdate)),
|
||||
time.strftime("%d", time.gmtime(rawdate)),
|
||||
time.strftime("%m", time.gmtime(rawdate)),
|
||||
time.strftime("%Y", time.gmtime(rawdate)),
|
||||
time.strftime("%H", time.gmtime(rawdate)),
|
||||
time.strftime("%M", time.gmtime(rawdate))]
|
||||
date = [time.strftime("%d. %B %Y %H:%M", time.localtime(rawdate)),
|
||||
time.strftime("%d", time.localtime(rawdate)),
|
||||
time.strftime("%m", time.localtime(rawdate)),
|
||||
time.strftime("%Y", time.localtime(rawdate)),
|
||||
time.strftime("%H", time.localtime(rawdate)),
|
||||
time.strftime("%M", time.localtime(rawdate))]
|
||||
author = [git.log('-1', fl, pretty='format:"%an"').split('"')[1],
|
||||
git.log('-1', fl, pretty='format:"%ae"').split('"')[1]]
|
||||
commit = [git.log('-1', fl, pretty='format:"%H"').split('"')[1],
|
||||
|
@ -25,8 +25,8 @@
|
||||
\renewcommand{\gfiGetDay}{#1}
|
||||
\renewcommand{\gfiGetMonth}{#2}
|
||||
\renewcommand{\gfiGetYear}{#3}
|
||||
\renewcommand{\gfiGetMin}{#4}
|
||||
\renewcommand{\gfiGetHour}{#5}
|
||||
\renewcommand{\gfiGetHour}{#4}
|
||||
\renewcommand{\gfiGetMin}{#5}
|
||||
\renewcommand{\gfiGetDate}{#6}
|
||||
}
|
||||
\providecommand{\gfiSetAuthor}[2]{%
|
||||
|
12
post-commit
12
post-commit
@ -17,12 +17,12 @@ headcommit = repo.head.commit
|
||||
index = repo.index
|
||||
|
||||
commFiles = git.diff_tree('-r', 'HEAD', no_commit_id=True, name_only=True).split("\n")
|
||||
date = [time.strftime("%d. %B %Y %H:%M", time.gmtime(headcommit.authored_date)),
|
||||
time.strftime("%d", time.gmtime(headcommit.authored_date)),
|
||||
time.strftime("%m", time.gmtime(headcommit.authored_date)),
|
||||
time.strftime("%Y", time.gmtime(headcommit.authored_date)),
|
||||
time.strftime("%H", time.gmtime(headcommit.authored_date)),
|
||||
time.strftime("%M", time.gmtime(headcommit.authored_date))]
|
||||
date = [time.strftime("%d. %B %Y %H:%M", time.localtime(headcommit.authored_date)),
|
||||
time.strftime("%d", time.localtime(headcommit.authored_date)),
|
||||
time.strftime("%m", time.localtime(headcommit.authored_date)),
|
||||
time.strftime("%Y", time.localtime(headcommit.authored_date)),
|
||||
time.strftime("%H", time.localtime(headcommit.authored_date)),
|
||||
time.strftime("%M", time.localtime(headcommit.authored_date))]
|
||||
author = [headcommit.author.name, headcommit.author.email]
|
||||
commit = [headcommit.hexsha, headcommit.hexsha[:6]]
|
||||
#commit = git.log('-1', format='%h').rstrip()
|
||||
|
12
post-merge
12
post-merge
@ -24,12 +24,12 @@ for fl in commFiles:
|
||||
flname, flext = os.path.splitext(fl)
|
||||
if flext == '.tex':
|
||||
rawdate = int(git.log('-1', fl, pretty='format:"%at"').split('"')[1])
|
||||
date = [time.strftime("%d. %B %Y %H:%M", time.gmtime(rawdate)),
|
||||
time.strftime("%d", time.gmtime(rawdate)),
|
||||
time.strftime("%m", time.gmtime(rawdate)),
|
||||
time.strftime("%Y", time.gmtime(rawdate)),
|
||||
time.strftime("%H", time.gmtime(rawdate)),
|
||||
time.strftime("%M", time.gmtime(rawdate))]
|
||||
date = [time.strftime("%d. %B %Y %H:%M", time.localtime(rawdate)),
|
||||
time.strftime("%d", time.localtime(rawdate)),
|
||||
time.strftime("%m", time.localtime(rawdate)),
|
||||
time.strftime("%Y", time.localtime(rawdate)),
|
||||
time.strftime("%H", time.localtime(rawdate)),
|
||||
time.strftime("%M", time.localtime(rawdate))]
|
||||
author = [git.log('-1', fl, pretty='format:"%an"').split('"')[1],
|
||||
git.log('-1', fl, pretty='format:"%ae"').split('"')[1]]
|
||||
commit = [git.log('-1', fl, pretty='format:"%H"').split('"')[1],
|
||||
|
Loading…
Reference in New Issue
Block a user