From c8b8ea37fe9cd71b53223dff23f291b2f158fc0f Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 19 Mar 2020 03:01:18 +0000 Subject: CTAN sync 202003190301 --- macros/latex/contrib/latexgit/latexgit.dtx | 174 +++++++++++++++++------------ macros/latex/contrib/latexgit/latexgit.pdf | Bin 427656 -> 435404 bytes 2 files changed, 100 insertions(+), 74 deletions(-) (limited to 'macros/latex/contrib/latexgit') diff --git a/macros/latex/contrib/latexgit/latexgit.dtx b/macros/latex/contrib/latexgit/latexgit.dtx index df840b5e1f..100d1d16a8 100644 --- a/macros/latex/contrib/latexgit/latexgit.dtx +++ b/macros/latex/contrib/latexgit/latexgit.dtx @@ -58,6 +58,7 @@ Licensed under GPL v3. \usepackage{enumitem} \usepackage{verbatim} \usepackage{amssymb} +\usepackage{xstring} \EnableCrossrefs \CodelineIndex \RecordChanges @@ -112,6 +113,7 @@ Licensed under GPL v3. %\gitchanges % %\DoNotIndex{\def,\edef,\expandafter,\global,\let,\newcommand,\relax,\catcode} +%\DoNotIndex{\%,\&} % this does not work currently due to a known bug %\DoNotIndex{\begingroup,\endgroup} %\expandafter\DoNotIndex\expandafter{\string\^} %\DoNotIndex{\hbox,\ifdim,\setbox,\wd} @@ -121,6 +123,7 @@ Licensed under GPL v3. %\DoNotIndex{\space,\unskip} %\DoNotIndex{\LaTeX,\pgfkeys,\changes} %\DoNotIndex{\formatdate,\formattime} +%\DoNotIndex{\StrSubstitute} %\DoNotIndex{\git@@revision,\git@@thisdate,\git@@thishash,\git@@thismsg,\git@@parent} % %\begin{abstract} @@ -188,6 +191,8 @@ Licensed under GPL v3. % Use the git repository in directory \verb$DIR$ (or its first parent % directory that is a git repository). \latexgit{} will \bashcmd{cd} to this % directory before executing the actual \git{} command. +% \item[file=FILE] +% Get the information for the last commit modifying \verb$FILE$. % \item[formatDate] % Format dates using \textsf{datetime}'s \cs{formatdate}. % \item[formatTime] @@ -235,7 +240,7 @@ Licensed under GPL v3. % \end{comment} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{latexgit}[2016/08/24] +\ProvidesPackage{latexgit}[2020/03/18] \RequirePackage{pgfkeys} \RequirePackage{datetime} @@ -271,6 +276,7 @@ Licensed under GPL v3. /git/.is family, /git, default/.style={ directory=., + file=, formatDate=false, formatInterDateTime=\space{}at\space{}, formatTime=false, @@ -279,6 +285,7 @@ Licensed under GPL v3. shortHash=true, }, directory/.estore in=\git@opt@Directory, + file/.estore in=\git@opt@File, formatDate/.is if=git@opt@FormatDate, formatInterDateTime/.estore in=\git@opt@FormatInterDateTime, formatTime/.is if=git@opt@FormatTime, @@ -312,12 +319,26 @@ Licensed under GPL v3. % \end{macrocode} %\end{macro} % +%In what follows, \verb$%$ may be used in calls to \git{}. Therefore we use +%\verb$&$ as comment character. +% \begin{macrocode} +\catcode`\&=14\catcode`\%=11 +% \end{macrocode} +% +%\begin{macro}{\git@space} +% For internal use, when a space is required after a \texttt{csname} in a +% call to \cs{git@command}. +% \begin{macrocode} +\def\git@space{ } +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\gitcommithash} % Get a commit hash. % \gitoptions{directory,revision,shortHash} % % \begin{macrocode} -\newcommand{\gitcommithash}[1][]{% +\newcommand{\gitcommithash}[1][]{& \git@commithash[#1]\git@result} % \end{macrocode} %\end{macro} @@ -325,15 +346,15 @@ Licensed under GPL v3. %\begin{macro}{\git@commithash} % Like \cs{gitcommithash}, but does not return the output. % \begin{macrocode} -\newcommand{\git@commithash}[1][]{% - \pgfkeys{/git,default,#1}% - \ifgit@opt@ShortHash% - \git@command{git log -n 1 --oneline \git@opt@Revision - | cut -d' ' -f1}% - \else% - \git@command{git log -n 1 \git@opt@Revision - | head -1 | cut -d' ' -f2}% - \fi% +\newcommand{\git@commithash}[1][]{& + \pgfkeys{/git,default,#1}& + \ifgit@opt@ShortHash& + \git@command{git log -n 1 --format=%h + \git@opt@Revision\git@space -- \git@opt@File}& + \else& + \git@command{git log -n 1 --format=%H + \git@opt@Revision\git@space -- \git@opt@File}& + \fi& } % \end{macrocode} %\end{macro} @@ -343,7 +364,7 @@ Licensed under GPL v3. % \gitoptions{directory,revision} % % \begin{macrocode} -\newcommand{\gitcommitmsg}[1][]{% +\newcommand{\gitcommitmsg}[1][]{& \git@commitmsg[#1]\git@result} % \end{macrocode} %\end{macro} @@ -351,10 +372,10 @@ Licensed under GPL v3. %\begin{macro}{\git@commitmsg} % Like \cs{gitcommitmsg}, but does not return the output. % \begin{macrocode} -\newcommand{\git@commitmsg}[1][]{% - \pgfkeys{/git,default,#1}% - \git@command{git log -n 1 --oneline \git@opt@Revision - | cut -d' ' -f2-}% +\newcommand{\git@commitmsg}[1][]{& + \pgfkeys{/git,default,#1}& + \git@command{git log -n 1 --format=%B + \git@opt@Revision\git@space -- \git@opt@File}& } % \end{macrocode} %\end{macro} @@ -363,8 +384,8 @@ Licensed under GPL v3. % Format a commit date in ISO format using \textsf{datetime}'s % \cs{formatdate}. % \begin{macrocode} -\def\git@formatCommitDate#1-#2-#3 #4:#5:#6 +#7\relax{% - \formatdate{#3}{#2}{#1}% +\def\git@formatCommitDate#1-#2-#3 #4:#5:#6 +#7\relax{& + \formatdate{#3}{#2}{#1}& } % \end{macrocode} %\end{macro} @@ -373,11 +394,11 @@ Licensed under GPL v3. % Format a commit time using \textsf{datetime}'s \cs{formattime}. % \gitoptions{showTimeZone} % \begin{macrocode} -\def\git@formatCommitTime#1-#2-#3 #4:#5:#6 +#7\relax{% - \formattime{#4}{#5}{#6}% - \ifgit@opt@ShowTimeZone% - \space(+#7\unskip)% - \fi% +\def\git@formatCommitTime#1-#2-#3 #4:#5:#6 +#7\relax{& + \formattime{#4}{#5}{#6}& + \ifgit@opt@ShowTimeZone& + \space(+#7\unskip)& + \fi& } % \end{macrocode} %\end{macro} @@ -389,19 +410,19 @@ Licensed under GPL v3. % \gitoptions{directory,formatDate,formatTime,revision,showTimeZone} % % \begin{macrocode} -\newcommand{\gitcommitdate}[1][]{% - \git@commitdate[#1]% - \ifgit@opt@FormatDate% - \expandafter\git@formatCommitDate\git@rawresult\relax% - \ifgit@opt@FormatTime% - \git@opt@FormatInterDateTime% - \expandafter\git@formatCommitTime\git@rawresult\relax% +\newcommand{\gitcommitdate}[1][]{& + \git@commitdate[#1]& + \ifgit@opt@FormatDate& + \expandafter\git@formatCommitDate\git@rawresult\relax& + \ifgit@opt@FormatTime& + \git@opt@FormatInterDateTime& + \expandafter\git@formatCommitTime\git@rawresult\relax& \fi - \else\ifgit@opt@FormatTime% - \expandafter\git@formatCommitTime\git@rawresult\relax% + \else\ifgit@opt@FormatTime& + \expandafter\git@formatCommitTime\git@rawresult\relax& \else - \git@result% - \fi\fi% + \git@result& + \fi\fi& } % \end{macrocode} %\end{macro} @@ -409,10 +430,10 @@ Licensed under GPL v3. %\begin{macro}{\git@commitdate} % Like \cs{gitcommitdate}, but does not return the output. % \begin{macrocode} -\newcommand{\git@commitdate}[1][]{% - \pgfkeys{/git,default,#1}% - \git@command{git log -n 1 --date=iso \git@opt@Revision - | grep Date | head -1 | cut -d' ' -f2-}% +\newcommand{\git@commitdate}[1][]{& + \pgfkeys{/git,default,#1}& + \git@command{git log -n 1 --format=%ai + \git@opt@Revision\git@space -- \git@opt@File}& } % \end{macrocode} %\end{macro} @@ -422,7 +443,7 @@ Licensed under GPL v3. % \gitoptions{directory,revision} % % \begin{macrocode} -\newcommand{\gitcommitauthor}[1][]{% +\newcommand{\gitcommitauthor}[1][]{& \git@commitauthor[#1]\git@result} % \end{macrocode} %\end{macro} @@ -430,10 +451,10 @@ Licensed under GPL v3. %\begin{macro}{\git@commitauthor} % Like \cs{gitcommitauthor}, but does not return the output. % \begin{macrocode} -\newcommand{\git@commitauthor}[1][]{% - \pgfkeys{/git,default,#1}% - \git@command{git log -n 1 \git@opt@Revision - | grep Author | head -1 | cut -d' ' -f2-}% +\newcommand{\git@commitauthor}[1][]{& + \pgfkeys{/git,default,#1}& + \git@command{git log -n 1 --format='%an <%ae>' + \git@opt@Revision\git@space -- \git@opt@File}& } % \end{macrocode} %\end{macro} @@ -443,7 +464,7 @@ Licensed under GPL v3. % \gitoptions{directory,revision} % % \begin{macrocode} -\newcommand{\gitcommitauthorname}[1][]{% +\newcommand{\gitcommitauthorname}[1][]{& \git@commitauthorname[#1]\git@result} % \end{macrocode} %\end{macro} @@ -451,10 +472,10 @@ Licensed under GPL v3. %\begin{macro}{\git@commitauthorname} % Like \cs{gitcommitauthorname}, but does not return the output. % \begin{macrocode} -\newcommand{\git@commitauthorname}[1][]{% - \pgfkeys{/git,default,#1}% - \git@command{git log -n 1 \git@opt@Revision - | grep Author | head -1 | cut -d' ' -f2- | cut -d'<' -f1}% +\newcommand{\git@commitauthorname}[1][]{& + \pgfkeys{/git,default,#1}& + \git@command{git log -n 1 --format=%an + \git@opt@Revision\git@space -- \git@opt@File}& } % \end{macrocode} %\end{macro} @@ -464,7 +485,7 @@ Licensed under GPL v3. % \gitoptions{directory,revision} % % \begin{macrocode} -\newcommand{\gitcommitauthoremail}[1][]{% +\newcommand{\gitcommitauthoremail}[1][]{& \git@commitauthoremail[#1]\git@result} % \end{macrocode} %\end{macro} @@ -472,11 +493,10 @@ Licensed under GPL v3. %\begin{macro}{\git@commitauthoremail} % Like \cs{gitcommitauthoremail}, but does not return the output. % \begin{macrocode} -\newcommand{\git@commitauthoremail}[1][]{% - \pgfkeys{/git,default,#1}% - \git@command{git log -n 1 \git@opt@Revision - | grep Author | head -1 | cut -d' ' -f2- - | cut -d'<' -f2 | cut -d'>' -f1}% +\newcommand{\git@commitauthoremail}[1][]{& + \pgfkeys{/git,default,#1}& + \git@command{git log -n 1 --format=%ae + \git@opt@Revision\git@space -- \git@opt@File}& } % \end{macrocode} %\end{macro} @@ -484,10 +504,11 @@ Licensed under GPL v3. %\begin{macro}{\git@commitparent} % Get the hash of the first parent. % \begin{macrocode} -\newcommand{\git@commitparent}[1][]{% - \pgfkeys{/git,default,#1}% - \git@command{git log -n 1 --pretty=raw \git@opt@Revision - | grep parent | head -1 | cut -d' ' -f2}% +\newcommand{\git@commitparent}[1][]{& + \pgfkeys{/git,default,#1}& + \git@command{git log -n 1 --format=%p + \git@opt@Revision\git@space -- \git@opt@File + | cut -d' ' -f2}& } % \end{macrocode} %\end{macro} @@ -496,7 +517,7 @@ Licensed under GPL v3. % Record the full \git{} commit history (following first parents using % \cs{git@commitparent}) using \cs{changes}. % \begin{macrocode} -\newcommand{\gitchanges}[1][]{% +\newcommand{\gitchanges}[1][]{& \git@changes[#1]{HEAD} } % \end{macrocode} @@ -505,26 +526,31 @@ Licensed under GPL v3. %\begin{macro}{\git@changes} % Like \cs{gitchanges}, but accepts an extra argument for the revision. % \begin{macrocode} -\newcommand{\git@changes}[2][]{% - \edef\git@@revision{#2}% - \git@commithash[revision=\git@@revision]% - \edef\git@@thishash{\git@rawresult}% - \git@command{git log -n 1 --date=iso \git@@revision - | grep Date | head -1 | cut -d' ' -f4}% - \edef\git@@thisdate{\git@rawresult}% - \git@commitmsg[revision=\git@@revision]% - \edef\git@@thismsg{\git@rawresult}% - \changes{\git@@thisdate\unskip: \git@@thishash}\git@@thisdate\git@@thismsg% - \git@commitparent[revision=\git@@revision]% - \let\git@@parent\git@rawresult% +\newcommand{\git@changes}[2][]{& + \edef\git@@revision{#2}& + \git@commithash[revision=\git@@revision]& + \edef\git@@thishash{\git@rawresult}& + \git@command{git log -n 1 --format=%ad --date=short \git@opt@Revision}& + \edef\git@@thisdate{\git@rawresult}& + \git@commitmsg[revision=\git@@revision]& + & TODO: this removes '=' characters because they break \changes, but the real + & solution would be to put something back that restores these characters. + \StrSubstitute[0]{\git@rawresult}{=}{}[\git@@thismsg]& + \changes{\git@@thisdate\unskip: \git@@thishash}{\git@@thisdate}{\git@@thismsg}& + \git@commitparent[revision=\git@@revision]& + \let\git@@parent\git@rawresult& \setbox0=\hbox{\git@@parent\unskip}\ifdim\wd0=0pt - \else% - \git@changes{\git@@parent}% - \fi% + \else& + \git@changes{\git@@parent}& + \fi& } % \end{macrocode} %\end{macro} % +%Reset the catcodes for \verb$%$ and \verb$&$: +% \begin{macrocode} +\catcode`\&=4\catcode`\%=14 +% \end{macrocode} % % \begin{comment} % diff --git a/macros/latex/contrib/latexgit/latexgit.pdf b/macros/latex/contrib/latexgit/latexgit.pdf index 5ddb54d567..a6dd138f0c 100644 Binary files a/macros/latex/contrib/latexgit/latexgit.pdf and b/macros/latex/contrib/latexgit/latexgit.pdf differ -- cgit v1.2.3