示例#1
0
        public void GivenOnePathToOneDirectory_WhenInThisDirectoryIsNotAnySolution_ThenOneDirectoryNotFoundException_ShouldBeThrown()
        {
            var mockFileSystem = new MockFileSystem();
            var cut            = new ProjectDependencyResolver(mockFileSystem, Mock.Of <IEnvironment>());

            Action action = () => cut.ResolveDependencies(@"c:\foo\bar\");

            action.Should().Throw <DirectoryNotFoundException>();
        }
示例#2
0
        public void GivenOnePathToOneProjectFile_WhenInThisFileDoesNotExist_ThenOneDirectoryNotFoundException_ShouldBeThrown()
        {
            var mockFileSystem = new MockFileSystem();

            mockFileSystem.AddDirectory(@"c:\foo\bar");
            var cut = new ProjectDependencyResolver(mockFileSystem, Mock.Of <IEnvironment>());

            Action action = () => cut.ResolveDependencies(@"c:\foo\bar\aa.fooproj");

            action.Should().Throw <FileNotFoundException>();
        }
示例#3
0
        public void GivenOnePathToOneDirectory_WhenThisDirectoryContainsTwoSolutionFiles_ThenOneException_ShouldBeThrown()
        {
            var mockFileSystem = new MockFileSystem();

            mockFileSystem.AddFile(@"c:\foo\bar\xyz.sln", new MockFileData(""));
            mockFileSystem.AddFile(@"c:\foo\bar\g.sln", new MockFileData(""));
            var cut = new ProjectDependencyResolver(mockFileSystem, Mock.Of <IEnvironment>());

            Action action = () => cut.ResolveDependencies(@"c:\foo\bar\");

            action.Should().Throw <InvalidOperationException>();
        }
示例#4
0
        public void GivenOnePathToOneExistingProjectFile_WhenThisProjectDoesHaveOneProjectAssetsFileProperty_ThenNoException_ShouldBeThrown()
        {
            var mockFileSystem = new MockFileSystem();

            mockFileSystem.AddFile(@"c:\foo\bar\xyz.csproj", new MockFileData(@"<Project Sdk=""Microsoft.NET.Sdk"">
  <PropertyGroup>
    <TargetFrameworks>netstandard1.6;net462;net452</TargetFrameworks>
    <AssemblyName>Lokad.AzureEventStore</AssemblyName>
    <RuntimeIdentifiers>win</RuntimeIdentifiers>
    <OutputType>Library</OutputType>
    <Company>Lokad</Company>
    <Copyright>Copyright © Lokad 2019</Copyright>
    <AssemblyVersion>2.1.0.0</AssemblyVersion>
    <FileVersion>2.1.0.0</FileVersion>
    <PackageId>Lokad.AzureEventStore</PackageId>
    <PackageVersion>2.1.0.0</PackageVersion>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <Authors>Lokad</Authors>
    <Description>Simple, low-maintenance event sourcing backed by Azure Blob Storage.</Description>
    <PackageLicenseUrl>https://github.com/Lokad/AzureEventStore/blob/master/LICENSE.txt</PackageLicenseUrl>
    <PackageProjectUrl>https://github.com/Lokad/AzureEventStore</PackageProjectUrl>
    <PackageIconUrl>https://raw.githubusercontent.com/Lokad/AzureEventStore/master/lokad.png</PackageIconUrl>
    <Version>2.1.0</Version>
<ProjectAssetsFile Condition="" '$(ProjectAssetsFile)' == '' "">c:\foo\bar\obj\project.assets.json</ProjectAssetsFile>
  </PropertyGroup>
  <ItemGroup Condition=""'$(TargetFramework)'=='netstandard1.6'"">
    <PackageReference Include=""System.Diagnostics.Contracts"" Version=""4.3.0"" />
    <PackageReference Include=""System.Diagnostics.TraceSource"" Version=""4.3.0"" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include=""Microsoft.Azure.Storage.Blob"" Version=""9.4.1"" />
    <PackageReference Include=""Newtonsoft.Json"" Version=""12.0.1"" />
  </ItemGroup>
</Project>"));

            var cut = new ProjectDependencyResolver(mockFileSystem, Mock.Of <IEnvironment>());

            mockFileSystem.AddFile(@"c:\foo\bar\obj\project.assets.json", new MockFileData(""));

            Action action = () => cut.ResolveDependencies(@"c:\foo\bar\xyz.csproj");

            action.Should().NotThrow();
        }
示例#5
0
        // ReSharper disable UnusedMember.Local
#pragma warning disable IDE0051 // Remove unused private members
        private async Task <int> OnExecuteAsync()
#pragma warning restore IDE0051 // Remove unused private members
        // ReSharper restore UnusedMember.Local
        {
            if (OutputPath is null)
            {
                SkipDownloadOfLicenses = true;
            }

            IFileInfo?outputFile;

            if (OutputPath != null)
            {
                outputFile = _fileSystem.FileInfo.FromFileName(OutputPath);
                if (outputFile.Exists)
                {
                    _reporter.Error("The file to write the output to already exists. Specify another output path or delete the file");
                    return(1);
                }
            }
            else
            {
                outputFile = null;
            }

            var cancellationToken = CancellationToken.None;
            var instances         = MSBuildLocator.QueryVisualStudioInstances().ToList();

            MSBuildLocator.RegisterMSBuildPath(instances.First().MSBuildPath);

            _reporter.Output("Resolving dependencies");
            var dependencies = _projectDependencyResolver.ResolveDependencies(PathToProjectOrSolution);

            _reporter.OutputInvariant($"\tcount {dependencies.Count}");

            _reporter.Output("Extracting licensing information");
            var licenseSpecs = _licenseLocator.Provide(dependencies);

            _reporter.Output("Correcting license locations");
            var correctedLicenseLocations = _uriCorrector.Correct(licenseSpecs.Values.Select(v => v.Item1).Distinct(EqualityComparer <Uri> .Default));

            _reporter.OutputInvariant($"Downloading licenses (total {correctedLicenseLocations.Count})");
            IImmutableDictionary <Uri, string> licenses;

            if (SkipDownloadOfLicenses)
            {
                _reporter.Output("\tSkipping download");
                licenses = ImmutableDictionary <Uri, string> .Empty;
            }
            else
            {
                licenses = await _downloader.DownloadAsync(correctedLicenseLocations.Values.Select(v => v.corrected), cancellationToken);
            }

            var licenseDependencyInformation = new List <LicenseDependencyInformation>();

            foreach (var(package, (location, licenseExpression)) in licenseSpecs)
            {
                var correctedUrl          = correctedLicenseLocations[location].corrected;
                var content               = licenses.FirstOrDefault(l => l.Key == correctedUrl);
                var dependencyInformation = new LicenseDependencyInformation(package, content.Value ?? string.Empty, location, correctedUrl, licenseExpression);

                licenseDependencyInformation.Add(dependencyInformation);
            }

            if (outputFile != null)
            {
                var fileContent = JsonConvert.SerializeObject(licenseDependencyInformation, Formatting.Indented);

                await using var writer = outputFile.OpenWrite();
                var encoding = new UTF8Encoding(false, true);
                var bytes    = encoding.GetBytes(fileContent);
                await writer.WriteAsync(bytes, 0, bytes.Length, cancellationToken);

                await writer.FlushAsync(cancellationToken);
            }
            else
            {
                _reporter.OutputInvariant($"Licenses of {PathToProjectOrSolution}");
                foreach (var dependencyInformation in licenseDependencyInformation)
                {
                    _reporter.OutputInvariant($"dependency {dependencyInformation.PackageReference.Name} (version: {dependencyInformation.PackageReference.ResolvedVersion}, license expression: {dependencyInformation.LicenseExpression})");
                }
            }

            return(0);
        }