Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ public void Empty(bool noWarning)
AssertEx.AssertEqualToleratingWhitespaceDifferences(expectedOutput, engine.Log);

Assert.Null(task.SourceLink);
Assert.Null(task.FileWrite);
}

[Theory]
Expand Down Expand Up @@ -73,7 +72,6 @@ public void NoRepositoryUrl(bool noWarning)
AssertEx.AssertEqualToleratingWhitespaceDifferences(expectedOutput, engine.Log);

Assert.Null(task.SourceLink);
Assert.Null(task.FileWrite);
}

[Fact]
Expand All @@ -100,7 +98,6 @@ public void Empty_DeleteExistingFile()
string.Format(Resources.SourceLinkEmptyDeletingExistingFile, sourceLinkFile.Path), engine.Log);

Assert.Null(task.SourceLink);
Assert.Equal(sourceLinkFile.Path, task.FileWrite);
}

[Fact]
Expand Down Expand Up @@ -235,7 +232,6 @@ public void DoesNotRewriteContentIfFileContentIsSame()

Assert.Equal(@"{""documents"":{""/_\""_/*"":""https://raw.githubusercontent.com/repo/*""}}", File.ReadAllText(tempFile.Path, Encoding.UTF8));
Assert.Equal(tempFile.Path, task.SourceLink);
Assert.Equal(tempFile.Path, task.FileWrite);

result = task.Execute();

Expand Down
16 changes: 3 additions & 13 deletions src/SourceLink.Common/GenerateSourceLinkFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,6 @@ public sealed class GenerateSourceLinkFile : Task
[Required, NotNull]
public string? OutputFile { get; set; }

/// <summary>
/// Set to <see cref="OutputFile"/> if the output file was written to, null otherwise.
/// </summary>
[Output]
public string? FileWrite { get; set; }

/// <summary>
/// Set to <see cref="OutputFile"/> if the output Source Link file should be passed to the compiler.
/// </summary>
Expand Down Expand Up @@ -60,14 +54,14 @@ static string jsonEscape(string str)

if (!localPath.EndsWithSeparator())
{
Log.LogError(Resources.MustEndWithDirectorySeparator, (isMapped ? Names.SourceRoot.MappedPathFullName : Names.SourceRoot.Name), localPath);
Log.LogError(Resources.MustEndWithDirectorySeparator, isMapped ? Names.SourceRoot.MappedPathFullName : Names.SourceRoot.Name, localPath);
success = false;
continue;
}

if (localPath.Contains('*'))
{
Log.LogError(Resources.MustNotContainWildcard, (isMapped ? Names.SourceRoot.MappedPathFullName : Names.SourceRoot.Name), localPath);
Log.LogError(Resources.MustNotContainWildcard, isMapped ? Names.SourceRoot.MappedPathFullName : Names.SourceRoot.Name, localPath);
success = false;
continue;
}
Expand Down Expand Up @@ -127,7 +121,6 @@ private void WriteSourceLinkFile(string? content)
Log.LogMessage(Resources.SourceLinkEmptyDeletingExistingFile, OutputFile);

File.Delete(OutputFile);
FileWrite = OutputFile;
return;
}

Expand All @@ -151,14 +144,11 @@ private void WriteSourceLinkFile(string? content)

Log.LogMessage(Resources.SourceLinkFileUpdated, OutputFile);
File.WriteAllText(OutputFile, content);
FileWrite = SourceLink = OutputFile;
SourceLink = OutputFile;
}
catch (Exception e)
{
Log.LogError(Resources.ErrorWritingToSourceLinkFile, OutputFile, e.Message);

// Part of the file might have been written.
FileWrite = OutputFile;
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,16 @@

<!-- Set SourceLink property passed to compilers -->
<Output TaskParameter="SourceLink" PropertyName="SourceLink" />

<!-- Log file write if the content of the file has been updated -->
<Output TaskParameter="FileWrite" ItemName="FileWrites" />
</Microsoft.SourceLink.Common.GenerateSourceLinkFile>

<!--
Include the output file whenever it exists, even if it hasn't been written to (it was up-to-date).
This is needed so that incremental clean doesn't delete the file.
-->
<ItemGroup Condition="'$(SourceLink)' != ''">
<FileWrites Include="$(SourceLink)" />
</ItemGroup>

<!-- C++ Link task currently doesn't recognize SourceLink property -->
<ItemGroup Condition="'$(Language)' == 'C++' and '$(SourceLink)' != ''">
<Link Update="@(Link)">
Expand Down
61 changes: 45 additions & 16 deletions src/SourceLink.Git.IntegrationTests/CloudHostedProvidersTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,11 @@ public void NoCommit_NoRemote_NoWarnings()
<PkgMicrosoft_Build_Tasks_Git></PkgMicrosoft_Build_Tasks_Git>
<PkgMicrosoft_SourceLink_Common></PkgMicrosoft_SourceLink_Common>
</PropertyGroup>
<Target Name="_CaptureFileWrites" DependsOnTargets="GenerateSourceLinkFile" BeforeTargets="AfterBuild">
<ItemGroup>
<_SourceLinkFileWrites Include="@(FileWrites)" Condition="$([MSBuild]::ValueOrDefault('%(Identity)', '').EndsWith('sourcelink.json'))"/>
</ItemGroup>
</Target>
""",
customTargets: "",
targets: new[]
Expand All @@ -141,11 +146,13 @@ public void NoCommit_NoRemote_NoWarnings()
{
"@(SourceRoot)",
"$(SourceLink)",
"@(_SourceLinkFileWrites)",
},
expectedResults: new[]
{
NuGetPackageFolders,
"",
"",
});
}

Expand All @@ -160,6 +167,11 @@ public void Commit_NoRemote_NoWarnings()
<PkgMicrosoft_Build_Tasks_Git></PkgMicrosoft_Build_Tasks_Git>
<PkgMicrosoft_SourceLink_Common></PkgMicrosoft_SourceLink_Common>
</PropertyGroup>
<Target Name="_CaptureFileWrites" DependsOnTargets="GenerateSourceLinkFile" BeforeTargets="AfterBuild">
<ItemGroup>
<_SourceLinkFileWrites Include="@(FileWrites)" Condition="$([MSBuild]::ValueOrDefault('%(Identity)', '').EndsWith('sourcelink.json'))"/>
</ItemGroup>
</Target>
""",
customTargets: "",
targets: new[]
Expand All @@ -170,12 +182,14 @@ public void Commit_NoRemote_NoWarnings()
{
"@(SourceRoot)",
"$(SourceLink)",
"@(_SourceLinkFileWrites)",
},
expectedResults: new[]
{
NuGetPackageFolders,
ProjectSourceRoot,
"",
"",
});
}

Expand All @@ -190,6 +204,11 @@ public void NoCommit_Remote_NoWarnings()
<PkgMicrosoft_Build_Tasks_Git></PkgMicrosoft_Build_Tasks_Git>
<PkgMicrosoft_SourceLink_Common></PkgMicrosoft_SourceLink_Common>
</PropertyGroup>
<Target Name="_CaptureFileWrites" DependsOnTargets="GenerateSourceLinkFile" BeforeTargets="AfterBuild">
<ItemGroup>
<_SourceLinkFileWrites Include="@(FileWrites)" Condition="$([MSBuild]::ValueOrDefault('%(Identity)', '').EndsWith('sourcelink.json'))"/>
</ItemGroup>
</Target>
""",
customTargets: "",
targets: new[]
Expand All @@ -200,11 +219,13 @@ public void NoCommit_Remote_NoWarnings()
{
"@(SourceRoot)",
"$(SourceLink)",
"@(_SourceLinkFileWrites)",
},
expectedResults: new[]
{
NuGetPackageFolders,
"",
"",
});
}

Expand All @@ -230,21 +251,27 @@ public void CustomTranslation()
DependsOnTargets=""$(SourceControlManagerUrlTranslationTargets)""
BeforeTargets=""SourceControlManagerPublishTranslatedUrls"">

<PropertyGroup>
<_Pattern>https://([^.]+)[.]visualstudio.com/([^/]+)/_git/([^/]+)</_Pattern>
<_Replacement>https://github.com/$2/$3</_Replacement>
</PropertyGroup>

<PropertyGroup>
<ScmRepositoryUrl>$([System.Text.RegularExpressions.Regex]::Replace($(ScmRepositoryUrl), $(_Pattern), $(_Replacement)))</ScmRepositoryUrl>
</PropertyGroup>

<ItemGroup>
<SourceRoot Update=""@(SourceRoot)"">
<ScmRepositoryUrl>$([System.Text.RegularExpressions.Regex]::Replace(%(SourceRoot.ScmRepositoryUrl), $(_Pattern), $(_Replacement)))</ScmRepositoryUrl>
</SourceRoot>
</ItemGroup>
</Target>
<PropertyGroup>
<_Pattern>https://([^.]+)[.]visualstudio.com/([^/]+)/_git/([^/]+)</_Pattern>
<_Replacement>https://github.com/$2/$3</_Replacement>
</PropertyGroup>

<PropertyGroup>
<ScmRepositoryUrl>$([System.Text.RegularExpressions.Regex]::Replace($(ScmRepositoryUrl), $(_Pattern), $(_Replacement)))</ScmRepositoryUrl>
</PropertyGroup>

<ItemGroup>
<SourceRoot Update=""@(SourceRoot)"">
<ScmRepositoryUrl>$([System.Text.RegularExpressions.Regex]::Replace(%(SourceRoot.ScmRepositoryUrl), $(_Pattern), $(_Replacement)))</ScmRepositoryUrl>
</SourceRoot>
</ItemGroup>
</Target>

<Target Name=""_CaptureFileWrites"" DependsOnTargets=""GenerateSourceLinkFile"" BeforeTargets=""AfterBuild"">
<ItemGroup>
<_SourceLinkFileWrites Include=""@(FileWrites)"" Condition=""$([MSBuild]::ValueOrDefault('%(Identity)', '').EndsWith('sourcelink.json'))""/>
</ItemGroup>
</Target>
",
targets: new[]
{
Expand All @@ -256,7 +283,8 @@ public void CustomTranslation()
"@(SourceRoot->'%(SourceLinkUrl)')",
"$(SourceLink)",
"$(PrivateRepositoryUrl)",
"$(RepositoryUrl)"
"$(RepositoryUrl)",
"@(_SourceLinkFileWrites)",
},
expectedResults: new[]
{
Expand All @@ -266,6 +294,7 @@ public void CustomTranslation()
s_relativeSourceLinkJsonPath,
$"https://github.com/test-org/{repoName}",
$"https://github.com/test-org/{repoName}",
s_relativeSourceLinkJsonPath
});

AssertEx.AreEqual(
Expand Down