Git command formatting characters in msbuild are interpreted incorrectly

42 views Asked by At

I wish to add a property with the date of the current Git commit to the assembly info.

From my .csproj:

<Exec Command="git -C &quot;$(ProjectDir).&quot; log -1 --pretty=format:%ad"
      ConsoleToMSBuild="true"
      Condition="'$(GitCommitDate)' == ''">
    <Output TaskParameter="ConsoleOutput" PropertyName="GitCommitDate" />
</Exec>

Build output interpretation: git -C "<project directory>\." log -1 --pretty=format:-­

Output: -

Using raw format:

<Exec Command="git -C &quot;$(ProjectDir).&quot; log -1 --pretty=format:%aD"
      ConsoleToMSBuild="true"
      Condition="'$(GitCommitDate)' == ''">
    <Output TaskParameter="ConsoleOutput" PropertyName="GitCommitDate" />
</Exec>

Build output interpretation: git -C "<project directory>\." log -1 --pretty=format:­-

Output: -

Doubling % characters to escape them:

<Exec Command="git -C &quot;$(ProjectDir).&quot; log -1 --pretty=format:%%aD"
      ConsoleToMSBuild="true"
      Condition="'$(GitCommitDate)' == ''">
    <Output TaskParameter="ConsoleOutput" PropertyName="GitCommitDate" />
</Exec>

Build output interpretation: git -C "<project directory>\." log -1 --pretty=format:%-­

Output: -

This attempt worked, but it gets different details from those I want:

<Exec Command="git -C &quot;$(ProjectDir).&quot; log -1 --pretty=format:&quot;%%H %%cI&quot;"
      ConsoleToMSBuild="true"
      Condition="'$(GitCommitDate)' == ''">
    <Output TaskParameter="ConsoleOutput" PropertyName="GitCommitDate" />
</Exec>

Build output interpretation: git -C "<project directory>\." log -1 --pretty=format:"%%H %%cI"

Output: 2594b984b59b061dd714ed6a88fbee2907b30a05 2024-02-14T12:33:49-06:00

So I tried adding quotes to my original attempt:

<Exec Command="git -C &quot;$(ProjectDir).&quot; log -1 --pretty=format:&quot;%%aD&quot;"
      ConsoleToMSBuild="true"
      Condition="'$(GitCommitDate)' == ''">
    <Output TaskParameter="ConsoleOutput" PropertyName="GitCommitDate" />
</Exec>

Build output interpretation: git -C "<project directory>\ManagementConsole\." log -1 --pretty=format:"%­"

Output: -

What am I doing wrong?

What details am I missing that would help solve the question?

(I know that git show would be easier, but it failed the build with an exit code 128, which I figured would be more difficult to solve without further details.)

The - characters in the output and at the end of "build output interpretation" is added manually because I could not copy and paste it from my build output. I do not know why, but I thought that might be a clue.

0

There are 0 answers