forked from dotnet/sourcelink
/
Microsoft.SourceLink.GitWeb.targets
65 lines (52 loc) · 3.6 KB
/
Microsoft.SourceLink.GitWeb.targets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<_SourceLinkGitWebAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\net461\Microsoft.SourceLink.GitWeb.dll</_SourceLinkGitWebAssemblyFile>
<_SourceLinkGitWebAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\netcoreapp2.0\Microsoft.SourceLink.GitWeb.dll</_SourceLinkGitWebAssemblyFile>
</PropertyGroup>
<UsingTask TaskName="Microsoft.SourceLink.GitWeb.GetSourceLinkUrl" AssemblyFile="$(_SourceLinkGitWebAssemblyFile)" />
<UsingTask TaskName="Microsoft.SourceLink.GitWeb.TranslateRepositoryUrls" AssemblyFile="$(_SourceLinkGitWebAssemblyFile)" />
<PropertyGroup>
<SourceLinkUrlInitializerTargets>$(SourceLinkUrlInitializerTargets);_InitializeGitWebSourceLinkUrl</SourceLinkUrlInitializerTargets>
<SourceControlManagerUrlTranslationTargets>$(SourceControlManagerUrlTranslationTargets);TranslateGitWebUrlsInSourceControlInformation</SourceControlManagerUrlTranslationTargets>
</PropertyGroup>
<Target Name="_InitializeGitWebSourceLinkUrl" Inputs="@(SourceRoot)" Outputs="|%(Identity)|">
<!--
The task calculates SourceLink URL for a given SourceRoot.
If the SourceRoot is associated with a git repository with a recognized domain the <see cref="SourceLinkUrl" />
output property is set to the content URL corresponding to the domain, otherwise it is set to string "N/A".
Recognized domains are specified via Hosts (initialized from SourceLinkGitWebHost item group).
In addition, if SourceLinkHasSingleProvider is true an implicit host is parsed from RepositoryUrl.
Example of SourceLinkGitWebHost items:
<ItemGroup>
<SourceLinkGitWebHost Include="myGitWeb1.com" ContentUrl="http://myGitWeb1.com" />
<SourceLinkGitWebHost Include="myGitWeb2.com" /> ContentUrl defaults to https://myGitWeb2.com
<SourceLinkGitWebHost Include="myGitWeb3.com:8080" /> ContentUrl defaults to https://myGitWeb3.com:8080
</ItemGroup>
ContentUrl is optional. If not specified it defaults to "https://{domain}" or "http://{domain}", based on the scheme of SourceRoot.RepositoryUrl.
-->
<Microsoft.SourceLink.GitWeb.GetSourceLinkUrl RepositoryUrl="$(PrivateRepositoryUrl)" SourceRoot="@(SourceRoot)" Hosts="@(SourceLinkGitWebHost)" IsSingleProvider="$(SourceLinkHasSingleProvider)">
<Output TaskParameter="SourceLinkUrl" PropertyName="_SourceLinkUrlToUpdate" />
</Microsoft.SourceLink.GitWeb.GetSourceLinkUrl>
<ItemGroup>
<!-- Only update the SourceLinkUrl metadata if the SourceRoot belongs to this source control -->
<SourceRoot Update="%(Identity)" SourceLinkUrl="$(_SourceLinkUrlToUpdate)" Condition="'$(_SourceLinkUrlToUpdate)' != 'N/A'" />
</ItemGroup>
</Target>
<!--
We need to translate ssh URLs to https.
-->
<Target Name="TranslateGitWebUrlsInSourceControlInformation">
<ItemGroup>
<_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)" />
</ItemGroup>
<Microsoft.SourceLink.GitWeb.TranslateRepositoryUrls RepositoryUrl="$(ScmRepositoryUrl)" SourceRoots="@(SourceRoot)" Hosts="@(SourceLinkGitWebHost)" IsSingleProvider="$(SourceLinkHasSingleProvider)">
<Output TaskParameter="TranslatedRepositoryUrl" PropertyName="ScmRepositoryUrl" />
<Output TaskParameter="TranslatedSourceRoots" ItemName="_TranslatedSourceRoot" />
</Microsoft.SourceLink.GitWeb.TranslateRepositoryUrls>
<ItemGroup>
<SourceRoot Remove="@(SourceRoot)" />
<SourceRoot Include="@(_TranslatedSourceRoot)" />
</ItemGroup>
</Target>
</Project>