Пример #1
0
 private IEnumerable <LibraryAsset> PopulateAssets(PackageDescription package, IEnumerable <LockFileItem> section)
 {
     foreach (var assemblyPath in section)
     {
         yield return(LibraryAsset.CreateFromRelativePath(package.Path, assemblyPath.Path));
     }
 }
Пример #2
0
        private void PopulateMetadataReferences(PackageDescription description, FrameworkName targetFramework, IDictionary <string, IMetadataReference> paths)
        {
            var packageAssemblies = GetPackageAssemblies(description, targetFramework);

            // Use contract if both contract and target path are available
            bool hasContract = description.ContractPath != null;
            bool hasLib      = packageAssemblies.Any();

            if (hasContract && hasLib)
            {
                paths[description.Library.Identity.Name] = new MetadataFileReference(description.Library.Identity.Name, description.ContractPath);
            }
            else if (hasLib)
            {
                foreach (var assembly in packageAssemblies)
                {
                    paths[assembly.Name] = new MetadataFileReference(assembly.Name, assembly.Path);
                }
            }

            foreach (var assembly in GetFrameworkAssemblies(description, targetFramework))
            {
                paths[assembly.Name] = new MetadataFileReference(assembly.Name, assembly.Path);
            }
        }
Пример #3
0
 private Map PackageDetailsToMap(PackageDescription desc) => new Map
 {
     { "name", desc.Name },
     { "version", desc.Version },
     { "description", desc.Description },
     { "license", desc.License }
 };
Пример #4
0
        /// <inheritdoc />
        public byte[] GetPackageFile(
            PackageDescription packageDescription)
        {
            new { packageDescription }.Must().NotBeNull();
            var ret =
                Using
                .LinearBackOff(TimeSpan.FromSeconds(5))
                .Run(() =>
            {
                var workingDirectory = Path.Combine(
                    this.defaultWorkingDirectory,
                    "Down-" + DateTime.Now.ToString(
                        DirectoryDateTimeToStringFormat,
                        CultureInfo.InvariantCulture));

                var packageFilePath  = this.DownloadPackages(new[] { packageDescription }, workingDirectory).Single();
                var packageFileBytes = File.ReadAllBytes(packageFilePath);

                // clean up temp files
                Directory.Delete(workingDirectory, true);
                return(packageFileBytes);
            })
                .Now();

            return(ret);
        }
Пример #5
0
        private static async Task <PackageUpdateResult> UpdatePackage(PackageDescription pkg, JsonObject releaseInfo, CancellationToken ct = default)
        {
            DateTime currentTimestamp = default;
            var      tsfile           = Path.Combine(PackageStateDir, pkg.Name + ".timestamp");

            try
            {
                var ts = File.ReadAllText(tsfile, Encoding.UTF8);
                currentTimestamp = DateTime.Parse(ts, null, System.Globalization.DateTimeStyles.RoundtripKind);
            }
            catch (Exception ex) { }
            var newTimestamp = DateTime.Parse((string)releaseInfo["published_at"], null, System.Globalization.DateTimeStyles.RoundtripKind);

            if (newTimestamp > currentTimestamp)
            {
                var asset = releaseInfo["assets"].AsArray().FirstOrDefault(x => (string)x["name"] == pkg.AssetName);
                if (asset != default)
                {
                    var download_url = (string)asset.AsObject()["browser_download_url"];
                    var download_to  = Path.Combine(UpdatesDir, pkg.AssetName);
                    await DownloadAndExtractPackage(download_url, download_to, pkg.ExtractBase, _ => true, ct);

                    Directory.CreateDirectory(PackageStateDir);
                    File.WriteAllBytes(tsfile, Encoding.UTF8.GetBytes(newTimestamp.ToString("o")));
                    return(PackageUpdateResult.Success);
                }
                else
                {
                    StatusText(string.Format("No such asset: {0}", pkg.AssetName));
                    return(PackageUpdateResult.Failed);
                }
            }
            return(PackageUpdateResult.AlreadyUpToDate);
        }
Пример #6
0
        private List <AssemblyDescription> GetFrameworkAssemblies(PackageDescription description, FrameworkName targetFramework)
        {
            var results = new List <AssemblyDescription>();
            var package = description.Package;

            IEnumerable <FrameworkAssemblyReference> frameworkAssemblies;

            if (VersionUtility.TryGetCompatibleItems(targetFramework, package.FrameworkAssemblies, out frameworkAssemblies))
            {
                foreach (var reference in frameworkAssemblies)
                {
                    string path;
                    if (_frameworkReferenceResolver.TryGetAssembly(reference.AssemblyName, targetFramework, out path))
                    {
                        results.Add(new AssemblyDescription
                        {
                            Name = reference.AssemblyName,
                            Path = path
                        });
                    }
                }
            }

            return(results);
        }
Пример #7
0
        private IEnumerable <string> GetSharedSources(PackageDescription description, FrameworkName targetFramework)
        {
            var directory = Path.Combine(description.Library.Path, "shared");

            return(description.Package.LockFileLibrary.Files.Where(path => path.StartsWith("shared" + Path.DirectorySeparatorChar))
                   .Select(path => Path.Combine(description.Library.Path, path)));
        }
Пример #8
0
        public PackageDescription GetDescription(LockFilePackageLibrary package, LockFileTargetLibrary targetLibrary)
        {
            // If a NuGet dependency is supposed to provide assemblies but there is no assembly compatible with
            // current target framework, we should mark this dependency as unresolved
            var containsAssembly = package.Files
                                   .Any(x => x.StartsWith($"ref{Path.DirectorySeparatorChar}") ||
                                        x.StartsWith($"lib{Path.DirectorySeparatorChar}"));

            var compatible = targetLibrary.FrameworkAssemblies.Any() ||
                             targetLibrary.CompileTimeAssemblies.Any() ||
                             targetLibrary.RuntimeAssemblies.Any() ||
                             !containsAssembly;

            var dependencies = new List <LibraryRange>(targetLibrary.Dependencies.Count + targetLibrary.FrameworkAssemblies.Count);

            PopulateDependencies(dependencies, targetLibrary);

            var path = _packagePathResolver.GetInstallPath(package.Name, package.Version);

            var packageDescription = new PackageDescription(
                path,
                package,
                targetLibrary,
                dependencies,
                compatible);

            return(packageDescription);
        }
