public bool Resolve() { if (_resolvedManifestPath == null) { _resolvedManifestPath = _manifestResolver.GetManifest(ManifestFileOrPath); } PrintSettings(); _writer.BeginWrite().Text("Reading manifest..."); PackageManifestRoot manifest; using (Stream stream = File.OpenRead(_resolvedManifestPath)) { manifest = _packageSerializer.DeserializePackageManifestRoot(stream); manifest.Validate(); } _writer.Success(" ok").EndWrite(); _writer.BeginWrite().Text("Getting repositories..."); var scope = CacheReposOnly ? RepositoryScope.Cache : RepositoryScope.Any; var repos = Repository == null ? _repositoryFactory.TryGetEnabledRepos(scope).ToArray() : new[] { _repositoryFactory.GetCustomRepository(Repository) }; if (repos.Length == 0 || repos[0] == null) { _writer.Error(" no available repos"); return(false); } _writer.EndWrite(); foreach (var repository in repos) { _writer.Info(" " + repository); } _writer.EndWrite(); _writer.BeginWrite().Text("Resolving..."); var resolutionResult = _dependencyResolver.Resolve(manifest, repos, ReleaseLabel); if (resolutionResult.ResolutionTable.HasConflicts) { _writer.Error(" failed").EndWrite() .Empty() .BeginWrite().Error("Could not resolve manifest due to conflicts...").EndWrite(); PrintConflicts(_dependencyResolver, resolutionResult); return(false); } _writer.Success(" ok").EndWrite(); if (DryRun) { var packageIds = new List <string>(); var versions = new List <string>(); var platforms = new List <string>(); var inRepo = new List <string>(); foreach (var infos in resolutionResult.ResolutionTable.GetSatisfyingInfos()) { packageIds.Add(infos.PackageId); versions.Add(infos.Version.ToString()); platforms.Add(infos.Framework); inRepo.Add(infos.Repo.Name); } _writer.Title("Resolved packages") .BeginColumns(new int?[] { packageIds.Max(p => p.Length + 2), versions.Max(v => v.Length + 2), platforms.Max(p => (p?.Length ?? 0) + 2), null }); _writer.Header("PackageId").Header("Version").Header("Fmwk").Header("Repository"); for (int i = 0; i < packageIds.Count; i++) { _writer.Text(packageIds[i]).Text(versions[i]).Text(platforms[i]).Text(inRepo[i]); } _writer.EndColumns(); return(true); } Install(resolutionResult, manifest, scope); return(true); }
public void Pack() { _packageSpecFile = _manifestResolver.GetManifest(ManifestFileOrPath); var solutionDirectory = Path.GetDirectoryName(_packageSpecFile); _resolvedOutputPath = OutputPath == null || !Path.IsPathRooted(OutputPath) ? Path.Combine(_manifestResolver.CurrentDirectory, OutputPath ?? solutionDirectory) : OutputPath; if (!Directory.Exists(_resolvedOutputPath)) { throw new DirectoryNotFoundException($"Destination directory '{_resolvedOutputPath}' does not exist"); } _writer.BeginColumns(new int?[] { 15, null }) .Text("Package Spec:").Text(_packageSpecFile) .Text("Solution Root:").Text(solutionDirectory) .Text("Output Dir:").Text(_resolvedOutputPath) .EndColumns().Empty(); PackageSpec packageSpec; using (Stream packageSpecStream = File.OpenRead(_packageSpecFile)) { packageSpec = _packageSerializer.DeserializePackageSpec(packageSpecStream); packageSpec.Validate(); } if (Version != null) { _writer.Info($"Overriding package version '{packageSpec.Version}' from spec with '{Version}'"); packageSpec.Version = NuGet.Versioning.NuGetVersion.Parse(Version); } if (ReleaseLabel != null) { packageSpec.Version = packageSpec.Version.Append(ReleaseLabel).RevisionToLabel(); } if (!string.IsNullOrEmpty(packageSpec.Version.Release)) { packageSpec.Version = packageSpec.Version.RevisionToLabel(); } var packageName = Type == PackType.NuGet ? new NuGet.Packaging.VersionFolderPathResolver(null).GetPackageFileName(packageSpec.PackageId, packageSpec.Version) : packageSpec.GetNewManifestFileName(); DestinationFile = Path.Combine(_resolvedOutputPath, packageName); if (File.Exists(DestinationFile)) { _writer.Warning($"Package '{packageName}' already exists, it will be overwritted"); } _writer.Text($"Creating package '{packageName}', {packageSpec}..."); long bytesWritten; using (Stream writeStream = File.Create(DestinationFile)) using (var packageWriter = GetWriter(solutionDirectory, packageSpec, writeStream)) { packageWriter.OnBeginPackingFile = p => _writer.EndWrite().BeginWrite().Text("Packing ").Success(p.FileName).Text("... "); packageWriter.OnEndPackingFile = p => _writer.Success("ok").EndWrite(); bytesWritten = packageWriter.WriteAll(); } var packageSize = new FileInfo(DestinationFile).Length; var written = PathUtils.FileSizeToString(bytesWritten); var packed = PathUtils.FileSizeToString(packageSize); var ratio = bytesWritten == 0 ? 100 : packageSize * 100 / bytesWritten; _writer.Text($"Packed {written} to {packed} (ratio: {ratio:D2}%)"); }