我希望gitinfo
通过减少所需的设置量来改进我的包裹。
为此,我希望能够在当前目录中搜索文件,然后在父目录中,然后在祖父目录中搜索文件...直到(a)找到文件[OK]或(b)找到名为.git
[错误消息a]的目录或(c)从文件系统树的顶部掉下来[错误消息b]。
我尝试过嵌套\InputIfFileExists
,但这只给我一个固定的最大级别数。
抱歉,我真的不知道最简单的方法;因此,指向要使用或复制的有用包的指针将是一个不错的选择,而不是预先简化的答案(尽管这些显然会非常受欢迎)。
读得更多一点之后,找到一个目录可能会更困难一些,所以找到一个文件.git/description
就可以了。
答案1
这与pdflatex
和 一起使用lualatex
:
\documentclass{article}
\usepackage{pdftexcmds}
\makeatletter
\newcount\Brent@level
\newcommand\BrentInput[1]{%
\Brent@level=\z@
\def\Brent@prefix{}%
\Brent@Input{#1}%
}
\def\Brent@Input#1{%
\edef\Brent@temp{\pdf@filemoddate{\Brent@prefix/.git/description}}%
\ifx\Brent@temp\@empty
\advance\Brent@level\@ne
% there's no .git/description file at this level
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{%
\ifnum\Brent@level<255
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{\InputIfFileExists{\Brent@prefix#1}{}
{%
% go up one level and retry
\edef\Brent@prefix{../\Brent@prefix}%
\Brent@Input{#1}%
}%
}
{\errmessage{Too many levels}}
}
{\errmessage{.git found}}
}
\makeatother
\begin{document}
\BrentInput{file}
\BrentInput{foo}
\end{document}
我设置了一个比当前级别高 255 级的限制。使用 XeLaTeX 时必须依赖-shell-escape
。
由于无法找到目录(至少使用\pdffilemoddate
),.git
因此目录一定包含一个名为的文件description
。