Пример #9
0
            TargetReport Diff(IPackage pkg, SemanticVersion left, SemanticVersion right)
            {
                var creator = new CompareSetCreator();
                var differ  = new CompareSetDiffer();

                var packageDescription = new PackageDescription
                {
                    PackageId = pkg.Id,
                    Versions  = new VersionPair(left.ToString(), right.ToString())
                };

                var compareSets       = creator.Create(packageDescription);
                var diffedCompareSets = differ.Diff(compareSets);
                var vm = ViewModelBuilder.Build(packageDescription, diffedCompareSets);

                foreach (var framework in TopXNugets.Frameworks)
                {
                    var target = vm.targets.FirstOrDefault(trg => trg.Name == framework);
                    if (target != null)
                    {
                        return(target);
                    }
                }

                return(null);
            }
Пример #10
0
 public static APIComparison Build(PackageDescription description, DiffedCompareSet[] diffedCompareSets)
 {
     return(new APIComparison
     {
         targets = BuildTargets(diffedCompareSets)
     });
 }
Пример #11
0
        private LibraryExport ExportPackage(PackageDescription package)
        {
            var nativeLibraries = new List <LibraryAsset>();

            PopulateAssets(package, package.Target.NativeLibraries, nativeLibraries);

            var runtimeAssemblies = new List <LibraryAsset>();

            PopulateAssets(package, package.Target.RuntimeAssemblies, runtimeAssemblies);

            var compileAssemblies = new List <LibraryAsset>();

            PopulateAssets(package, package.Target.CompileTimeAssemblies, compileAssemblies);

            var sourceReferences = new List <string>();

            foreach (var sharedSource in GetSharedSources(package))
            {
                sourceReferences.Add(sharedSource);
            }

            var analyzers = GetAnalyzerReferences(package);

            return(new LibraryExport(package, compileAssemblies,
                                     sourceReferences, runtimeAssemblies, Array.Empty <string>(), nativeLibraries, analyzers));
        }
Пример #12
0
        public PackageDescription GetDescription(NuGetFramework targetFramework, LockFilePackageLibrary package, LockFileTargetLibrary targetLibrary)
        {
            // If a NuGet dependency is supposed to provide assemblies but there is no assembly compatible with
            // current target framework, we should mark this dependency as unresolved
            var containsAssembly = package.Files
                .Any(x => x.StartsWith($"ref{Path.DirectorySeparatorChar}") ||
                    x.StartsWith($"lib{Path.DirectorySeparatorChar}"));

            var compatible = targetLibrary.FrameworkAssemblies.Any() ||
                targetLibrary.CompileTimeAssemblies.Any() ||
                targetLibrary.RuntimeAssemblies.Any() ||
                !containsAssembly;

            var dependencies = new List<LibraryRange>(targetLibrary.Dependencies.Count + targetLibrary.FrameworkAssemblies.Count);
            PopulateDependencies(dependencies, targetLibrary, targetFramework);

            var path = _packagePathResolver.GetInstallPath(package.Name, package.Version);

            // Remove place holders
            targetLibrary.CompileTimeAssemblies = targetLibrary.CompileTimeAssemblies.Where(item => !IsPlaceholderFile(item.Path)).ToList();
            targetLibrary.RuntimeAssemblies = targetLibrary.RuntimeAssemblies.Where(item => !IsPlaceholderFile(item.Path)).ToList();

            // If the package's compile time assemblies is for a portable profile then, read the assembly metadata
            // and turn System.* references into reference assembly dependencies
            PopulateLegacyPortableDependencies(targetFramework, dependencies, path, targetLibrary);

            var packageDescription = new PackageDescription(
                path,
                package,
                targetLibrary,
                dependencies,
                compatible);

            return packageDescription;
        }
Пример #13
0
        public PackageDescription GetDescription(LockFilePackageLibrary package, LockFileTargetLibrary targetLibrary)
        {
            // If a NuGet dependency is supposed to provide assemblies but there is no assembly compatible with
            // current target framework, we should mark this dependency as unresolved
            var containsAssembly = package.Files
                .Any(x => x.StartsWith($"ref{Path.DirectorySeparatorChar}") ||
                    x.StartsWith($"lib{Path.DirectorySeparatorChar}"));

            var compatible = targetLibrary.FrameworkAssemblies.Any() ||
                targetLibrary.CompileTimeAssemblies.Any() ||
                targetLibrary.RuntimeAssemblies.Any() ||
                !containsAssembly;

            var dependencies = new List<LibraryRange>(targetLibrary.Dependencies.Count + targetLibrary.FrameworkAssemblies.Count);
            PopulateDependencies(dependencies, targetLibrary);

            var path = _packagePathResolver.GetInstallPath(package.Name, package.Version);

            var packageDescription = new PackageDescription(
                path,
                package,
                targetLibrary,
                dependencies,
                compatible);

            return packageDescription;
        }
Пример #14
0
        private void step2StateStepcodeActivity_Initialize_ExecuteCode(object sender, EventArgs e)
        {
            try
            {
                if (this.BindingExist("EulaText") == false)
                {
                    PackageDescription packageDescription = GetPackageDescription();
                    string             eulaText           = PackageSystemServices.GetEulaText(packageDescription);
                    this.Bindings.Add("EulaText", eulaText);
                }

                if (this.BindingExist("EulaAccepted") == false)
                {
                    this.Bindings.Add("EulaAccepted", false);
                }
            }
            catch (Exception ex)
            {
                this.UpdateBinding("Errors", new List <List <string> > {
                    new List <string> {
                        ex.Message, ""
                    }
                });
            }
        }
Пример #15
0
        public PackagingDummyFactory()
        {
            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var result = new PackageDescription {
                    Id = A.Dummy <string>(), Version = A.Dummy <string>()
                };

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var packageDescription = A.Dummy <PackageDescription>();
                var result             = new Package {
                    PackageDescription = packageDescription, PackageFileBytes = Encoding.UTF32.GetBytes(A.Dummy <string>()), PackageFileBytesRetrievalDateTimeUtc = A.Dummy <DateTime>()
                };

                return(result);
            });

            AutoFixtureBackedDummyFactory.AddDummyCreator(
                () =>
            {
                var result = new PackageRepositoryConfiguration {
                    Source = A.Dummy <string>(), SourceName = A.Dummy <string>(), UserName = A.Dummy <string>(), ClearTextPassword = A.Dummy <string>(), ProtocolVersion = A.Dummy <int?>()
                };

                return(result);
            });
        }
