forked from dotnet/sourcelink
/
Microsoft.SourceLink.AzureDevOpsServer.Git.targets
72 lines (56 loc) · 4.45 KB
/
Microsoft.SourceLink.AzureDevOpsServer.Git.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
66
67
68
69
70
71
72
<?xml version="1.0" encoding="utf-8"?>
<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the License.txt file in the project root for more information. -->
<Project>
<PropertyGroup>
<_SourceLinkAzureDevOpsServerGitAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\net472\Microsoft.SourceLink.AzureDevOpsServer.Git.dll</_SourceLinkAzureDevOpsServerGitAssemblyFile>
<_SourceLinkAzureDevOpsServerGitAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\core\Microsoft.SourceLink.AzureDevOpsServer.Git.dll</_SourceLinkAzureDevOpsServerGitAssemblyFile>
</PropertyGroup>
<UsingTask TaskName="Microsoft.SourceLink.AzureDevOpsServer.Git.GetSourceLinkUrl" AssemblyFile="$(_SourceLinkAzureDevOpsServerGitAssemblyFile)"/>
<UsingTask TaskName="Microsoft.SourceLink.AzureDevOpsServer.Git.TranslateRepositoryUrls" AssemblyFile="$(_SourceLinkAzureDevOpsServerGitAssemblyFile)"/>
<PropertyGroup>
<SourceLinkUrlInitializerTargets>$(SourceLinkUrlInitializerTargets);_InitializeAzureDevOpsServerGitSourceLinkUrl</SourceLinkUrlInitializerTargets>
<SourceControlManagerUrlTranslationTargets>$(SourceControlManagerUrlTranslationTargets);TranslateAzureDevOpsServerGitUrlsInSourceControlInformation</SourceControlManagerUrlTranslationTargets>
</PropertyGroup>
<Target Name="_InitializeAzureDevOpsServerGitSourceLinkUrl" 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 host 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 hosts are specified via Hosts parameter (initialized from SourceLinkAzureDevOpsServerHost item group).
Host specification includes the host domain, a port (optional) and virtual directory (optional).
Since the virtual directory of a Azure DevOps Server can't be inferred from the repository URL, at least one host has to be specified.
Example of SourceLinkAzureDevOpsServerGitHost items:
<ItemGroup>
<SourceLinkAzureDevOpsServerGitHost Include="mytfs1.com/tfs" ContentUrl="http://mytfs1.com"/>
<SourceLinkAzureDevOpsServerGitHost Include="mytfs2.com/tfs" /> ContentUrl defaults to https://mytfs2.com
<SourceLinkAzureDevOpsServerGitHost Include="mytfs3.com:8080/tfs" /> ContentUrl defaults to https://mytfs3.com:8080
</ItemGroup>
ContentUrl is optional. If not specified it defaults to "https://{domain}" or "http://{domain}", based on the scheme of SourceRoot.RepositoryUrl.
In common cases ContentUrl does not include the virtual directory.
The directory is appended to the ContentUrl automatically when the SourceLink URL is constructed.
-->
<Microsoft.SourceLink.AzureDevOpsServer.Git.GetSourceLinkUrl RepositoryUrl="$(PrivateRepositoryUrl)" SourceRoot="@(SourceRoot)" Hosts="@(SourceLinkAzureDevOpsServerGitHost)" IsSingleProvider="$(SourceLinkHasSingleProvider)">
<Output TaskParameter="SourceLinkUrl" PropertyName="_SourceLinkUrlToUpdate"/>
</Microsoft.SourceLink.AzureDevOpsServer.Git.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="TranslateAzureDevOpsServerGitUrlsInSourceControlInformation">
<ItemGroup>
<_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)"/>
</ItemGroup>
<Microsoft.SourceLink.AzureDevOpsServer.Git.TranslateRepositoryUrls RepositoryUrl="$(ScmRepositoryUrl)" SourceRoots="@(SourceRoot)" Hosts="@(SourceLinkAzureDevOpsServerGitHost)" IsSingleProvider="$(SourceLinkHasSingleProvider)">
<Output TaskParameter="TranslatedRepositoryUrl" PropertyName="ScmRepositoryUrl"/>
<Output TaskParameter="TranslatedSourceRoots" ItemName="_TranslatedSourceRoot"/>
</Microsoft.SourceLink.AzureDevOpsServer.Git.TranslateRepositoryUrls>
<ItemGroup>
<SourceRoot Remove="@(SourceRoot)"/>
<SourceRoot Include="@(_TranslatedSourceRoot)"/>
</ItemGroup>
</Target>
</Project>