cs <!-- 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>
<_SourceLinkGitHubAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">$(MSBuildThisFileDirectory)..\tools\net472\Microsoft.SourceLink.GitHub.dll</_SourceLinkGitHubAssemblyFile>
<_SourceLinkGitHubAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">$(MSBuildThisFileDirectory)..\tools\core\Microsoft.SourceLink.GitHub.dll</_SourceLinkGitHubAssemblyFile>
</PropertyGroup>
<UsingTask TaskName="Microsoft.SourceLink.GitHub.GetSourceLinkUrl" AssemblyFile="$(_SourceLinkGitHubAssemblyFile)"/>
<UsingTask TaskName="Microsoft.SourceLink.GitHub.TranslateRepositoryUrls" AssemblyFile="$(_SourceLinkGitHubAssemblyFile)"/>
<PropertyGroup>
<SourceLinkUrlInitializerTargets>$(SourceLinkUrlInitializerTargets);_InitializeGitHubSourceLinkUrl</SourceLinkUrlInitializerTargets>
<SourceControlManagerUrlTranslationTargets>$(SourceControlManagerUrlTranslationTargets);TranslateGitHubUrlsInSourceControlInformation</SourceControlManagerUrlTranslationTargets>
</PropertyGroup>
<Target Name="_InitializeGitHubSourceLinkUrl" Outputs="%(SourceRoot.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 SourceLinkGitHubHost item group).
In addition, if SourceLinkHasSingleProvider is true an implicit host is parsed from RepositoryUrl.
Example of SourceLinkGitHubHost items:
<ItemGroup>
<SourceLinkGitHubHost Include="github.com" ContentUrl="https://raw.githubusercontent.com"/>
<SourceLinkGitHubHost Include="mygithub1.com" /> ContentUrl defaults to https://mygithub1.com/raw
<SourceLinkGitHubHost Include="mygithub2.com:8080" /> ContentUrl defaults to https://mygithub2.com:8080/raw
</ItemGroup>
ContentUrl is optional. If not specified it defaults to "https://{domain}/raw".
-->
<Microsoft.SourceLink.GitHub.GetSourceLinkUrl RepositoryUrl="$(PrivateRepositoryUrl)" SourceRoot="@(SourceRoot)" Hosts="@(SourceLinkGitHubHost)" IsSingleProvider="$(SourceLinkHasSingleProvider)">
<Output TaskParameter="SourceLinkUrl" PropertyName="_SourceLinkUrlToUpdate"/>
</Microsoft.SourceLink.GitHub.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="TranslateGitHubUrlsInSourceControlInformation">
<ItemGroup>
<_TranslatedSourceRoot Remove="@(_TranslatedSourceRoot)"/>
</ItemGroup>
=====> <Microsoft.SourceLink.GitHub.TranslateRepositoryUrls RepositoryUrl="$(ScmRepositoryUrl)" SourceRoots="@(SourceRoot)" Hosts="@(SourceLinkGitHubHost)" IsSingleProvider="$(SourceLinkHasSingleProvider)">
<Output TaskParameter="TranslatedRepositoryUrl" PropertyName="ScmRepositoryUrl"/>
<Output TaskParameter="TranslatedSourceRoots" ItemName="_TranslatedSourceRoot"/>
</Microsoft.SourceLink.GitHub.TranslateRepositoryUrls>
<ItemGroup>
<SourceRoot Remove="@(SourceRoot)"/>
<SourceRoot Include="@(_TranslatedSourceRoot)"/>
</ItemGroup>
</Target>
</Project>