summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/gitlog/gitlog.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/gitlog/gitlog.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/gitlog/gitlog.sty')
-rw-r--r--macros/latex/contrib/gitlog/gitlog.sty111
1 files changed, 111 insertions, 0 deletions
diff --git a/macros/latex/contrib/gitlog/gitlog.sty b/macros/latex/contrib/gitlog/gitlog.sty
new file mode 100644
index 0000000000..6c6a527a8d
--- /dev/null
+++ b/macros/latex/contrib/gitlog/gitlog.sty
@@ -0,0 +1,111 @@
+% gitlog.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.
+% -----------------------------------------------------
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gitlog}[2015/11/22 0.0.beta typeset git change log]
+\RequirePackage{etoolbox}
+\RequirePackage{kvoptions}
+\RequirePackage[%
+ datamodel=gitlog,
+ bibstyle=gitlog,
+ sorting=none,
+ date=iso8601,
+ firstinits=true,
+ defernumbers=true,
+ backend=biber,
+]{biblatex}
+
+\SetupKeyvalOptions{family=gitlog,prefix=gitLog@}
+\DeclareBoolOption[false]{date}
+\DeclareComplementaryOption{nodate}{date}
+\DeclareStringOption[Change Log]{title}
+% write:
+\DeclareBoolOption[true]{write}
+\AddToKeyvalOption{gitlog}{write}{\def\gitLog@writeset{true}}
+% nowrite:
+\DeclareComplementaryOption{nowrite}{write}
+\AddToKeyvalOption{gitlog}{nowrite}{\def\gitLog@writeset{true}}
+% bibfile:
+\DeclareStringOption{bibfile}
+% set up github option depending on hyperref
+\@ifpackageloaded{hyperref}{%
+ \DeclareStringOption[]{github}
+ \DeclareStringOption[]{bitbucket}
+}{%
+ \DeclareVoidOption{github}{%
+ \PackageError{gitlog}{I can't generate GitHub links unless you load hyperref.}
+ }
+ \DeclareVoidOption{bitbucket}{%
+ \PackageError{gitlog}{I can't generate Bitbucket links unless you load hyperref.}
+ }
+}
+% process options:
+\ProcessKeyvalOptions{gitlog}
+% check if write/nowrite has been set:
+\ifdef\gitLog@writeset
+ {}
+ {% write/nowrite option has not been set,
+ % set boolean depending on value of \gitLog@bibfile:
+ \ifdefempty\gitLog@bibfile
+ {\booltrue{gitLog@write}}
+ {\boolfalse{gitLog@write}}%
+ }
+% set default for bibfile if necessary
+\ifdefempty\gitLog@bibfile
+ {\def\gitLog@bibfile{\jobname.gitlog.bib}}{}
+% make entrykey a link if github link requested
+\DeclareFieldFormat{entrykey}{\ttfamily[#1]}
+\@ifpackageloaded{hyperref}{%
+ \ifdefempty\gitLog@github{}{%
+ \DeclareFieldFormat{entrykey}{%
+ \href{https://github.com/\gitLog@github/commit/\thefield{commithash}}{\ttfamily[#1]}%
+ }
+ }
+ \ifdefempty\gitLog@bitbucket{}{%
+ \DeclareFieldFormat{entrykey}{%
+ \href{https://bitbucket.org/\gitLog@bitbucket/commits/\thefield{commithash}}{\ttfamily[#1]}%
+ }
+ }
+}{}
+\newcommand{\printGitLog}{%
+ \nocite{*}
+ \raggedright
+ \printbibliography[title={\gitLog@title},type=gitcommit]
+}
+\ifgitLog@date
+ \newbibmacro*{date+author}{%
+ \printtext{\\}%
+ \usebibmacro{date}%
+ \setunit*{, }%
+ \usebibmacro{author}%
+ }
+\else
+ \newbibmacro*{date+author}{%
+ \relax
+ }
+\fi
+\ifgitLog@write
+ {\catcode`\%=12
+ \immediate\write18{
+ git --no-pager log --reverse --pretty="format:@gitcommit{%h,%n
+ author = {%an},%n
+ date = {%ad},%n
+ title = {%B},%n
+ commithash = {%H}
+ }" --date=short > \gitLog@bibfile}
+ }
+\else
+ \relax
+\fi
+\addbibresource{\gitLog@bibfile}