Skip to content

Commit

Permalink
[xa-prep-tasks] implemented GitCommitTime task
Browse files Browse the repository at this point in the history
Context: dotnet#181 (in comments)

In several places throughout the build, we are running a command such
as `<Exec Command="touch -m -t `git log -1 --format=%25cd
--date=format-local:%25Y%25m%25d%25H%25M.%25S` Makefile" />`, which
will not work on Windows.

The solution is to create an MSBuild task in xa-prep-tasks named
`GitCommitTime` that will work cross-platform. `GitCommitTime` returns
a string value that can be passed to the `Touch` MSBuild task.
  • Loading branch information
jonathanpeppers committed Aug 10, 2017
1 parent 024db5f commit 3e49396
Show file tree
Hide file tree
Showing 8 changed files with 86 additions and 21 deletions.
11 changes: 7 additions & 4 deletions build-tools/android-toolchain/android-toolchain.targets
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,13 @@
</Target>
<Target Name="_SetMxeToolchainMakefileTimeToLastCommitTimestamp"
Condition=" '$(NeedMxe)' == 'true' And ($(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win64:')) Or $(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win32:')))">
<Exec
Command="touch -m -t `git log -1 --format=%25cd --date=format-local:%25Y%25m%25d%25H%25M.%25S` Makefile"
WorkingDirectory="..\..\external\mxe"
/>
<GitCommitTime
WorkingDirectory="..\..\external\mxe"
ToolPath="$(GitToolPath)"
ToolExe="$(GitToolExe)">
<Output TaskParameter="Time" PropertyName="_MxeCommitTime" />
</GitCommitTime>
<Touch Files="..\..\external\mxe\Makefile" Time="$(_MxeCommitTime)" />
</Target>
<ItemGroup>
<_AndroidMxeToolchain Include="$(MingwCommandPrefix32)" Condition="$(AndroidSupportedHostJitAbisForConditionalChecks.Contains (':mxe-Win32:'))" />
Expand Down
11 changes: 7 additions & 4 deletions build-tools/libzip/libzip.targets
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@
<Target Name="Build" DependsOnTargets="$(BuildDependsOn)" />
<Target Name="Clean" />
<Target Name="_SetCMakeListsTxtTimeToLastCommitTimestamp">
<Exec
Command="touch -m -t `git log -1 --format=%25cd --date=format-local:%25Y%25m%25d%25H%25M.%25S` CMakeLists.txt"
WorkingDirectory="$(LibZipSourceFullPath)"
/>
<GitCommitTime
WorkingDirectory="$(LibZipSourceFullPath)"
ToolPath="$(GitToolPath)"
ToolExe="$(GitToolExe)">
<Output TaskParameter="Time" PropertyName="_LibZipCommitTime" />
</GitCommitTime>
<Touch Files="$(LibZipSourceFullPath)\CMakeLists.txt" Time="$(_LibZipCommitTime)" />
</Target>
<Target Name="_Configure"
Condition=" '@(_LibZipTarget)' != '' "
Expand Down
23 changes: 15 additions & 8 deletions build-tools/mono-runtimes/mono-runtimes.targets
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.GitCommitTime" />
<Target Name="Build" DependsOnTargets="$(BuildDependsOn)" />
<PropertyGroup>
<_SourceTopDir>..\..</_SourceTopDir>
Expand Down Expand Up @@ -116,14 +117,20 @@
/>
</ItemGroup>
<Target Name="_SetAutogenShTimeToLastCommitTimestamp">
<Exec
Command="touch -m -t `git log -1 --format=%25cd --date=format-local:%25Y%25m%25d%25H%25M.%25S` autogen.sh"
WorkingDirectory="$(MonoSourceFullPath)"
/>
<Exec
Command="touch -m -t `git log -1 --format=%25cd --date=format-local:%25Y%25m%25d%25H%25M.%25S` Makefile.config.in"
WorkingDirectory="$(LlvmSourceFullPath)"
/>
<GitCommitTime
WorkingDirectory="$(MonoSourceFullPath)"
ToolPath="$(GitToolPath)"
ToolExe="$(GitToolExe)">
<Output TaskParameter="Time" PropertyName="_MonoCommitTime" />
</GitCommitTime>
<Touch Files="$(MonoSourceFullPath)\autogen.sh" Time="$(_MonoCommitTime)" />
<GitCommitTime
WorkingDirectory="$(LlvmSourceFullPath)"
ToolPath="$(GitToolPath)"
ToolExe="$(GitToolExe)">
<Output TaskParameter="Time" PropertyName="_LlvmCommitTime" />
</GitCommitTime>
<Touch Files="$(LlvmSourceFullPath)\Makefile.config.in" Time="$(_LlvmCommitTime)" />
</Target>
<Target Name="_PrepareLlvmItems">
<ItemGroup>
Expand Down
1 change: 1 addition & 0 deletions build-tools/scripts/RequiredPrograms.targets
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.DownloadUri" />
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.PrepareInstall" />
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.Which" />
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.GitCommitTime" />
<Target Name="CheckForRequiredPrograms"
Condition=" '@(RequiredProgram)' != '' "
Inputs="@(RequiredProgram)"
Expand Down
1 change: 1 addition & 0 deletions build-tools/scripts/XAVersionInfo.targets
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.GitBranch" />
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.GitCommitHash" />
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.GitCommitsInRange" />
<UsingTask AssemblyFile="$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\xa-prep-tasks.dll" TaskName="Xamarin.Android.BuildTools.PrepTasks.GitCommitTime" />
<Target Name="GetXAVersionInfo">
<GitBlame
FileName="$(XamarinAndroidSourcePath)\Configuration.props"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using System;

