Skip to content

Commit 1182808

Browse files
Fix VMR initialization (#15169)
Co-authored-by: Andrii Patsula <andriy.patsula@gmail.com>
1 parent fe452cf commit 1182808

File tree

6 files changed

+70
-21
lines changed

6 files changed

+70
-21
lines changed

eng/Build.props

-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
<When Condition=" '$(InitializeVMR)' == 'true' ">
44
<!-- VMR bootstrap -->
55
<ItemGroup>
6-
<ProjectToBuild Include="$(RepoRoot)src/SourceBuild/Arcade/src/SourceBuild.Tasks.csproj" BuildInParallel="false" />
76
<ProjectToBuild Include="$(RepoRoot)src/VirtualMonoRepo/Tasks/VirtualMonoRepo.Tasks.csproj" BuildInParallel="false" />
87
<ProjectToBuild Include="$(RepoRoot)src/VirtualMonoRepo/InitializeVMR.proj" BuildInParallel="false" />
98
</ItemGroup>

eng/Versions.props

+6
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,12 @@
204204
<MicrosoftNETWorkloadEmscriptennet7Manifest80100Version>8.0.0-alpha.1.22620.1</MicrosoftNETWorkloadEmscriptennet7Manifest80100Version>
205205
<EmscriptenWorkloadManifestVersion>$(MicrosoftNETWorkloadEmscriptennet7Manifest80100Version)</EmscriptenWorkloadManifestVersion>
206206
</PropertyGroup>
207+
<!-- dependencies for VMR initialization -->
208+
<PropertyGroup>
209+
<!-- These two MicrosoftBuild versions are required to build VMR initialization tasks -->
210+
<MicrosoftBuildFrameworkVersion>15.7.179</MicrosoftBuildFrameworkVersion>
211+
<MicrosoftBuildUtilitiesCoreVersion>15.7.179</MicrosoftBuildUtilitiesCoreVersion>
212+
</PropertyGroup>
207213
<PropertyGroup>
208214
<!-- pinned dependency. This package is not being produced outside of the 2.0 branch of corefx and should not change. -->
209215
<CLI_NETStandardLibraryNETFrameworkVersion>2.0.1-servicing-26011-01</CLI_NETStandardLibraryNETFrameworkVersion>

src/VirtualMonoRepo/InitializeVMR.proj

+8-15
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
<InitializeVMR>true</InitializeVMR>
1414
</PropertyGroup>
1515

16-
<Import Project="../SourceBuild/Arcade/tools/SourceBuildArcadeTarball.targets" />
17-
1816
<!-- Pull back in some properties from the tarball defaults -->
1917
<PropertyGroup>
2018
<VmrGitInfoDir>$(TarballGitInfoDir)</VmrGitInfoDir>
@@ -30,9 +28,7 @@
3028
Instead of cloning the repositories, we pull the sources via the `darc vmr initialize` command.
3129
Most of the targets are reused from the tarball generation process (SourceBuildArcadeTarball.targets).
3230
-->
33-
<Target Name="InitializeVMR" DependsOnTargets="GenerateFullNuGetVersion;
34-
GenerateVersionFile;
35-
InitializeCleanVmr;
31+
<Target Name="InitializeVMR" DependsOnTargets="InitializeCleanVmr;
3632
InitializeRepoAndDependentsRecursive">
3733
<Message Text="VMR was successfully initialized in '$(VmrDir)'" Importance="High" />
3834
</Target>
@@ -50,34 +46,31 @@
5046
<Exec WorkingDirectory="$(VmrDir)" Command="git commit -m 'Initial commit of the VMR%0D%0A%0D%0A[[ commit created by automation ]]'" />
5147
</Target>
5248

53-
<Target Name="InitializeRepoAndDependentsRecursive"
54-
DependsOnTargets="GetSourceBuildIntermediateNupkgNameConvention">
49+
<Target Name="InitializeRepoAndDependentsRecursive">
50+
<!-- Get installer's SHA if not passed in -->
51+
<Exec Command="git rev-parse HEAD" ConsoleToMSBuild="true" WorkingDirectory="$(RepoRoot)" Condition=" '$(TargetRevision)' == '' ">
52+
<Output TaskParameter="ConsoleOutput" ItemName="RootRepoCommitSha" />
53+
</Exec>
5554

5655
<PropertyGroup>
5756
<RootRepoName>$([System.IO.Path]::GetFileName("$(RepoRoot.TrimEnd('/').TrimEnd('\\'))"))</RootRepoName>
5857
<TargetRevision Condition=" '$(TargetRevision)' == '' ">@(RootRepoCommitSha)</TargetRevision>
5958
</PropertyGroup>
6059

61-
<!-- Get installer's sha -->
62-
<Exec Command="git rev-parse HEAD" ConsoleToMSBuild="true" WorkingDirectory="$(RepoRoot)">
63-
<Output TaskParameter="ConsoleOutput" ItemName="RootRepoCommitSha" />
64-
</Exec>
65-
66-
<Message Text="--> Initializing individual repos recursively. Starting from $(RootRepoName) / $(TargetRevision)" Importance="High" />
60+
<Message Text="--> Initializing individual repos recursively. Starting from installer / $(TargetRevision)" Importance="High" />
6761

6862
<!-- We are hardcoding the package version for the root repo (installer), since there
6963
isn't a Version.Details.xml file to read it from.
7064
See https://github.com/dotnet/source-build/issues/2250 -->
7165
<VirtualMonoRepo_Initialize
72-
Repository="$(RootRepoName)"
66+
Repository="installer"
7367
Revision="$(TargetRevision)"
7468
PackageVersion="8.0.100"
7569
Recursive="true"
7670
VmrPath="$(VmrDir)"
7771
TmpPath="$(TmpDir)" />
7872

7973
<Message Text=" -> Done initializing individual repositories recursively" Importance="High" />
80-
8174
</Target>
8275

8376
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using System;
5+
using Microsoft.DotNet.DarcLib;
6+
using Microsoft.DotNet.DarcLib.Helpers;
7+
using Microsoft.DotNet.DarcLib.VirtualMonoRepo;
8+
using Microsoft.Extensions.Logging;
9+
10+
namespace Microsoft.DotNet.VirtualMonoRepo.Tasks;
11+
12+
public class GitFileManagerFactory : IGitFileManagerFactory
13+
{
14+
private readonly IVmrInfo _vmrInfo;
15+
private readonly VmrRemoteConfiguration _remoteConfiguration;
16+
private readonly IProcessManager _processManager;
17+
private readonly IVersionDetailsParser _versionDetailsParser;
18+
private readonly ILoggerFactory _loggerFactory;
19+
20+
public GitFileManagerFactory(
21+
IVmrInfo vmrInfo,
22+
VmrRemoteConfiguration remoteConfiguration,
23+
IProcessManager processManager,
24+
IVersionDetailsParser versionDetailsParser,
25+
ILoggerFactory loggerFactory)
26+
{
27+
_vmrInfo = vmrInfo;
28+
_remoteConfiguration = remoteConfiguration;
29+
_processManager = processManager;
30+
_versionDetailsParser = versionDetailsParser;
31+
_loggerFactory = loggerFactory;
32+
}
33+
34+
public IGitFileManager Create(string repoUri)
35+
=> new GitFileManager(CreateGitRepo(repoUri), _versionDetailsParser, _loggerFactory.CreateLogger<GitFileManager>());
36+
37+
private IGitRepo CreateGitRepo(string repoUri) => GitRepoTypeParser.ParseFromUri(repoUri) switch
38+
{
39+
GitRepoType.AzureDevOps => throw new Exception("VMR initialization should not require Azure DevOps repositories"),
40+
41+
GitRepoType.GitHub => new GitHubClient(
42+
_processManager.GitExecutable,
43+
_remoteConfiguration.GitHubToken,
44+
_loggerFactory.CreateLogger<GitHubClient>(),
45+
_vmrInfo.TmpPath,
46+
// Caching not in use for Darc local client.
47+
null),
48+
49+
GitRepoType.Local => new LocalGitClient(_processManager.GitExecutable, _loggerFactory.CreateLogger<LocalGitClient>()),
50+
_ => throw new ArgumentException("Unknown git repository type", nameof(repoUri)),
51+
};
52+
}

src/VirtualMonoRepo/Tasks/VirtualMonoRepo_Initialize.cs

+2-3
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
using System.Threading;
88
using System.Threading.Tasks;
99
using Microsoft.Build.Framework;
10-
using Microsoft.DotNet.DarcLib;
11-
using Microsoft.DotNet.DarcLib.Helpers;
1210
using Microsoft.DotNet.DarcLib.VirtualMonoRepo;
1311
using Microsoft.Extensions.DependencyInjection;
1412
using Microsoft.Extensions.Logging;
@@ -61,6 +59,7 @@ private async Task<bool> ExecuteAsync()
6159

6260
private IServiceProvider CreateServiceProvider() => new ServiceCollection()
6361
.AddLogging(b => b.AddConsole().AddFilter(l => l >= LogLevel.Information))
64-
.AddVmrManagers("git", VmrPath, TmpPath, null, null)
62+
.AddTransient<GitFileManagerFactory>()
63+
.AddVmrManagers(sp => sp.GetRequiredService<GitFileManagerFactory>(), "git", VmrPath, TmpPath, null, null)
6564
.BuildServiceProvider();
6665
}

src/VirtualMonoRepo/source-mappings.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@
105105
"defaultRef": "dev"
106106
},
107107
{
108-
"name": "razor-compiler",
109-
"defaultRemote": "https://github.com/dotnet/razor-compiler"
108+
"name": "razor",
109+
"defaultRemote": "https://github.com/dotnet/razor"
110110
},
111111
{
112112
"name": "roslyn",

0 commit comments

Comments
 (0)