Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono-addins.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLluis Sanchez <llsan@microsoft.com>2022-02-09 13:42:41 +0300
committerLluis Sanchez <llsan@microsoft.com>2022-02-09 13:50:10 +0300
commite0809a24dcd641d2ed4299db0be8eacc103b0d0b (patch)
tree9997ad8d644f0fbf471a8bf44d053aa4976d4667
parent92d71b2bf4cef3e7730417047f2fdf797ab3546d (diff)
Add support for nuget packaging format
-rw-r--r--Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs345
-rw-r--r--Mono.Addins.Setup/Mono.Addins.Setup/SetupTool.cs7
-rw-r--r--Mono.Addins/Mono.Addins.Description/PackageFormat.cs3
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
}
}