Пример #16
0
        private bool TryPopulateMetadataReferences(PackageDescription description, FrameworkName targetFramework, IDictionary <string, IMetadataReference> paths)
        {
            if (_lookup == null)
            {
                return(false);
            }

            var lookupKey = Tuple.Create((string)null, targetFramework, description.Package.LockFileLibrary.Name);

            LockFileTargetLibrary targetLibrary;

            if (!_lookup.TryGetValue(lookupKey, out targetLibrary))
            {
                return(false);
            }

            foreach (var assemblyPath in targetLibrary.CompileTimeAssemblies)
            {
                if (IsPlaceholderFile(assemblyPath))
                {
                    continue;
                }

                var name = Path.GetFileNameWithoutExtension(assemblyPath);
                var path = Path.Combine(description.Library.Path, assemblyPath);
                paths[name] = new MetadataFileReference(name, path);
            }

            return(true);
        }
Пример #17
0
 public static object Build(PackageDescription description, DiffedCompareSet[] diffedCompareSets)
 {
     return new
     {
         targets = BuildTargets(diffedCompareSets)
     };
 }
Пример #18
0
 private IEnumerable <LibraryAsset> GetSharedSources(PackageDescription package)
 {
     return(package
            .PackageLibrary
            .Files
            .Where(path => path.StartsWith("shared" + Path.DirectorySeparatorChar))
            .Select(path => LibraryAsset.CreateFromRelativePath(package.Path, path)));
 }
Пример #19
0
 private IEnumerable <string> GetSharedSources(PackageDescription package)
 {
     return(package
            .Library
            .Files
            .Where(path => path.StartsWith("shared" + Path.DirectorySeparatorChar))
            .Select(path => Path.Combine(package.Path, path)));
 }
Пример #20
0
        public bool IsPackageServiceable(PackageDescription package)
        {
            if (!_isEnabled)
            {
                return false;
            }

            return package.Library.IsServiceable;
        }
Пример #21
0
 public PackageDescription InitializePackageNamed(String name)
 {
     if (!bindings.TryGetValue(name, out Element description))
     {
         description = new PackageDescription(name);
         bindings.Add(name, description);
     }
     return((PackageDescription)description);
 }
Пример #22
0
        public bool IsPackageServiceable(PackageDescription package)
        {
            if (!_isEnabled)
            {
                return(false);
            }

            return(package.Library.IsServiceable);
        }
        private IEnumerable <Element> GetInstalledPackageGroupFolderChildren(string groupName, SearchToken seachToken)
        {
            IEnumerable <InstalledPackageInformation> installedPackageInformations =
                from info in PackageManager.GetInstalledPackages()
                where info.GroupName == groupName &&
                info.IsLocalInstalled == false
                orderby info.Name
                select info;

            var allServerPackages = PackageSystemServices.GetAllAvailablePackages();

            foreach (InstalledPackageInformation installedPackageInformation in installedPackageInformations)
            {
                Element element = new Element(_context.CreateElementHandle(new PackageElementProviderInstalledPackageItemEntityToken(
                                                                               installedPackageInformation.Id,
                                                                               installedPackageInformation.GroupName,
                                                                               installedPackageInformation.IsLocalInstalled,
                                                                               installedPackageInformation.CanBeUninstalled)));

                PackageDescription serverPackageDescription = allServerPackages.Where(f => f.Id == installedPackageInformation.Id).FirstOrDefault();

                if (serverPackageDescription != null && !string.IsNullOrEmpty(serverPackageDescription.ConsoleBrowserUrl))
                {
                    element.PropertyBag.Add("BrowserUrl", serverPackageDescription.ConsoleBrowserUrl);
                    element.PropertyBag.Add("BrowserToolingOn", "false");
                }

                element.VisualData = new ElementVisualizedData
                {
                    Label       = installedPackageInformation.Name,
                    ToolTip     = installedPackageInformation.Name,
                    HasChildren = false,
                    Icon        = GetIconForPackageItem(installedPackageInformation.Id),
                };

                element.AddAction(new ElementAction(new ActionHandle(new WorkflowActionToken(WorkflowFacade.GetWorkflowType("Composite.Plugins.Elements.ElementProviders.PackageElementProvider.ViewInstalledPackageInfoWorkflow"), ActionPermissions)))
                {
                    VisualData = new ActionVisualizedData
                    {
                        Label          = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "ViewInstalledInformationLabel"),
                        ToolTip        = StringResourceSystemFacade.GetString("Composite.Plugins.PackageElementProvider", "ViewInstalledInformationToolTip"),
                        Icon           = ViewInstalledInformationIcon,
                        Disabled       = false,
                        ActionLocation = new ActionLocation
                        {
                            ActionType  = ActionType.Edit,
                            IsInFolder  = false,
                            IsInToolbar = true,
                            ActionGroup = PrimaryActionGroup
                        }
                    }
                });

                yield return(element);
            }
        }
Пример #24
0
 private void PopulateAssets(PackageDescription package, IEnumerable <LockFileItem> section, IList <LibraryAsset> assets)
 {
     foreach (var assemblyPath in section)
     {
         assets.Add(new LibraryAsset(
                        Path.GetFileNameWithoutExtension(assemblyPath),
                        assemblyPath,
                        Path.Combine(package.Path, assemblyPath)));
     }
 }
Пример #25
0
        private IEnumerable <string> GetSharedSources(PackageDescription description, FrameworkName targetFramework)
        {
            var directory = Path.Combine(description.Library.Path, "shared");

            if (!Directory.Exists(directory))
            {
                return(Enumerable.Empty <string>());
            }

            return(Directory.EnumerateFiles(directory, "*.*", SearchOption.AllDirectories));
        }
