Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

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...

share|improve this question

2 Answers 2

enter image description here

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}
share|improve this answer
    
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
up vote 7 down vote accepted

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)

.PHONY : clean revision.tex $(TARGET)

revision.tex:
    echo "% Autogenerated, do not edit" > revision.tex
    echo "\\newcommand{\\revisiondate}{`git log -1 --format=\"%ad\" --date=short`}" >> revision.tex
    echo "\\newcommand{\\revision}{`git log -1 --format=\"%h\"`}" >> revision.tex

$(TARGET): $(TARGET:%.pdf=%.tex) $(SRC)
    $(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.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.