# Inserting git commit date without hooks

Is there a way to insert the last git commit date into a document without having to add git hooks (like the gitinfo package does it)?

I'm not 100% sure how LaTeX packages work, but if they can access the current directory during compile-time and if they can execute external commands, that should easily be possible...

-

This is svn but any command line is the same.

Depending on your configuration you probably need

pdflatex --enable-write18 filename


to enable \write18 to be a hook to execute shell commands.

this writes to a temporary file using the shell escape, then inputs it

\documentclass{article}

\begin{document}

\immediate\write18{svn info \jobname.tex | grep "Changed Date" > \jobname.info }
\fbox{\input{\jobname.info}}

\end{document}

-
Thank you! This works (although the configuration might be a little annoying depending on the software used) :) –  Danilo Bargen Oct 4 '12 at 23:18
Corresponding git write18 command could be: \write18{git log -1 --format="\@percentchar ad" --date=short > \jobname.info} –  Danilo Bargen Oct 7 '12 at 21:35
\immediate\write18{git log -1 --pretty=format:"%h%x3b%ad" --date=short > \jobname.info} this is the line I'm using for git at the moment. –  Dror May 23 '13 at 20:35

I ended up using a custom Makefile to insert the revision info.

When creating a Makefile instead of using the --enable-write18 compiler flag, you require people to use a specific compilation method. That sucks. But the same thing counts for write18, as people have to configure their compiler to allow possibly insecure access to their system. By using a Makefile, the security risk of write18 is reduced, while providing an almost cross-platform method of compiling your document (Make is available when using cygwin on Windows; cygwin usually comes with git anyways). To (intelligently) compile the document itself, you can use latexmk on Linux and OS X (comes with TeXLive) and texify on Windows (comes with MiKTeX).

This is the Makefile:

TARGET=main.pdf
LL=latexmk -pdf
CLEAN=latexmk -C

all: revision.tex $(TARGET) pdf: revision.tex$(TARGET)

$(LL)$<

clean:
\$(CLEAN)
rm -f revision.tex


If people want to build the PDF directly from their favorite IDE, they can tell the IDE to trigger "make". This should work with most software. When you use vim for example, you can use a mapping like this:

map <leader>m :w<CR> :!make<CR><CR>


The Makefile creates a file called revision.tex which looks like this:

% Autogenerated, do not edit
\newcommand{\revisiondate}{2012-10-17}
\newcommand{\revision}{e8e5238}


To insert it into the main document, simply use \input{revision} and then insert \revisiondate or \revision at the desired place.

-