Пример #26
0
        public void Initialize(IEnumerable <LibraryDescription> packages, FrameworkName targetFramework)
        {
            Dependencies = packages;

            var cacheResolvers  = GetCacheResolvers();
            var defaultResolver = new DefaultPackagePathResolver(_repository.RepositoryRoot);

            foreach (var dependency in packages)
            {
                var package = FindCandidate(dependency.Identity.Name, dependency.Identity.Version);

                if (package == null)
                {
                    continue;
                }

                string packagePath = ResolvePackagePath(defaultResolver, cacheResolvers, package);

                dependency.Path = packagePath;

                var packageDescription = new PackageDescription
                {
                    Library = dependency,
                    Package = package
                };

                _packageDescriptions[package.Id] = packageDescription;

                // Try to find a contract folder for this package and store that
                // for compilation
                string contractPath = Path.Combine(dependency.Path, "lib", "contract",
                                                   package.Id + ".dll");
                if (File.Exists(contractPath))
                {
                    packageDescription.ContractPath = contractPath;
                }

                var assemblies = new List <string>();

                foreach (var assemblyInfo in GetPackageAssemblies(packageDescription, targetFramework))
                {
                    _packageAssemblyLookup[assemblyInfo.Name] = new PackageAssembly()
                    {
                        Path         = assemblyInfo.Path,
                        RelativePath = assemblyInfo.RelativePath,
                        Library      = dependency
                    };

                    assemblies.Add(assemblyInfo.Name);
                }

                dependency.LoadableAssemblies = assemblies;
            }
        }
Пример #27
0
        /// <inheritdoc />
        public Package GetPackage(
            PackageDescription packageDescription)
        {
            var ret = new Package
            {
                PackageDescription = packageDescription,
                PackageFileBytes   = this.GetPackageFile(packageDescription),
                PackageFileBytesRetrievalDateTimeUtc = DateTime.UtcNow,
            };

            return(ret);
        }
Пример #28
0
        private static CommandSpec ConfigureCommandFromPackage(string commandName, string args,
                                                               PackageDescription commandPackage, ProjectContext projectContext, string depsPath = null)
        {
            var files = commandPackage.Library.Files;

            var packageRoot = projectContext.PackagesDirectory;

            var packagePath = commandPackage.Path;

            var packageDir = Path.Combine(packageRoot, packagePath);

            return(ConfigureCommandFromPackage(commandName, args, files, packageDir, depsPath));
        }
Пример #29
0
        public PackageDescription GetDescription(
            NuGetFramework targetFramework,
            LockFileLibrary package,
            LockFileTargetLibrary targetLibrary)
        {
            // If a NuGet dependency is supposed to provide assemblies but there is no assembly compatible with
            // current target framework, we should mark this dependency as unresolved
            var containsAssembly = package.Files
                                   .Select(f => f.Replace('/', Path.DirectorySeparatorChar))
                                   .Any(x => x.StartsWith($"ref{Path.DirectorySeparatorChar}") ||
                                        x.StartsWith($"lib{Path.DirectorySeparatorChar}"));

            var compatible = targetLibrary.FrameworkAssemblies.Any() ||
                             targetLibrary.CompileTimeAssemblies.Any() ||
                             targetLibrary.RuntimeAssemblies.Any() ||
                             !containsAssembly;

            var dependencies =
                new List <ProjectLibraryDependency>(targetLibrary.Dependencies.Count + targetLibrary.FrameworkAssemblies.Count);

            PopulateDependencies(dependencies, targetLibrary, targetFramework);

            var  path   = _packagePathResolver?.GetPackageDirectory(package.Name, package.Version);
            bool exists = path != null;

            string hashPath = null;

            if (_versionFolderPathResolver != null)
            {
                hashPath = _versionFolderPathResolver.GetHashFileName(package.Name, package.Version);
            }

            if (exists)
            {
                // If the package's compile time assemblies is for a portable profile then, read the assembly metadata
                // and turn System.* references into reference assembly dependencies
                PopulateLegacyPortableDependencies(targetFramework, dependencies, path, targetLibrary);
            }

            var packageDescription = new PackageDescription(
                path,
                hashPath,
                package,
                targetLibrary,
                dependencies,
                compatible,
                resolved: compatible && exists);

            return(packageDescription);
        }
Пример #30
0
        private void viewStateCodeActivity_Initialize_ExecuteCode(object sender, EventArgs e)
        {
            this.SetCustomToolbarDefinition(new FormDefinitionFileMarkupProvider(CustomToolbarFormPath));


            if (this.BindingExist(BindingNames.PackageDescription))
            {
                return;
            }

            var castedToken = (PackageElementProviderAvailablePackagesItemEntityToken)this.EntityToken;

            PackageDescription packageDescription =
                (from description in PackageSystemServices.GetFilteredAllAvailablePackages()
                 where description.Id.ToString() == castedToken.Id
                 select description).SingleOrDefault();

            if (packageDescription == null)
            {
                return;
            }

            string packageSourceName = PackageSystemServices.GetPackageSourceNameByPackageId(packageDescription.Id,
                                                                                             InstallationInformationFacade.InstallationId, UserSettings.CultureInfo);

            var purchasableSubscriptions = packageDescription.AvailableInSubscriptions.Where(f => f.Purchasable).ToList();

            bool showTrialInformation = false;
            var  licenses             = GetSubscriptionLicenses(packageDescription.AvailableInSubscriptions);

            var validLicense = licenses.Where(l => !l.Expired)
                               .OrderByDescending(l => l.ExpirationDate)
                               .FirstOrDefault();

            this.Bindings = new Dictionary <string, object>
            {
                { BindingNames.PackageDescription, packageDescription },
                { BindingNames.DocumentTitle, GetDocumentTitle(packageDescription) },
                { BindingNames.AddOnServerSource, packageSourceName },
                { BindingNames.HasOwnPrice, packageDescription.PriceAmmount > 0 },
                { BindingNames.PriceText, $"{packageDescription.PriceAmmount} {packageDescription.PriceCurrency}" },
                { BindingNames.IsInPurchasableSubscriptions, purchasableSubscriptions.Any() },
                { BindingNames.PurchasableSubscriptions,
                  string.Join(", \n", purchasableSubscriptions.Select(f => f.Name)) },
                { BindingNames.ShowTrialInfo, packageDescription.IsTrial&& validLicense == null },
                { BindingNames.ShowSubscriptionLicense, validLicense != null },
                { BindingNames.SubscriptionName, validLicense?.Name },
                { BindingNames.LicenseExpirationDate, validLicense?.ExpirationDate.ToLocalTime().ToString() }
            };
        }