using Microsoft.Build.Framework;

namespace Xamarin.Android.BuildTools.PrepTasks
{
public sealed class GitCommitTime : Git
{
[Output]
public string Time { get; set; }

protected override bool LogTaskMessages {
get { return false; }
}

public GitCommitTime ()
{
}

public override bool Execute ()
{
Log.LogMessage (MessageImportance.Low, $"Task {nameof (GitCommitTime)}");
Log.LogMessage (MessageImportance.Low, $" {nameof (WorkingDirectory)}: {WorkingDirectory.ItemSpec}");

base.Execute ();

Log.LogMessage (MessageImportance.High, $" [Output] {nameof (Time)}: {Time}");

return !Log.HasLoggedErrors;
}

protected override string GenerateCommandLineCommands ()
{
//NOTE: this command needs to return a string that is valid to pass to DateTime.Parse()
// The <Touch> MSBuild task requires this: https://docs.microsoft.com/en-us/visualstudio/msbuild/touch-task
return "log -1 --format=%cd --date=format-local:\"%Y/%m/%d %H:%M:%S\"";
}

protected override void LogEventsFromTextOutput (string singleLine, MessageImportance messageImportance)
{
if (string.IsNullOrEmpty (singleLine))
return;
Time = singleLine;
}
}
}
3 changes: 2 additions & 1 deletion build-tools/xa-prep-tasks/xa-prep-tasks.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
Expand Down Expand Up @@ -41,6 +41,7 @@
<Compile Include="Xamarin.Android.BuildTools.PrepTasks\Git.cs" />
<Compile Include="Xamarin.Android.BuildTools.PrepTasks\GitBranch.cs" />
<Compile Include="Xamarin.Android.BuildTools.PrepTasks\GitCommitHash.cs" />
<Compile Include="Xamarin.Android.BuildTools.PrepTasks\GitCommitTime.cs" />
<Compile Include="Xamarin.Android.BuildTools.PrepTasks\HashFileContents.cs" />
<Compile Include="Xamarin.Android.BuildTools.PrepTasks\PathToolTask.cs" />
<Compile Include="Xamarin.Android.BuildTools.PrepTasks\SystemUnzip.cs" />
Expand Down
11 changes: 7 additions & 4 deletions src/sqlite-xamarin/sqlite-xamarin.targets
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="_SetReadmeTimeToLastCommitTimestamp">
<Exec
Command="touch -m -t `git log -1 --format=%25cd --date=format-local:%25Y%25m%25d%25H%25M.%25S` README.version"
WorkingDirectory="$(SqliteSourceFullPath)"
/>
<GitCommitTime
WorkingDirectory="$(SqliteSourceFullPath)"
ToolPath="$(GitToolPath)"
ToolExe="$(GitToolExe)">
<Output TaskParameter="Time" PropertyName="_SqliteCommitTime" />
</GitCommitTime>
<Touch Files="$(SqliteSourceFullPath)\README.version" Time="$(_SqliteCommitTime)" />
</Target>
<ItemGroup>
<!-- build outputs include (if enabled):
Expand Down

0 comments on commit 3e49396

Please # to comment.