219 lines
7.3 KiB
TeX
219 lines
7.3 KiB
TeX
% gitinfo2.sty
|
|
% Copyright 2015 Brent Longborough
|
|
%
|
|
% This work may be distributed and/or modified under the
|
|
% conditions of the LaTeX Project Public License, either version 1.3
|
|
% of this license or (at your option) any later version.
|
|
% The latest version of this license is in
|
|
% http://www.latex-project.org/lppl.txt
|
|
% and version 1.3 or later is part of all distributions of LaTeX
|
|
% version 2005/12/01 or later.
|
|
%
|
|
% This work has the LPPL maintenance status `maintained'.
|
|
% The Current Maintainer of this work is Brent Longborough.
|
|
%
|
|
% This work consists of these files:
|
|
% gitinfo2.sty, gitexinfo.sty, gitinfo2.tex, gitinfo2.pdf,
|
|
% gitinfo2test.tex, post-xxx-sample.txt,
|
|
% and gitHeadLocal.gin
|
|
% -----------------------------------------------------
|
|
\NeedsTeXFormat{LaTeX2e}
|
|
\ProvidesPackage{gitinfo2}[2015/11/22 v2.0.7 git revision information]
|
|
\RequirePackage{etoolbox}
|
|
\RequirePackage{xstring}
|
|
\RequirePackage{kvoptions}
|
|
\RequirePackage{eso-pic}
|
|
\SetupKeyvalOptions{family=gitinfo,prefix=gitInf@}
|
|
\DeclareBoolOption{draft}
|
|
\DeclareBoolOption{grumpy}
|
|
\DeclareBoolOption{local}
|
|
\DeclareBoolOption{pcount}
|
|
\DeclareBoolOption{footinfo}
|
|
\DeclareBoolOption{mark}
|
|
\DeclareBoolOption{markifdraft}
|
|
\DeclareBoolOption{markifdirty}
|
|
\DeclareBoolOption{marknotags}
|
|
\DeclareStringOption[(None)]{missing}
|
|
\DeclareStringOption[(None)]{notags}
|
|
\DeclareStringOption[(*)]{dirty}
|
|
\DeclareStringOption[4]{maxdepth}
|
|
\DeclareStringOption[1.5\baselineskip]{raisemark}
|
|
\ProcessKeyvalOptions*
|
|
\newcommand{\gitAbbrevHash}{\gitInf@missing}
|
|
\newcommand{\gitHash}{\gitInf@missing}
|
|
\newcommand{\gitAuthorName}{\gitInf@missing}
|
|
\newcommand{\gitAuthorEmail}{\gitInf@missing}
|
|
\newcommand{\gitAuthorDate}{\gitInf@missing}
|
|
\newcommand{\gitAuthorIsoDate}{\gitInf@missing}
|
|
\newcommand{\gitAuthorUnixDate}{\gitInf@missing}
|
|
\newcommand{\gitCommitterName}{\gitInf@missing}
|
|
\newcommand{\gitCommitterEmail}{\gitInf@missing}
|
|
\newcommand{\gitCommitterDate}{\gitInf@missing}
|
|
\newcommand{\gitCommitterIsoDate}{\gitInf@missing}
|
|
\newcommand{\gitCommitterUnixDate}{\gitInf@missing}
|
|
\newcommand{\gitTags}{}
|
|
\newcommand{\gitFirstTagDescribe}{\gitInf@missing}
|
|
\newcommand{\gitReferences}{\gitInf@missing}
|
|
\newcommand{\gitBranch}{\gitInf@missing}
|
|
\newcommand{\gitVtag}{}
|
|
\newcommand{\gitVtags}{}
|
|
\newcommand{\gitVtagn}{\space\gitInf@missing}
|
|
\newcommand{\gitRel}{}
|
|
\newcommand{\gitRels}{}
|
|
\newcommand{\gitReln}{\space\gitInf@missing}
|
|
\newcommand{\gitDirty}{}
|
|
\newcommand{\gitRoff}{}
|
|
\newcommand{\gitDescribe}{(None)}
|
|
\newcommand{\gitMarkPref}{[git]}
|
|
\@ifpackageloaded{xcolor}{%
|
|
\newcommand{\gitMarkFormat}{\color{gray}\small\sffamily}%
|
|
}{%
|
|
\newcommand{\gitMarkFormat}{\small\sffamily}%
|
|
}
|
|
\newcommand{\gitMark}{}
|
|
\newcommand{\gitWrapEmail}[1]{#1}
|
|
% private values
|
|
\newif\ifGI@is@a@repo@
|
|
|
|
% private constants
|
|
\providecommand{\GI@repo@prefix}{}
|
|
\ifbool{gitInf@local}{%
|
|
\providecommand{\GI@githeadinfo@file}{gitHeadLocal.gin}
|
|
\def\gitInf@maxdepth{0}
|
|
}{%
|
|
\providecommand{\GI@githeadinfo@file}{\GI@repo@prefix.git/gitHeadInfo.gin}
|
|
}
|
|
\newcommand{\gitInf@dirtflag}{}
|
|
\newcommand{\gitInf@describe}{}
|
|
\newcommand{\gitInf@mcount}{}
|
|
\newcommand{\gitInf@rel}{}
|
|
\newcommand{\gitInf@off}{}
|
|
|
|
% \TeX{}nical tools
|
|
|
|
\newcommand\GI@export@macro[1]{%
|
|
\edef\@tempa{\endgroup
|
|
\def\noexpand#1{#1}}%
|
|
\@tempa}
|
|
|
|
% finding the .git directory
|
|
|
|
\newcommand\GI@check@repo@prefix{%
|
|
\GI@is@a@repo@true
|
|
\IfFileExists{./\GI@githeadinfo@file}{%
|
|
\edef\GI@repo@prefix{./}%
|
|
}{%
|
|
\GI@set@repo@prefix}}
|
|
|
|
\newcommand\GI@set@repo@prefix{%
|
|
\begingroup \count@\gitInf@maxdepth\relax
|
|
\GI@set@repo@prefix@}
|
|
|
|
\newcommand\GI@set@repo@prefix@{%
|
|
\advance\count@\m@ne
|
|
\ifnum\count@<\z@
|
|
% \expandafter\GI@not@a@git@repo
|
|
\endgroup\relax
|
|
\else
|
|
\edef\GI@repo@prefix{../\GI@repo@prefix}%
|
|
\IfFileExists{\GI@githeadinfo@file}{%
|
|
\PackageInfo{gitinfo2}{%
|
|
gitinfo2 found : \GI@githeadinfo@file \MessageBreak
|
|
}%
|
|
\GI@export@macro\GI@githeadinfo@file
|
|
}{%
|
|
\expandafter\GI@set@repo@prefix@}%
|
|
\fi}
|
|
|
|
\GI@check@repo@prefix
|
|
\InputIfFileExists{\GI@githeadinfo@file}{}{%
|
|
\ifbool{gitInf@grumpy}{%
|
|
\PackageError{gitinfo2}{I can't find the file '\GI@githeadinfo@file'\MessageBreak
|
|
Please check the manual (gitinfo2.pdf) \MessageBreak
|
|
if you need more details}{}
|
|
}{%
|
|
\PackageWarningNoLine{gitinfo2}{I can't find the file '\GI@githeadinfo@file'.\MessageBreak
|
|
All git metadata has been set to '\gitInf@missing'}
|
|
}
|
|
}
|
|
% ---------------------------------------------------------------------
|
|
% Memoir support
|
|
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
\@ifclassloaded{memoir}{%
|
|
\ifbool{gitInf@pcount}{
|
|
\newcommand{\@gitPage}{\thepage/\thelastpage}
|
|
\addtodef{\frontmatter}{\renewcommand{\@gitPage}{\thepage}}{}
|
|
\addtodef{\mainmatter}{}{\renewcommand{\@gitPage}{\thepage/\thelastpage}}
|
|
}{%
|
|
\newcommand{\@gitPage}{\thepage}
|
|
}
|
|
\newcommand{\@gitFootRev}{Release\gitRels: \gitAbbrevHash{} (\gitAuthorDate)}
|
|
\newcommand{\@gitrFootRev}{%
|
|
\tiny\textsf{\raggedleft \@gitFootRev}%
|
|
}%
|
|
\newcommand{\@gitlFootRev}{%
|
|
\tiny\textsf{\@gitFootRev}%
|
|
}%
|
|
\copypagestyle{giplain}{plain}
|
|
\copypagestyle{giruled}{ruled}
|
|
\copypagestyle{giheadings}{headings}
|
|
\makeevenfoot{giplain}{\@gitPage}{}{\@gitrFootRev}
|
|
\makeoddfoot{giplain}{\@gitlFootRev}{}{\@gitPage}
|
|
\makeevenfoot{giruled}{\@gitPage}{}{\@gitrFootRev}
|
|
\makeoddfoot{giruled}{\@gitlFootRev}{}{\@gitPage}
|
|
\makeevenfoot{giheadings}{\@gitPage}{}{\@gitrFootRev}
|
|
\makeoddfoot{giheadings}{\@gitlFootRev}{}{\@gitPage}
|
|
\makeevenhead{giheadings}{}{}{\slshape\leftmark}
|
|
\makeoddhead{giheadings}{\slshape\rightmark}{}{}
|
|
}{}%
|
|
% ---------------------------------------------------------------------
|
|
% Watermarking
|
|
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
\ifbool{gitInf@markifdirty}{%
|
|
\IfEq{\gitDirty}{}{}{%
|
|
\booltrue{gitInf@mark}
|
|
\renewcommand{\gitMarkPref}{[Dirty]}
|
|
}%
|
|
}{}%
|
|
\ifbool{gitInf@markifdraft}{%
|
|
\ifbool{gitInf@draft}{%
|
|
\booltrue{gitInf@mark}
|
|
\renewcommand{\gitMarkPref}{[Draft]}
|
|
}{}%
|
|
}{}%
|
|
\ifbool{gitInf@mark}{%
|
|
\AddToShipoutPictureBG{%
|
|
\AtPageLowerLeft{%
|
|
\raisebox{\gitInf@raisemark}{%
|
|
\makebox[\paperwidth]{%
|
|
\begin{minipage}[b]{\paperwidth}%
|
|
\renewcommand{\baselinestretch}{1}%
|
|
\centering{\gitMarkFormat\gitMarkPref{} \textbullet{} \gitMark}%
|
|
\end{minipage}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}{}%
|
|
% ---------------------------------------------------------------------
|
|
% Datetime integration
|
|
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
\@ifpackageloaded{datetime2}{%
|
|
\IfEq{\gitAuthorDate}{\gitInf@missing}{%
|
|
\DTMsavedate{gitdate}{\THEDAY-\THEMONTH-\THEYEAR}
|
|
}{%
|
|
\StrCut{\gitAuthorDate}{-}{\gitInf@year}{\gitInf@md}
|
|
\StrCut{\gitInf@md}{-}{\gitInf@month}{\gitInf@day}
|
|
\DTMsavenoparsedate{gitdate}{\gitInf@year}{\gitInf@month}{\gitInf@day}{-1}
|
|
}
|
|
}{}%
|
|
\@ifpackageloaded{datetime}{%
|
|
\IfEq{\gitAuthorDate}{\gitInf@missing}{%
|
|
\newdate{gitdate}{\THEDAY}{\THEMONTH}{\THEYEAR}
|
|
}{%
|
|
\StrCut{\gitAuthorDate}{-}{\gitInf@year}{\gitInf@md}
|
|
\StrCut{\gitInf@md}{-}{\gitInf@month}{\gitInf@day}
|
|
\newdate{gitdate}{\gitInf@day}{\gitInf@month}{\gitInf@year}
|
|
}
|
|
}{}%
|