Пример #31
0
        private LibraryExport ExportPackage(PackageDescription package)
        {
            var builder = LibraryExportBuilder.Create(package);

            builder.WithNativeLibraries(PopulateAssets(package, package.NativeLibraries));
            builder.WithRuntimeAssemblies(PopulateAssets(package, package.RuntimeAssemblies));
            builder.WithCompilationAssemblies(PopulateAssets(package, package.CompileTimeAssemblies));
            builder.WithSourceReferences(GetSharedSources(package));
            builder.WithAnalyzerReference(GetAnalyzerReferences(package));

            if (package.ContentFiles.Any())
            {
                var parameters = PPFileParameters.CreateForProject(_rootProject.Project);
                Action <Stream, Stream> transform = (input, output) => PPFilePreprocessor.Preprocess(input, output, parameters);

                var sourceCodeLanguage = _rootProject.Project.GetSourceCodeLanguage();
                var languageGroups     = package.ContentFiles.GroupBy(file => file.CodeLanguage);
                var selectedGroup      = languageGroups.FirstOrDefault(g => g.Key == sourceCodeLanguage) ??
                                         languageGroups.FirstOrDefault(g => g.Key == null);
                if (selectedGroup != null)
                {
                    foreach (var contentFile in selectedGroup)
                    {
                        if (contentFile.CodeLanguage != null &&
                            string.Compare(contentFile.CodeLanguage, sourceCodeLanguage, StringComparison.OrdinalIgnoreCase) != 0)
                        {
                            continue;
                        }

                        var fileTransform = contentFile.PPOutputPath != null ? transform : null;

                        var fullPath = Path.Combine(package.Path, contentFile.Path);
                        if (contentFile.BuildAction == BuildAction.Compile)
                        {
                            builder.AddSourceReference(LibraryAsset.CreateFromRelativePath(package.Path, contentFile.Path, fileTransform));
                        }
                        else if (contentFile.BuildAction == BuildAction.EmbeddedResource)
                        {
                            builder.AddEmbedddedResource(LibraryAsset.CreateFromRelativePath(package.Path, contentFile.Path, fileTransform));
                        }
                        if (contentFile.CopyToOutput)
                        {
                            builder.AddRuntimeAsset(new LibraryAsset(contentFile.Path, contentFile.OutputPath, fullPath, fileTransform));
                        }
                    }
                }
            }

            return(builder.Build());
        }
Пример #32
0
        private void PopulateMetadataReferences(PackageDescription package, IDictionary <string, IMetadataReference> paths)
        {
            foreach (var assemblyPath in package.Target.CompileTimeAssemblies)
            {
                if (PackageDependencyProvider.IsPlaceholderFile(assemblyPath))
                {
                    continue;
                }

                var name = Path.GetFileNameWithoutExtension(assemblyPath);
                var path = Path.Combine(package.Path, assemblyPath);
                paths[name] = new MetadataFileReference(name, path);
            }
        }
Пример #33
0
        private static List <AssemblyDescription> GetPackageAssemblies(PackageDescription description, FrameworkName targetFramework)
        {
            var package = description.Package;
            var path    = description.Library.Path;
            var results = new List <AssemblyDescription>();

            IEnumerable <IPackageAssemblyReference> compatibleReferences;

            if (VersionUtility.TryGetCompatibleItems(targetFramework, package.AssemblyReferences, out compatibleReferences))
            {
                // Get the list of references for this target framework
                var references = compatibleReferences.ToList();

                // See if there's a list of specific references defined for this target framework
                IEnumerable <PackageReferenceSet> referenceSets;
                if (VersionUtility.TryGetCompatibleItems(targetFramework, package.PackageAssemblyReferences, out referenceSets))
                {
                    // Get the first compatible reference set
                    var referenceSet = referenceSets.FirstOrDefault();

                    if (referenceSet != null)
                    {
                        // Remove all assemblies of which names do not appear in the References list
                        references.RemoveAll(r => !referenceSet.References.Contains(r.Name, StringComparer.OrdinalIgnoreCase));
                    }
                }

                foreach (var reference in references)
                {
                    // Skip anything that isn't a dll. Unfortunately some packages put random stuff
                    // in the lib folder and they surface as assembly references
                    if (!Path.GetExtension(reference.Path).Equals(".dll", StringComparison.OrdinalIgnoreCase))
                    {
                        continue;
                    }

                    string fileName = Path.Combine(path, reference.Path);
                    results.Add(new AssemblyDescription
                    {
                        // Remove the .dll extension
                        Name         = Path.GetFileNameWithoutExtension(reference.Name),
                        Path         = fileName,
                        RelativePath = reference.Path
                    });
                }
            }

            return(results);
        }
Пример #34
0
        private LibraryExport ExportPackage(PackageDescription package)
        {
            var references = new Dictionary <string, IMetadataReference>(StringComparer.OrdinalIgnoreCase);

            PopulateMetadataReferences(package, references);

            var sourceReferences = new List <ISourceReference>();

            foreach (var sharedSource in GetSharedSources(package))
            {
                sourceReferences.Add(new SourceFileReference(sharedSource));
            }

            return(new LibraryExport(references.Values.ToList(), sourceReferences));
        }
        private string HtmlDiff(string packageName, string fromVersion, string untilVersion)
        {
            using (var writer = new StringWriter())
            {
                var formatter = new APIUpgradeToHtmlFormatter();

                var packageDescription = new PackageDescription
                {
                    PackageId = packageName,
                    Versions = new VersionPair(fromVersion, untilVersion)
                };

                var compareSetCreator = new CompareSetCreator();
                var sets = compareSetCreator.Create(packageDescription);
                var compareSetDiffer = new CompareSetDiffer();
                var diff = compareSetDiffer.Diff(sets);

                formatter.Render(writer, packageDescription, diff);

                return writer.ToString();
            }
        }
