public void RepositoryManagerLoadAllPackagesTest() { log.Info("-----------------------------RepositoryManager LoadAllPackages-----------------------------"); var tempFolder = "RepositoryManagerTestTempFolder"; try { // Empty folder. Directory.CreateDirectory(tempFolder); var repo = new FilePackageRepository(tempFolder); Assert.IsTrue(repo.GetPackages(new PackageSpecifier()).Any() == false, "Empty"); log.Info("Empty folder - SUCCESS"); // Folder with one plugin. Directory.CreateDirectory("TapPackage"); File.Copy("TapPackages/MyPlugin1.TapPackage", tempFolder + "/MyPlugin1.TapPackage", true); repo.Reset(); Assert.IsTrue(repo.GetPackages(new PackageSpecifier(os: "Windows")).Count() == 1, "Folder with one package"); log.Info("Folder with one plugin - SUCCESS"); // Folder with several plugins. Directory.GetFiles("TapPackages").ToList().ForEach(f => File.Copy(f, Path.Combine(tempFolder, Path.GetFileName(f)), true)); repo.Reset(); var anyVersion = new PackageSpecifier(os: "Windows"); Assert.AreEqual(9, repo.GetPackages(anyVersion).Count(), "Folder with several packages"); log.Info("Folder with several plugin - SUCCESS"); } finally { if (Directory.Exists(tempFolder)) { Directory.Delete(tempFolder, true); } } }
public int Execute(CancellationToken cancellationToken) { if (string.IsNullOrEmpty(PackageName)) { log.Error("Please specify a valid package name."); return(1); } { // check if the package exists in the repo. var repo = new HttpPackageRepository(PackageRepository); var spec = new PackageSpecifier(PackageName, Version != null ? VersionSpecifier.Parse(Version) : null); var pkg = repo.GetPackages(spec, TapThread.Current.AbortToken).FirstOrDefault(); if (pkg == null) { log.Error("No such package"); return(2); } if (Version == null) { Version = pkg.Version.ToString(); } PackageName = pkg.Name; } string ifRefStr = ""; if (NoReference) { ifRefStr = " Reference=\"false\""; } string insert = $"<OpenTapPackageReference Include=\"{PackageName}\" Version=\"{Version}\" Repository=\"{PackageRepository}\"{ifRefStr}/>"; var csproj = Project ?? get_csproj(); if (csproj == null) { // error was already printed. return(1); } if (File.Exists(csproj) == false) { log.Error("C# project files does not exist {0}", csproj); return(2); } var document = XDocument.Load(csproj, LoadOptions.PreserveWhitespace); var projectXml = document.Element("Project"); XElement itemGroupXml = null; var condition = $"'$(Configuration)' == '{Configuration}'"; var itemGroups = projectXml.Elements("ItemGroup"); // if condition is select take the group matching the conditions. if (string.IsNullOrWhiteSpace(Configuration) == false) { itemGroups = itemGroups.Where(grp => grp.Attribute("Condition")?.Value == condition); } bool needsAddNewElem = true; foreach (var grp in itemGroups) { var existingElem = grp.Elements("OpenTapPackageReference") .Where(elem => string.Equals(elem.Attribute("Reference")?.Value ?? "True", (!NoReference).ToString(), StringComparison.InvariantCultureIgnoreCase)) .FirstOrDefault(elem => elem.Attribute("Include")?.Value == PackageName); if (existingElem != null) { // the package reference already exists. In this case, lets try to just update set the version. var version = existingElem.Attribute("Version"); if (version != null) { if (version.Value == Version) { log.Info("Package {0} version {1} already in the csproj.", PackageName, Version); return(0); } log.Info("Package {0} version {1} changed to version {2}.", PackageName, version.Value, Version); version.Value = Version; needsAddNewElem = false; break; } } } if (needsAddNewElem) { // add a new OpenTapPackageReference or AdditionalOpenTapPackage element. // to make the whitespace look right, there is some adding additional whitespace // Try to find the existing item group used for package references. foreach (var grp in itemGroups) { if (grp.Elements("OpenTapPackageReference").Any()) { itemGroupXml = grp; break; } } if (itemGroupXml == null) { itemGroupXml = new XElement("ItemGroup"); if (string.IsNullOrWhiteSpace(Configuration) == false) { // e.g Condition="'{Configuration}' == 'Debug'" itemGroupXml.Add(new XAttribute("Condition", condition)); } itemGroupXml.Add("\n"); itemGroupXml.Add(" "); projectXml.Add("\n"); projectXml.Add(" "); projectXml.Add(itemGroupXml); projectXml.Add("\n"); } itemGroupXml.Add(" "); itemGroupXml.Add(XElement.Parse(insert)); itemGroupXml.Add("\n"); itemGroupXml.Add(" "); log.Info("Package {0} version {1} reference added to the project.", PackageName, Version); } document.Save(csproj, SaveOptions.DisableFormatting); return(0); }