From 86be8db65c7c2ee47997df4a161daacfcc2996b4 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Wed, 18 Mar 2020 21:18:16 +0000
Subject: latexgit (18mar20)

git-svn-id: svn://tug.org/texlive/trunk@54391 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/latexgit/latexgit.sty | 154 +++++++++++-----------
 1 file changed, 80 insertions(+), 74 deletions(-)

(limited to 'Master/texmf-dist/tex/latex/latexgit/latexgit.sty')

diff --git a/Master/texmf-dist/tex/latex/latexgit/latexgit.sty b/Master/texmf-dist/tex/latex/latexgit/latexgit.sty
index e6fd11b02fb..f89079ab67e 100644
--- a/Master/texmf-dist/tex/latex/latexgit/latexgit.sty
+++ b/Master/texmf-dist/tex/latex/latexgit/latexgit.sty
@@ -8,7 +8,7 @@
 %% latexgit
 %% Author: Camil Staps <info@camilstaps.nl>
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{latexgit}[2016/08/24]
+\ProvidesPackage{latexgit}[2020/03/18]
 
 \RequirePackage{pgfkeys}
 \RequirePackage{datetime}
@@ -22,6 +22,7 @@
   /git/.is family, /git,
   default/.style={
     directory=.,
+    file=,
     formatDate=false,
     formatInterDateTime=\space{}at\space{},
     formatTime=false,
@@ -30,6 +31,7 @@
     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,
@@ -54,100 +56,104 @@
     \endgroup%
   \fi%
 }
-\newcommand{\gitcommithash}[1][]{%
+\catcode`\&=14\catcode`\%=11
+\def\git@space{ }
+\newcommand{\gitcommithash}[1][]{&
   \git@commithash[#1]\git@result}
-\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&
 }
-\newcommand{\gitcommitmsg}[1][]{%
+\newcommand{\gitcommitmsg}[1][]{&
   \git@commitmsg[#1]\git@result}
-\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}&
 }
-\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}&
 }
-\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&
 }
-\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&
 }
-\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}&
 }
-\newcommand{\gitcommitauthor}[1][]{%
+\newcommand{\gitcommitauthor}[1][]{&
   \git@commitauthor[#1]\git@result}
-\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}&
 }
-\newcommand{\gitcommitauthorname}[1][]{%
+\newcommand{\gitcommitauthorname}[1][]{&
   \git@commitauthorname[#1]\git@result}
-\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}&
 }
-\newcommand{\gitcommitauthoremail}[1][]{%
+\newcommand{\gitcommitauthoremail}[1][]{&
   \git@commitauthoremail[#1]\git@result}
-\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}&
 }
-\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}&
 }
-\newcommand{\gitchanges}[1][]{%
+\newcommand{\gitchanges}[1][]{&
   \git@changes[#1]{HEAD}
 }
-\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&
 }
+\catcode`\&=4\catcode`\%=14
 %% Copyright (c) 2016 Camil Staps <info@camilstaps.nl>
 %% Licensed under GPL v3.
 %%
-- 
cgit v1.2.3