Пример #36
0
 PEAnalyzer(PackageDescription package)
 {
     _package = package;
 }
 public LicenseParser(PackageDescription package, Rule packageRule)
 {
     _package = package;
     _packageRule = packageRule;
 }
Пример #38
0
 /// <summary>Determines whether the specified object is equal to the current object.</summary>
 /// <returns>true if the specified object  is equal to the current object; otherwise, false.</returns>
 /// <param name="other">The object to compare with the current object. </param>
 private bool Equals(PackageDescription other)
 {
     return string.Equals(this.BuildDate, other.BuildDate) && string.Equals(this.Id, other.Id) && string.Equals(this.Version, other.Version);
 }
Пример #39
0
        private List<AssemblyDescription> GetFrameworkAssemblies(PackageDescription description, FrameworkName targetFramework)
        {
            var results = new List<AssemblyDescription>();
            var package = description.Package;

            IEnumerable<FrameworkAssemblyReference> frameworkAssemblies;
            if (VersionUtility.TryGetCompatibleItems(targetFramework, package.FrameworkAssemblies, out frameworkAssemblies))
            {
                foreach (var reference in frameworkAssemblies)
                {
                    string path;
                    if (_frameworkReferenceResolver.TryGetAssembly(reference.AssemblyName, targetFramework, out path))
                    {
                        results.Add(new AssemblyDescription
                        {
                            Name = reference.AssemblyName,
                            Path = path
                        });
                    }
                }
            }

            return results;
        }
 public Contributor(PackageDescription package)
 {
     Package = package;
 }
Пример #41
0
        private static List<AssemblyDescription> GetPackageAssemblies(PackageDescription description, FrameworkName targetFramework)
        {
            var package = description.Package;
            var path = description.Library.Path;
            var results = new List<AssemblyDescription>();

            IEnumerable<IPackageAssemblyReference> compatibleReferences;
            if (VersionUtility.TryGetCompatibleItems(targetFramework, package.AssemblyReferences, out compatibleReferences))
            {
                // Get the list of references for this target framework
                var references = compatibleReferences.ToList();

                // See if there's a list of specific references defined for this target framework
                IEnumerable<PackageReferenceSet> referenceSets;
                if (VersionUtility.TryGetCompatibleItems(targetFramework, package.PackageAssemblyReferences, out referenceSets))
                {
                    // Get the first compatible reference set
                    var referenceSet = referenceSets.FirstOrDefault();

                    if (referenceSet != null)
                    {
                        // Remove all assemblies of which names do not appear in the References list
                        references.RemoveAll(r => !referenceSet.References.Contains(r.Name, StringComparer.OrdinalIgnoreCase));
                    }
                }

                foreach (var reference in references)
                {
                    // Skip anything that isn't a dll. Unfortunately some packages put random stuff
                    // in the lib folder and they surface as assembly references
                    if (!Path.GetExtension(reference.Path).Equals(".dll", StringComparison.OrdinalIgnoreCase))
                    {
                        continue;
                    }

                    string fileName = Path.Combine(path, reference.Path);
                    results.Add(new AssemblyDescription
                    {
                        // Remove the .dll extension
                        Name = Path.GetFileNameWithoutExtension(reference.Name),
                        Path = fileName
                    });
                }
            }

            return results;
        }
Пример #42
0
        private LibraryExport ExportPackage(PackageDescription package)
        {
            var builder = LibraryExportBuilder.Create(package);
            builder.WithNativeLibraries(PopulateAssets(package, package.NativeLibraries));
            builder.WithRuntimeAssemblies(PopulateAssets(package, package.RuntimeAssemblies));
            builder.WithCompilationAssemblies(PopulateAssets(package, package.CompileTimeAssemblies));
            builder.WithSourceReferences(GetSharedSources(package));
            builder.WithAnalyzerReference(GetAnalyzerReferences(package));

            if (package.ContentFiles.Any())
            {
                var parameters = PPFileParameters.CreateForProject(_rootProject.Project);
                Action<Stream, Stream> transform = (input, output) => PPFilePreprocessor.Preprocess(input, output, parameters);

                var sourceCodeLanguage = _rootProject.Project.GetSourceCodeLanguage();
                var languageGroups = package.ContentFiles.GroupBy(file => file.CodeLanguage);
                var selectedGroup = languageGroups.FirstOrDefault(g => g.Key == sourceCodeLanguage) ??
                                    languageGroups.FirstOrDefault(g => g.Key == null);
                if (selectedGroup != null)
                {
                    foreach (var contentFile in selectedGroup)
                    {
                        if (contentFile.CodeLanguage != null &&
                            string.Compare(contentFile.CodeLanguage, sourceCodeLanguage, StringComparison.OrdinalIgnoreCase) != 0)
                        {
                            continue;
                        }

                        var fileTransform = contentFile.PPOutputPath != null ? transform : null;

                        var fullPath = Path.Combine(package.Path, contentFile.Path);
                        if (contentFile.BuildAction == BuildAction.Compile)
                        {
                            builder.AddSourceReference(LibraryAsset.CreateFromRelativePath(package.Path, contentFile.Path, fileTransform));
                        }
                        else if (contentFile.BuildAction == BuildAction.EmbeddedResource)
                        {
                            builder.AddEmbedddedResource(LibraryAsset.CreateFromRelativePath(package.Path, contentFile.Path, fileTransform));
                        }
                        if (contentFile.CopyToOutput)
                        {
                            builder.AddRuntimeAsset(new LibraryAsset(contentFile.Path, contentFile.OutputPath, fullPath, fileTransform));
                        }
                    }
                }
            }
            if (package.RuntimeTargets.Any())
            {
                foreach (var targetGroup in package.RuntimeTargets.GroupBy(t => t.Runtime))
                {
                    var runtime = new List<LibraryAsset>();
                    var native = new List<LibraryAsset>();

                    foreach (var lockFileRuntimeTarget in targetGroup)
                    {
                        if (string.Equals(lockFileRuntimeTarget.AssetType, "native", StringComparison.OrdinalIgnoreCase))
                        {
                            native.Add(LibraryAsset.CreateFromRelativePath(package.Path, lockFileRuntimeTarget.Path));
                        }
                        else if (string.Equals(lockFileRuntimeTarget.AssetType, "runtime", StringComparison.OrdinalIgnoreCase))
                        {
                            runtime.Add(LibraryAsset.CreateFromRelativePath(package.Path, lockFileRuntimeTarget.Path));
                        }
                    }

                    builder.AddRuntimeTarget(new LibraryRuntimeTarget(targetGroup.Key, runtime, native));
                }
            }

            return builder.Build();
        }
 public PropSheetParser(PackageDescription package)
 {
     _package = package;
 }
