diff options
author | Lluis Sanchez <llsan@microsoft.com> | 2022-02-09 13:42:41 +0300 |
---|---|---|
committer | Lluis Sanchez <llsan@microsoft.com> | 2022-02-09 13:50:10 +0300 |
commit | e0809a24dcd641d2ed4299db0be8eacc103b0d0b (patch) | |
tree | 9997ad8d644f0fbf471a8bf44d053aa4976d4667 | |
parent | 92d71b2bf4cef3e7730417047f2fdf797ab3546d (diff) |
Add support for nuget packaging format
-rw-r--r-- | Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs | 345 | ||||
-rw-r--r-- | Mono.Addins.Setup/Mono.Addins.Setup/SetupTool.cs | 7 | ||||
-rw-r--r-- | Mono.Addins/Mono.Addins.Description/PackageFormat.cs | 3 |
3 files changed, 212 insertions, 143 deletions
diff --git a/Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs b/Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs index e9ee1d4..aae0064 100644 --- a/Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs +++ b/Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs @@ -58,9 +58,9 @@ namespace Mono.Addins.Setup AddinStore store; AddinSystemConfiguration config; const string addinFilesDir = "_addin_files"; - + AddinRegistry registry; - + /// <summary> /// Initializes a new instance /// </summary> @@ -74,12 +74,12 @@ namespace Mono.Addins.Setup registry = AddinManager.Registry; else registry = AddinRegistry.GetGlobalRegistry (); - + repositories = new RepositoryRegistry (this); store = new AddinStore (this); AddAddinRepositoryProvider ("MonoAddins", new MonoAddinsRepositoryProvider (this)); } - + /// <summary> /// Initializes a new instance /// </summary> @@ -93,18 +93,18 @@ namespace Mono.Addins.Setup store = new AddinStore (this); AddAddinRepositoryProvider ("MonoAddins", new MonoAddinsRepositoryProvider (this)); } - + /// <summary> /// The add-in registry being managed /// </summary> public AddinRegistry Registry { get { return registry; } } - + internal string RepositoryCachePath { get { return Path.Combine (registry.RegistryPath, "repository-cache"); } } - + string RootConfigFile { get { return Path.Combine (registry.RegistryPath, "addins-setup-v2.config"); } } @@ -115,7 +115,7 @@ namespace Mono.Addins.Setup string RootConfigFileOld { get { return Path.Combine (registry.RegistryPath, "addins-setup.config"); } } - + /// <summary> /// Default add-in namespace of the application (optional). If set, only add-ins that belong to that namespace /// will be shown in add-in lists. @@ -124,7 +124,7 @@ namespace Mono.Addins.Setup get { return applicationNamespace; } set { applicationNamespace = value; } } - + /// <summary> /// Directory where to install add-ins. If not specified, the 'addins' subdirectory of the /// registry location is used. @@ -138,18 +138,18 @@ namespace Mono.Addins.Setup } set { installDirectory = value; } } - + /// <summary> /// Returns a RepositoryRegistry which can be used to manage on-line repository references /// </summary> public RepositoryRegistry Repositories { get { return repositories; } } - + internal AddinStore Store { get { return store; } } - + /// <summary> /// Resolves add-in dependencies. /// </summary> @@ -177,11 +177,11 @@ namespace Mono.Addins.Setup /// add-in, and all packages that provide the add-in dependencies. In some cases, packages may need to /// be installed (for example, when an installed add-in needs to be upgraded). /// </remarks> - public bool ResolveDependencies (IProgressStatus statusMonitor, AddinRepositoryEntry[] addins, out PackageCollection resolved, out PackageCollection toUninstall, out DependencyCollection unresolved) + public bool ResolveDependencies (IProgressStatus statusMonitor, AddinRepositoryEntry [] addins, out PackageCollection resolved, out PackageCollection toUninstall, out DependencyCollection unresolved) { return store.ResolveDependencies (statusMonitor, addins, out resolved, out toUninstall, out unresolved); } - + /// <summary> /// Resolves add-in dependencies. /// </summary> @@ -213,7 +213,7 @@ namespace Mono.Addins.Setup { return store.ResolveDependencies (statusMonitor, packages, out toUninstall, out unresolved); } - + /// <summary> /// Installs add-in packages /// </summary> @@ -226,11 +226,11 @@ namespace Mono.Addins.Setup /// <returns> /// True if the installation succeeded /// </returns> - public bool Install (IProgressStatus statusMonitor, params string[] files) + public bool Install (IProgressStatus statusMonitor, params string [] files) { return store.Install (statusMonitor, files); } - + /// <summary> /// Installs add-in packages from on-line repositories /// </summary> @@ -243,11 +243,11 @@ namespace Mono.Addins.Setup /// <returns> /// True if the installation succeeded /// </returns> - public bool Install (IProgressStatus statusMonitor, params AddinRepositoryEntry[] addins) + public bool Install (IProgressStatus statusMonitor, params AddinRepositoryEntry [] addins) { return store.Install (statusMonitor, addins); } - + /// <summary> /// Installs add-in packages /// </summary> @@ -264,7 +264,7 @@ namespace Mono.Addins.Setup { return store.Install (statusMonitor, packages); } - + /// <summary> /// Uninstalls an add-in. /// </summary> @@ -278,7 +278,7 @@ namespace Mono.Addins.Setup { store.Uninstall (statusMonitor, id); } - + /// <summary> /// Uninstalls a set of add-ins /// </summary> @@ -292,7 +292,7 @@ namespace Mono.Addins.Setup { store.Uninstall (statusMonitor, ids); } - + /// <summary> /// Gets information about an add-in /// </summary> @@ -345,11 +345,11 @@ namespace Mono.Addins.Setup /// This methods returns a list of add-ins which have the add-in identified by 'id' as a direct /// (or indirect if recursive=True) dependency. /// </remarks> - public Addin[] GetDependentAddins (string id, bool recursive) + public Addin [] GetDependentAddins (string id, bool recursive) { return store.GetDependentAddins (id, recursive); } - + /// <summary> /// Packages an add-in /// </summary> @@ -368,7 +368,7 @@ namespace Mono.Addins.Setup /// repository. The package will include the main assembly or manifest of the add-in and any external /// file declared in the add-in metadata. /// </remarks> - public string[] BuildPackage (IProgressStatus statusMonitor, string targetDirectory, params string[] filePaths) + public string [] BuildPackage (IProgressStatus statusMonitor, string targetDirectory, params string [] filePaths) { return BuildPackage (statusMonitor, false, targetDirectory, filePaths); } @@ -394,7 +394,7 @@ namespace Mono.Addins.Setup /// repository. The package will include the main assembly or manifest of the add-in and any external /// file declared in the add-in metadata. /// </remarks> - public string[] BuildPackage (IProgressStatus statusMonitor, bool debugSymbols, string targetDirectory, params string[] filePaths) + public string [] BuildPackage (IProgressStatus statusMonitor, bool debugSymbols, string targetDirectory, params string [] filePaths) { List<string> outFiles = new List<string> (); foreach (string file in filePaths) { @@ -429,7 +429,7 @@ namespace Mono.Addins.Setup /// repository. The package will include the main assembly or manifest of the add-in and any external /// file declared in the add-in metadata. /// </remarks> - public string [] BuildPackage (IProgressStatus statusMonitor, bool debugSymbols, string targetDirectory, PackageFormat format , params string [] filePaths) + public string [] BuildPackage (IProgressStatus statusMonitor, bool debugSymbols, string targetDirectory, PackageFormat format, params string [] filePaths) { List<string> outFiles = new List<string> (); foreach (string file in filePaths) { @@ -439,7 +439,7 @@ namespace Mono.Addins.Setup } return outFiles.ToArray (); } - + string BuildPackageInternal (IProgressStatus monitor, bool debugSymbols, string targetDirectory, string filePath, PackageFormat format) { AddinDescription conf = registry.GetAddinDescription (monitor, filePath); @@ -447,74 +447,72 @@ namespace Mono.Addins.Setup monitor.ReportError ("Could not read add-in file: " + filePath, null); return null; } - + string basePath = Path.GetDirectoryName (Path.GetFullPath (filePath)); - + if (targetDirectory == null) targetDirectory = basePath; // Generate the file name - - string name; + + string localId; if (conf.LocalId.Length == 0) - name = Path.GetFileNameWithoutExtension (filePath); + localId = Path.GetFileNameWithoutExtension (filePath); else - name = conf.LocalId; - name = Addin.GetFullId (conf.Namespace, name, conf.Version); - name = name.Replace (',','_').Replace (".__", "."); + localId = conf.LocalId; - string outFilePath = Path.Combine (targetDirectory, name); - switch(format){ + string ext; + var name = Addin.GetFullId (conf.Namespace, localId, null); + string version = conf.Version; + + switch (format) { case PackageFormat.Mpack: - outFilePath += ".mpack"; + ext = ".mpack"; break; case PackageFormat.Vsix: - outFilePath += ".vsix"; + ext = ".vsix"; + break; + case PackageFormat.NuGet: + ext = ".nupkg"; + if (string.IsNullOrEmpty (version)) { + monitor.ReportError ("Add-in doesn't have a version", null); + return null; + } + version = GetNuGetVersion (version); break; default: throw new NotSupportedException (format.ToString ()); } - + + string outFilePath = Path.Combine (targetDirectory, name); + if (!string.IsNullOrEmpty (version)) + outFilePath += "." + version; + outFilePath += ext; + ZipOutputStream s = new ZipOutputStream (File.Create (outFilePath)); - s.SetLevel(5); + s.SetLevel (5); if (format == PackageFormat.Vsix) { XmlDocument doc = new XmlDocument (); doc.PreserveWhitespace = false; doc.LoadXml (conf.SaveToVsixXml ().OuterXml); - MemoryStream ms = new MemoryStream (); - XmlTextWriter tw = new XmlTextWriter (ms, System.Text.Encoding.UTF8); - tw.Formatting = Formatting.Indented; - doc.WriteTo (tw); - tw.Flush (); - byte [] data = ms.ToArray (); - - var infoEntry = new ZipEntry ("extension.vsixmanifest") { Size = data.Length }; - s.PutNextEntry (infoEntry); - s.Write (data, 0, data.Length); - s.CloseEntry (); + AddXmlFile (s, doc, "extension.vsixmanifest"); + } + + if (format == PackageFormat.NuGet) { + var doc = GenerateNuspec (conf); + AddXmlFile (s, doc, Addin.GetIdName (conf.AddinId).ToLower () + ".nuspec"); } // Generate a stripped down description of the add-in in a file, since the complete // description may be declared as assembly attributes - if (format == PackageFormat.Mpack || format == PackageFormat.Vsix) { - XmlDocument doc = new XmlDocument (); - doc.PreserveWhitespace = false; - doc.LoadXml (conf.SaveToXml ().OuterXml); - CleanDescription (doc.DocumentElement); - MemoryStream ms = new MemoryStream (); - XmlTextWriter tw = new XmlTextWriter (ms, System.Text.Encoding.UTF8); - tw.Formatting = Formatting.Indented; - doc.WriteTo (tw); - tw.Flush (); - byte [] data = ms.ToArray (); - - var infoEntry = new ZipEntry ("addin.info") { Size = data.Length }; - s.PutNextEntry (infoEntry); - s.Write (data, 0, data.Length); - s.CloseEntry (); - } + XmlDocument infoDoc = new XmlDocument (); + infoDoc.PreserveWhitespace = false; + infoDoc.LoadXml (conf.SaveToXml ().OuterXml); + CleanDescription (infoDoc.DocumentElement); + + AddXmlFile (s, infoDoc, "addin.info"); // Now add the add-in files @@ -532,7 +530,7 @@ namespace Mono.Addins.Setup files.Add (file + ".mdb"); } } - + foreach (var prop in conf.Properties) { try { var file = Util.NormalizePath (prop.Value); @@ -552,16 +550,18 @@ namespace Mono.Addins.Setup files.Add (relativeSatellite); } } - + monitor.Log ("Creating package " + Path.GetFileName (outFilePath)); - + foreach (string file in files) { string fp = Path.Combine (basePath, file); using (FileStream fs = File.OpenRead (fp)) { - byte[] buffer = new byte [fs.Length]; + byte [] buffer = new byte [fs.Length]; fs.Read (buffer, 0, buffer.Length); var fileName = Path.DirectorySeparatorChar == '\\' ? file.Replace ('\\', '/') : file; + if (format == PackageFormat.NuGet) + fileName = Path.Combine ("addin", fileName); var entry = new ZipEntry (fileName) { Size = fs.Length }; s.PutNextEntry (entry); s.Write (buffer, 0, buffer.Length); @@ -595,17 +595,7 @@ namespace Mono.Addins.Setup typesEl.AppendChild (typeEl); } doc.AppendChild (typesEl); - MemoryStream ms = new MemoryStream (); - XmlTextWriter tw = new XmlTextWriter (ms, System.Text.Encoding.UTF8); - tw.Formatting = Formatting.Indented; - doc.WriteTo (tw); - tw.Flush (); - byte [] data = ms.ToArray (); - - var infoEntry = new ZipEntry ("[Content_Types].xml") { Size = data.Length }; - s.PutNextEntry (infoEntry); - s.Write (data, 0, data.Length); - s.CloseEntry (); + AddXmlFile (s, doc, "[Content_Types].xml"); } s.Finish (); @@ -613,6 +603,81 @@ namespace Mono.Addins.Setup return outFilePath; } + private static void AddXmlFile (ZipOutputStream s, XmlDocument doc, string fileName) + { + MemoryStream ms = new MemoryStream (); + XmlTextWriter tw = new XmlTextWriter (ms, System.Text.Encoding.UTF8); + tw.Formatting = Formatting.Indented; + doc.WriteTo (tw); + tw.Flush (); + byte [] data = ms.ToArray (); + var infoEntry = new ZipEntry (fileName) { Size = data.Length }; + s.PutNextEntry (infoEntry); + s.Write (data, 0, data.Length); + s.CloseEntry (); + } + + XmlDocument GenerateNuspec (AddinDescription conf) + { + XmlDocument doc = new XmlDocument (); + var nugetNs = "http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"; + var rootElement = doc.CreateElement ("package", nugetNs); + doc.AppendChild (rootElement); + var metadataElement = doc.CreateElement ("metadata", nugetNs); + rootElement.AppendChild (metadataElement); + + var prop = doc.CreateElement ("id", nugetNs); + prop.InnerText = Addin.GetIdName (conf.AddinId); + metadataElement.AppendChild (prop); + + prop = doc.CreateElement ("version", nugetNs); + prop.InnerText = GetNuGetVersion (conf.Version); + metadataElement.AppendChild (prop); + + prop = doc.CreateElement ("packageTypes", nugetNs); + prop.InnerText = "VisualStudioMacExtension"; + metadataElement.AppendChild (prop); + + if (!string.IsNullOrEmpty (conf.Author)) { + prop = doc.CreateElement ("authors", nugetNs); + prop.InnerText = conf.Author; + metadataElement.AppendChild (prop); + } + + if (!string.IsNullOrEmpty (conf.Description)) { + prop = doc.CreateElement ("description", nugetNs); + prop.InnerText = conf.Description; + metadataElement.AppendChild (prop); + } + + if (!string.IsNullOrEmpty (conf.Name)) { + prop = doc.CreateElement ("title", nugetNs); + prop.InnerText = conf.Name; + metadataElement.AppendChild (prop); + } + + var depsElement = doc.CreateElement ("dependencies", nugetNs); + metadataElement.AppendChild (depsElement); + + foreach (var dep in conf.MainModule.Dependencies.OfType<AddinDependency> ()) { + var depElem = doc.CreateElement ("dependency", nugetNs); + depElem.SetAttribute ("id", Addin.GetFullId (conf.Namespace, dep.AddinId, null)); + depElem.SetAttribute ("version", GetNuGetVersion (dep.Version)); + depsElement.AppendChild (depElem); + } + return doc; + } + + static string GetNuGetVersion (string version) + { + if (Version.TryParse (version, out var parsedVersion)) { + // NuGet versions always have at least 3 components + if (parsedVersion.Build == -1) + version += ".0"; + } + return version; + } + static string GetContentType (string extension) { switch (extension) { @@ -675,11 +740,11 @@ namespace Mono.Addins.Setup } } } - + void CleanDescription (XmlElement parent) { ArrayList todelete = new ArrayList (); - + foreach (XmlNode nod in parent.ChildNodes) { XmlElement elem = nod as XmlElement; if (elem == null) { @@ -694,7 +759,7 @@ namespace Mono.Addins.Setup foreach (XmlNode e in todelete) parent.RemoveChild (e); } - + /// <summary> /// Generates an on-line repository /// </summary> @@ -712,46 +777,46 @@ namespace Mono.Addins.Setup { string mainPath = Path.Combine (path, "main.mrep"); var allAddins = new List<PackageRepositoryEntry> (); - - Repository rootrep = (Repository) AddinStore.ReadObject (mainPath, typeof(Repository)); + + Repository rootrep = (Repository)AddinStore.ReadObject (mainPath, typeof (Repository)); if (rootrep == null) rootrep = new Repository (); - + IProgressMonitor monitor = ProgressStatusMonitor.GetProgressMonitor (statusMonitor); BuildRepository (monitor, rootrep, path, "root.mrep", allAddins); AddinStore.WriteObject (mainPath, rootrep); GenerateIndexPage (rootrep, allAddins, path); monitor.Log.WriteLine ("Updated main.mrep"); } - + void BuildRepository (IProgressMonitor monitor, Repository rootrep, string rootPath, string relFilePath, List<PackageRepositoryEntry> allAddins) { DateTime lastModified = DateTime.MinValue; - + string mainFile = Path.Combine (rootPath, relFilePath); string mainPath = Path.GetDirectoryName (mainFile); string supportFileDir = Path.Combine (mainPath, addinFilesDir); - + if (File.Exists (mainFile)) lastModified = File.GetLastWriteTime (mainFile); - - Repository mainrep = (Repository) AddinStore.ReadObject (mainFile, typeof(Repository)); + + Repository mainrep = (Repository)AddinStore.ReadObject (mainFile, typeof (Repository)); if (mainrep == null) { mainrep = new Repository (); } - - ReferenceRepositoryEntry repEntry = (ReferenceRepositoryEntry) rootrep.FindEntry (relFilePath); + + ReferenceRepositoryEntry repEntry = (ReferenceRepositoryEntry)rootrep.FindEntry (relFilePath); DateTime rootLastModified = repEntry != null ? repEntry.LastModified : DateTime.MinValue; - + bool modified = false; - + monitor.Log.WriteLine ("Checking directory: " + mainPath); foreach (string file in Directory.EnumerateFiles (mainPath, "*.mpack")) { - + DateTime date = File.GetLastWriteTime (file); string fname = Path.GetFileName (file); - PackageRepositoryEntry entry = (PackageRepositoryEntry) mainrep.FindEntry (fname); - + PackageRepositoryEntry entry = (PackageRepositoryEntry)mainrep.FindEntry (fname); + if (entry != null && date > rootLastModified) { mainrep.RemoveEntry (entry); DeleteSupportFiles (supportFileDir, entry.Addin); @@ -760,8 +825,8 @@ namespace Mono.Addins.Setup if (entry == null) { entry = new PackageRepositoryEntry (); - AddinPackage p = (AddinPackage) Package.FromFile (file); - entry.Addin = (AddinInfo) p.Addin; + AddinPackage p = (AddinPackage)Package.FromFile (file); + entry.Addin = (AddinInfo)p.Addin; entry.Url = fname; entry.Addin.Properties.SetPropertyValue ("DownloadSize", new FileInfo (file).Length.ToString ()); ExtractSupportFiles (supportFileDir, file, entry.Addin); @@ -771,7 +836,7 @@ namespace Mono.Addins.Setup } allAddins.Add (entry); } - + var toRemove = new List<PackageRepositoryEntry> (); foreach (PackageRepositoryEntry entry in mainrep.Addins) { if (!File.Exists (Path.Combine (mainPath, entry.Url))) { @@ -779,12 +844,12 @@ namespace Mono.Addins.Setup modified = true; } } - + foreach (PackageRepositoryEntry entry in toRemove) { DeleteSupportFiles (supportFileDir, entry.Addin); mainrep.RemoveEntry (entry); } - + if (modified) { AddinStore.WriteObject (mainFile, mainrep); monitor.Log.WriteLine ("Updated " + relFilePath); @@ -800,7 +865,7 @@ namespace Mono.Addins.Setup repEntry.Url = relFilePath; rootrep.AddEntry (repEntry); } - + foreach (string dir in Directory.EnumerateDirectories (mainPath)) { if (Path.GetFileName (dir) == addinFilesDir) continue; @@ -808,7 +873,7 @@ namespace Mono.Addins.Setup BuildRepository (monitor, rootrep, rootPath, Path.Combine (based, "main.mrep"), allAddins); } } - + void DeleteSupportFiles (string targetDir, AddinInfo ainfo) { foreach (var prop in ainfo.Properties) { @@ -818,10 +883,10 @@ namespace Mono.Addins.Setup File.Delete (file); } } - if (Directory.Exists (targetDir) && !Directory.EnumerateFileSystemEntries (targetDir).Any()) + if (Directory.Exists (targetDir) && !Directory.EnumerateFileSystemEntries (targetDir).Any ()) Directory.Delete (targetDir, true); } - + void ExtractSupportFiles (string targetDir, string file, AddinInfo ainfo) { Random r = new Random (); @@ -852,8 +917,8 @@ namespace Mono.Addins.Setup } finally { zfile.Close (); } - } - + } + void GenerateIndexPage (Repository rep, List<PackageRepositoryEntry> addins, string basePath) { StreamWriter sw = new StreamWriter (Path.Combine (basePath, "index.html")); @@ -863,16 +928,16 @@ namespace Mono.Addins.Setup sw.WriteLine ("<h2>" + rep.Name + "</h2>"); sw.WriteLine ("<p>This is a list of add-ins available in this repository.</p>"); sw.WriteLine ("<table border=1><thead><tr><th>Add-in</th><th>Version</th><th>Description</th></tr></thead>"); - + foreach (PackageRepositoryEntry entry in addins) { sw.WriteLine ("<tr><td>" + entry.Addin.Name + "</td><td>" + entry.Addin.Version + "</td><td>" + entry.Addin.Description + "</td></tr>"); } - + sw.WriteLine ("</table>"); sw.WriteLine ("</body></html>"); sw.Close (); } - + internal AddinSystemConfiguration Configuration { get { if (config == null) { @@ -886,11 +951,11 @@ namespace Mono.Addins.Setup return config; } } - + internal void SaveConfiguration () { if (config != null) { - AddinStore.WriteObject (RootConfigFile, config); + AddinStore.WriteObject (RootConfigFile, config); } } @@ -902,13 +967,13 @@ namespace Mono.Addins.Setup File.Delete (RootConfigFileOld); ResetAddinInfo (); } - + internal void ResetAddinInfo () { if (Directory.Exists (RepositoryCachePath)) Directory.Delete (RepositoryCachePath, true); } - + /// <summary> /// Gets a reference to an extensible application /// </summary> @@ -922,7 +987,7 @@ namespace Mono.Addins.Setup { return GetExtensibleApplication (name, null); } - + /// <summary> /// Gets a reference to an extensible application /// </summary> @@ -944,18 +1009,18 @@ namespace Mono.Addins.Setup else return null; } - + /// <summary> /// Gets a lis of all known extensible applications /// </summary> /// <returns> /// A list of applications. /// </returns> - public static Application[] GetExtensibleApplications () + public static Application [] GetExtensibleApplications () { return GetExtensibleApplications (null); } - + /// <summary> /// Gets a lis of all known extensible applications /// </summary> @@ -965,10 +1030,10 @@ namespace Mono.Addins.Setup /// <returns> /// A list of applications. /// </returns> - public static Application[] GetExtensibleApplications (IEnumerable<string> searchPaths) + public static Application [] GetExtensibleApplications (IEnumerable<string> searchPaths) { List<Application> list = new List<Application> (); - + AddinsPcFileCache pcc = GetAddinsPcFileCache (searchPaths); foreach (PackageInfo pinfo in pcc.GetPackages (searchPaths)) { if (pinfo.IsValidPackage) @@ -976,9 +1041,9 @@ namespace Mono.Addins.Setup } return list.ToArray (); } - + static AddinsPcFileCache pcFileCache; - + static AddinsPcFileCache GetAddinsPcFileCache (IEnumerable<string> searchPaths) { if (pcFileCache == null) { @@ -991,14 +1056,14 @@ namespace Mono.Addins.Setup return pcFileCache; } } - - class AddinsPcFileCacheContext: IPcFileCacheContext + + class AddinsPcFileCacheContext : IPcFileCacheContext { public bool IsCustomDataComplete (string pcfile, PackageInfo pkg) { return true; } - + public void StoreCustomData (Mono.PkgConfig.PcFile pcfile, PackageInfo pkg) { } @@ -1009,13 +1074,13 @@ namespace Mono.Addins.Setup Console.WriteLine (ex); } } - - class AddinsPcFileCache: PcFileCache + + class AddinsPcFileCache : PcFileCache { - public AddinsPcFileCache (): base (new AddinsPcFileCacheContext ()) + public AddinsPcFileCache () : base (new AddinsPcFileCacheContext ()) { } - + protected override string CacheDirectory { get { string path = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData); @@ -1023,7 +1088,7 @@ namespace Mono.Addins.Setup return path; } } - + protected override void ParsePackageInfo (PcFile file, PackageInfo pinfo) { string rootPath = file.GetVariable ("MonoAddinsRoot"); @@ -1040,7 +1105,7 @@ namespace Mono.Addins.Setup pinfo.SetData ("MonoAddinsTestCommand", testCmd); } } - + /// <summary> /// A registered extensible application /// </summary> @@ -1054,7 +1119,7 @@ namespace Mono.Addins.Setup string registryPath; string addinsPath; string databasePath; - + internal Application (PackageInfo pinfo) { name = pinfo.Name; @@ -1065,7 +1130,7 @@ namespace Mono.Addins.Setup databasePath = pinfo.GetData ("MonoAddinsCachePath"); testCommand = pinfo.GetData ("MonoAddinsTestCommand"); } - + /// <summary> /// Add-in registry of the application /// </summary> diff --git a/Mono.Addins.Setup/Mono.Addins.Setup/SetupTool.cs b/Mono.Addins.Setup/Mono.Addins.Setup/SetupTool.cs index 5f0caa8..ad72892 100644 --- a/Mono.Addins.Setup/Mono.Addins.Setup/SetupTool.cs +++ b/Mono.Addins.Setup/Mono.Addins.Setup/SetupTool.cs @@ -499,6 +499,9 @@ namespace Mono.Addins.Setup case "vsix": format = PackageFormat.Vsix; break; + case "nupkg": + format = PackageFormat.NuGet; + break; default: throw new ArgumentException ($"Unsupported package format \"{formatString}\", supported formats are mpack and vsix."); } @@ -1177,8 +1180,8 @@ namespace Mono.Addins.Setup cmd = new SetupCommand (cat, "pack", "p", new SetupCommandHandler (BuildPackage)); cmd.Description = "Creates a package from an add-in configuration file."; - cmd.Usage = "<file-path> [-d:output-directory] [-format:(mpack|vsix)] [-debugSymbols:(true|false)]"; - cmd.AppendDesc ("Creates an add-in package (.mpack or .vsix file) which includes all files "); + cmd.Usage = "<file-path> [-d:output-directory] [-format:(mpack|vsix|nupkg)] [-debugSymbols:(true|false)]"; + cmd.AppendDesc ("Creates an add-in package (.mpack, .vsix or .nupkg file) which includes all files "); cmd.AppendDesc ("needed to deploy an add-in. The command parameter is the path to"); cmd.AppendDesc ("the add-in's configuration file. If 'debugSymbols' is set to true"); cmd.AppendDesc ("then pdb or mdb debug symbols will automatically be included in the"); diff --git a/Mono.Addins/Mono.Addins.Description/PackageFormat.cs b/Mono.Addins/Mono.Addins.Description/PackageFormat.cs index 8a22673..b4486a4 100644 --- a/Mono.Addins/Mono.Addins.Description/PackageFormat.cs +++ b/Mono.Addins/Mono.Addins.Description/PackageFormat.cs @@ -27,6 +27,7 @@ namespace Mono.Addins.Description public enum PackageFormat { Mpack, - Vsix + Vsix, + NuGet } } |