Пример #44
0
 private IEnumerable<LibraryAsset> GetSharedSources(PackageDescription package)
 {
     return package
         .PackageLibrary
         .Files
         .Where(path => path.StartsWith("shared" + Path.DirectorySeparatorChar))
         .Select(path => LibraryAsset.CreateFromRelativePath(package.Path, path));
 }
        public void Example()
        {
            var engine = new ComparerEngine();
            var diff = engine.CreateDiff("ExampleV1.dll", "ExampleV2.dll");

            var writer = new StringWriter();
            var formatter = new APIUpgradeToHtmlFormatter();
            var packageDescription = new PackageDescription
            {
                PackageId = "Example",
                Versions = new VersionPair("1.0.0", "2.0.0")
            };

            var diffedCompareSet = new DiffedCompareSet
            {
                Diff = diff,
                Set = new CompareSet()
            };
            
            formatter.Render(writer, packageDescription, new [] {diffedCompareSet});

            Approvals.VerifyHtml(writer.ToString());
        }
Пример #46
0
 internal static Url Create(PackageDescription package, string url, string type)
 {
     return new Url() {Uri = url, Type = type, Id = new Huid(package.PackageName, package.PackageVersion, package.PackageArch, package.PubToken, "url", type, url)};
 }
Пример #47
0
 private IEnumerable<LibraryAsset> PopulateAssets(PackageDescription package, IEnumerable<LockFileItem> section)
 {
     foreach (var assemblyPath in section)
     {
         yield return LibraryAsset.CreateFromRelativePath(package.Path, assemblyPath.Path);
     }
 }
        public void Render(TextWriter writer, PackageDescription description, DiffedCompareSet[] diffedCompareSets)
        {
            var data = ViewModelBuilder.Build(description, diffedCompareSets);

            template(writer, data);
        }
Пример #49
0
        private IEnumerable<string> GetSharedSources(PackageDescription description, FrameworkName targetFramework)
        {
            var directory = Path.Combine(description.Library.Path, "shared");
            if (!Directory.Exists(directory))
            {
                return Enumerable.Empty<string>();
            }

            return Directory.EnumerateFiles(directory, "*.*", SearchOption.AllDirectories);
        }
 public BindingMinMaxParser(PackageDescription package, Rule packageRule)
 {
     _package = package;
     _packageRule = packageRule;
 }
Пример #51
0
        private void PopulateMetadataReferences(PackageDescription description, FrameworkName targetFramework, IDictionary<string, IMetadataReference> paths)
        {
            var packageAssemblies = GetPackageAssemblies(description, targetFramework);

            // Use contract if both contract and target path are available
            bool hasContract = description.ContractPath != null;
            bool hasLib = packageAssemblies.Any();

            if (hasContract && hasLib)
            {
                paths[description.Library.Identity.Name] = new MetadataFileReference(description.Library.Identity.Name, description.ContractPath);
            }
            else if (hasLib)
            {
                foreach (var assembly in packageAssemblies)
                {
                    paths[assembly.Name] = new MetadataFileReference(assembly.Name, assembly.Path);
                }
            }

            foreach (var assembly in GetFrameworkAssemblies(description, targetFramework))
            {
                paths[assembly.Name] = new MetadataFileReference(assembly.Name, assembly.Path);
            }
        }
Пример #52
0
        private IEnumerable<AnalyzerReference> GetAnalyzerReferences(PackageDescription package)
        {
            var analyzers = package
                .PackageLibrary
                .Files
                .Where(path => path.StartsWith("analyzers" + Path.DirectorySeparatorChar) &&
                               path.EndsWith(".dll"));


            var analyzerRefs = new List<AnalyzerReference>();
            // See https://docs.nuget.org/create/analyzers-conventions for the analyzer
            // NuGet specification
            foreach (var analyzer in analyzers)
            {
                var specifiers = analyzer.Split(Path.DirectorySeparatorChar);

                var assemblyPath = Path.Combine(package.Path, analyzer);

                // $/analyzers/{Framework Name}{Version}/{Supported Architecture}/{Supported Programming Language}/{Analyzer}.dll
                switch (specifiers.Length)
                {
                    // $/analyzers/{analyzer}.dll
                    case 2:
                        analyzerRefs.Add(new AnalyzerReference(
                            assembly: assemblyPath,
                            framework: null,
                            language: null,
                            runtimeIdentifier: null
                        ));
                        break;

                    // $/analyzers/{framework}/{analyzer}.dll
                    case 3:
                        analyzerRefs.Add(new AnalyzerReference(
                            assembly: assemblyPath,
                            framework: NuGetFramework.Parse(specifiers[1]),
                            language: null,
                            runtimeIdentifier: null
                        ));
                        break;

                    // $/analyzers/{framework}/{language}/{analyzer}.dll
                    case 4:
                        analyzerRefs.Add(new AnalyzerReference(
                            assembly: assemblyPath,
                            framework: NuGetFramework.Parse(specifiers[1]),
                            language: specifiers[2],
                            runtimeIdentifier: null
                        ));
                        break;

                    // $/analyzers/{framework}/{runtime}/{language}/{analyzer}.dll
                    case 5:
                        analyzerRefs.Add(new AnalyzerReference(
                            assembly: assemblyPath,
                            framework: NuGetFramework.Parse(specifiers[1]),
                            language: specifiers[3],
                            runtimeIdentifier: specifiers[2]
                        ));
                        break;

                        // Anything less than 2 specifiers or more than 4 is
                        // illegal according to the specification and will be
                        // ignored
                }
            }
            return analyzerRefs;
        }
Пример #53
0
        public void Initialize(IEnumerable<LibraryDescription> packages, FrameworkName targetFramework)
        {
            Dependencies = packages;

            var cacheResolvers = GetCacheResolvers();
            var defaultResolver = new DefaultPackagePathResolver(_repository.RepositoryRoot);

            foreach (var dependency in packages)
            {
                var packageInfo = _repository.FindPackagesById(dependency.Identity.Name)
                    .FirstOrDefault(p => p.Version == dependency.Identity.Version);

                if (packageInfo == null)
                {
                    continue;
                }

                string packagePath = ResolvePackagePath(defaultResolver, cacheResolvers, packageInfo);

                // If the package path doesn't exist then mark this dependency as unresolved
                if (!Directory.Exists(packagePath))
                {
                    dependency.Resolved = false;
                    continue;
                }

                dependency.Path = packagePath;

                var packageDescription = new PackageDescription
                {
                    Library = dependency,
                    Package = packageInfo
                };

                _packageDescriptions[packageInfo.Id] = packageDescription;

                if (Servicing.Breadcrumbs.Instance.IsPackageServiceable(packageDescription.Package))
                {
                    Servicing.Breadcrumbs.Instance.AddBreadcrumb(packageInfo.Id, packageInfo.Version);
                }

                var group = packageInfo.LockFileLibrary.FrameworkGroups.FirstOrDefault(g => g.TargetFramework == targetFramework);
                if (group == null)
                {
                    continue;
                }

                var assemblies = new List<string>();

                foreach (var assemblyPath in group.RuntimeAssemblies)
                {
                    var name = Path.GetFileNameWithoutExtension(assemblyPath);
                    var path = Path.Combine(dependency.Path, assemblyPath);

                    string replacementPath;
                    if (Servicing.ServicingTable.TryGetReplacement(
                        packageInfo.Id,
                        packageInfo.Version,
                        assemblyPath,
                        out replacementPath))
                    {
                        _packageAssemblyLookup[name] = new PackageAssembly()
                        {
                            Path = replacementPath,
                            RelativePath = assemblyPath,
                            Library = dependency
                        };
                    }
                    else
                    {
                        _packageAssemblyLookup[name] = new PackageAssembly()
                        {
                            Path = path,
                            RelativePath = assemblyPath,
                            Library = dependency
                        };
                    }

                    assemblies.Add(name);
                }

                dependency.LoadableAssemblies = assemblies;
            }
        }
Пример #54
0
        private IEnumerable<string> GetSharedSources(PackageDescription description, FrameworkName targetFramework)
        {
            var directory = Path.Combine(description.Library.Path, "shared");

            return description.Package.LockFileLibrary.Files.Where(path => path.StartsWith("shared" + Path.DirectorySeparatorChar))
                                                            .Select(path => Path.Combine(description.Library.Path, path));
        }
Пример #55
0
        private bool TryPopulateMetadataReferences(PackageDescription description, FrameworkName targetFramework, IDictionary<string, IMetadataReference> paths)
        {
            var group = description.Package.LockFileLibrary.FrameworkGroups.FirstOrDefault(f => f.TargetFramework == targetFramework);
            if (group == null)
            {
                return false;
            }

            foreach (var assemblyPath in group.CompileTimeAssemblies)
            {
                var name = Path.GetFileNameWithoutExtension(assemblyPath);
                var path = Path.Combine(description.Library.Path, assemblyPath);
                paths[name] = new MetadataFileReference(name, path);
            }
            return true;
        }
Пример #56
0
        private LibraryExport ExportPackage(PackageDescription package)
        {
            var nativeLibraries = new List<LibraryAsset>();
            PopulateAssets(package, package.Target.NativeLibraries, nativeLibraries);

            var runtimeAssemblies = new List<LibraryAsset>();
            PopulateAssets(package, package.Target.RuntimeAssemblies, runtimeAssemblies);

            var compileAssemblies = new List<LibraryAsset>();
            PopulateAssets(package, package.Target.CompileTimeAssemblies, compileAssemblies);

            var sourceReferences = new List<string>();
            foreach (var sharedSource in GetSharedSources(package))
            {
                sourceReferences.Add(sharedSource);
            }

            return new LibraryExport(package, compileAssemblies, sourceReferences, runtimeAssemblies, nativeLibraries);
        }
Пример #57
0
 private IEnumerable<string> GetSharedSources(PackageDescription package)
 {
     return package
         .Library
         .Files
         .Where(path => path.StartsWith("shared" + Path.DirectorySeparatorChar))
         .Select(path => Path.Combine(package.Path, path));
 }
Пример #58
0
        private void PopulateAssets(PackageDescription package, IEnumerable<LockFileItem> section, IList<LibraryAsset> assets)
        {
            foreach (var assemblyPath in section)
            {
                if (PathUtility.IsPlaceholderFile(assemblyPath))
                {
                    continue;
                }

                assets.Add(new LibraryAsset(
                    Path.GetFileNameWithoutExtension(assemblyPath),
                    assemblyPath,
                    Path.Combine(package.Path, assemblyPath)));
            }
        }
Пример #59
0
        public void Initialize(IEnumerable<LibraryDescription> packages, FrameworkName targetFramework)
        {
            Dependencies = packages;

            var cacheResolvers = GetCacheResolvers();
            var defaultResolver = new DefaultPackagePathResolver(_repository.RepositoryRoot);

            foreach (var dependency in packages)
            {
                var package = FindCandidate(dependency.Identity.Name, dependency.Identity.Version);

                if (package == null)
                {
                    continue;
                }

                string packagePath = ResolvePackagePath(defaultResolver, cacheResolvers, package);

                dependency.Type = "Package";
                dependency.Path = packagePath;

                var packageDescription = new PackageDescription
                {
                    Library = dependency,
                    Package = package
                };

                _packageDescriptions[package.Id] = packageDescription;

                // Try to find a contract folder for this package and store that
                // for compilation
                string contractPath = Path.Combine(dependency.Path, "lib", "contract",
                                                   package.Id + ".dll");
                if (File.Exists(contractPath))
                {
                    packageDescription.ContractPath = contractPath;
                }

                foreach (var assemblyInfo in GetPackageAssemblies(packageDescription, targetFramework))
                {
                    _packageAssemblyPaths[assemblyInfo.Name] = assemblyInfo.Path;
                }
            }
        }