Author: lluis
Date: 2007-07-02 10:57:59 -0400 (Mon, 02 Jul 2007)
New Revision: 81184

Modified:
   trunk/mono-addins/Mono.Addins.Setup/ChangeLog
   
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup.ProgressMonitoring/ConsoleProgressMonitor.cs
   
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup.ProgressMonitoring/NullProgressMonitor.cs
   
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup.ProgressMonitoring/ProgressStatusMonitor.cs
   trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/AddinRepositoryEntry.cs
   trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/AddinStore.cs
   trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/IProgressMonitor.cs
   trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/RepositoryRegistry.cs
   trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs
   trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/SetupTool.cs
Log:
* Mono.Addins.Setup.ProgressMonitoring/ConsoleProgressMonitor.cs,
  Mono.Addins.Setup.ProgressMonitoring/ProgressStatusMonitor.cs,
  Mono.Addins.Setup.ProgressMonitoring/NullProgressMonitor.cs,
  Mono.Addins.Setup/IProgressMonitor.cs: Track api changes.
* Mono.Addins.Setup/SetupService.cs, Mono.Addins.Setup/AddinStore.cs:
  Added new overload for ResolveDependencies.
* Mono.Addins.Setup/SetupTool.cs: Added new CheckInstall command. Fixed
  some issues with add-in id comparison.
* Mono.Addins.Setup/AddinRepositoryEntry.cs,
  Mono.Addins.Setup/RepositoryRegistry.cs: When looking for
  installable add-ins, sort the result by version number. Some fix in
  the code that compares ids.

Modified: trunk/mono-addins/Mono.Addins.Setup/ChangeLog
===================================================================
--- trunk/mono-addins/Mono.Addins.Setup/ChangeLog       2007-07-02 14:52:56 UTC 
(rev 81183)
+++ trunk/mono-addins/Mono.Addins.Setup/ChangeLog       2007-07-02 14:57:59 UTC 
(rev 81184)
@@ -1,3 +1,18 @@
+2007-07-02  Lluis Sanchez Gual <[EMAIL PROTECTED]> 
+
+       * Mono.Addins.Setup.ProgressMonitoring/ConsoleProgressMonitor.cs,
+         Mono.Addins.Setup.ProgressMonitoring/ProgressStatusMonitor.cs,
+         Mono.Addins.Setup.ProgressMonitoring/NullProgressMonitor.cs,
+         Mono.Addins.Setup/IProgressMonitor.cs: Track api changes.
+       * Mono.Addins.Setup/SetupService.cs, Mono.Addins.Setup/AddinStore.cs:
+         Added new overload for ResolveDependencies.
+       * Mono.Addins.Setup/SetupTool.cs: Added new CheckInstall command. Fixed
+         some issues with add-in id comparison.
+       * Mono.Addins.Setup/AddinRepositoryEntry.cs,
+         Mono.Addins.Setup/RepositoryRegistry.cs: When looking for
+         installable add-ins, sort the result by version number. Some fix in
+         the code that compares ids.
+
 2007-05-07  Lluis Sanchez Gual <[EMAIL PROTECTED]> 
 
        * Mono.Addins.Setup/SetupService.cs: When creating a package,

Modified: 
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/AddinRepositoryEntry.cs
===================================================================
--- 
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/AddinRepositoryEntry.cs   
    2007-07-02 14:52:56 UTC (rev 81183)
+++ 
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/AddinRepositoryEntry.cs   
    2007-07-02 14:57:59 UTC (rev 81184)
@@ -30,7 +30,7 @@
 
 namespace Mono.Addins.Setup
 {
-       internal class PackageRepositoryEntry: RepositoryEntry, 
AddinRepositoryEntry
+       internal class PackageRepositoryEntry: RepositoryEntry, 
AddinRepositoryEntry, IComparable
        {
                AddinInfo addin;
                
@@ -50,6 +50,17 @@
                public string RepositoryName {
                        get { return Repository.Name; }
                }
+               
+               public int CompareTo (object other)
+               {
+                       PackageRepositoryEntry rep = (PackageRepositoryEntry) 
other;
+                       string n1 = Mono.Addins.Addin.GetIdName (Addin.Id);
+                       string n2 = Mono.Addins.Addin.GetIdName (rep.Addin.Id);
+                       if (n1 != n2)
+                               return n1.CompareTo (n2);
+                       else
+                               return Mono.Addins.Addin.CompareVersions 
(rep.Addin.Version, Addin.Version);
+               }
        }
        
        public interface AddinRepositoryEntry

Modified: trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/AddinStore.cs
===================================================================
--- trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/AddinStore.cs 
2007-07-02 14:52:56 UTC (rev 81183)
+++ trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/AddinStore.cs 
2007-07-02 14:57:59 UTC (rev 81184)
@@ -352,6 +352,14 @@
                        }
                }
                
+               public bool ResolveDependencies (IProgressStatus statusMonitor, 
AddinRepositoryEntry[] addins, out PackageCollection resolved, out 
PackageCollection toUninstall, out DependencyCollection unresolved)
+               {
+                       resolved = new PackageCollection ();
+                       for (int n=0; n<addins.Length; n++)
+                               resolved.Add (AddinPackage.FromRepository 
(addins [n]));
+                       return ResolveDependencies (statusMonitor, resolved, 
out toUninstall, out unresolved);
+               }
+               
                public bool ResolveDependencies (IProgressStatus statusMonitor, 
PackageCollection packages, out PackageCollection toUninstall, out 
DependencyCollection unresolved)
                {
                        IProgressMonitor monitor = 
ProgressStatusMonitor.GetProgressMonitor (statusMonitor);

Modified: 
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/IProgressMonitor.cs
===================================================================
--- trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/IProgressMonitor.cs   
2007-07-02 14:52:56 UTC (rev 81183)
+++ trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/IProgressMonitor.cs   
2007-07-02 14:57:59 UTC (rev 81184)
@@ -40,7 +40,7 @@
                void Step (int work);
                
                TextWriter Log { get; }
-               bool VerboseLog { get; }
+               int LogLevel { get; }
                
                void ReportWarning (string message);
                void ReportError (string message, Exception exception);

Modified: 
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/RepositoryRegistry.cs
===================================================================
--- trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/RepositoryRegistry.cs 
2007-07-02 14:52:56 UTC (rev 81183)
+++ trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/RepositoryRegistry.cs 
2007-07-02 14:57:59 UTC (rev 81184)
@@ -285,7 +285,7 @@
                                Repository rep = rr.GetCachedRepository();
                                if (rep == null) continue;
                                foreach (PackageRepositoryEntry addin in 
rep.Addins) {
-                                       if ((id == null || addin.Addin.Id == 
id) && (version == null || addin.Addin.Version == version)) {
+                                       if ((id == null || Addin.GetIdName 
(addin.Addin.Id) == id) && (version == null || addin.Addin.Version == version)) 
{
                                                if (updates) {
                                                        Addin ainfo = 
service.Registry.GetAddin (addin.Addin.Id);
                                                        if (ainfo == null || 
Addin.CompareVersions (ainfo.Version, addin.Addin.Version) <= 0)
@@ -295,6 +295,8 @@
                                        }
                                }
                        }
+                       // Old versions are returned first
+                       list.Sort ();
                        return (PackageRepositoryEntry[]) list.ToArray 
(typeof(PackageRepositoryEntry));
                }
                

Modified: trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs
===================================================================
--- trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs       
2007-07-02 14:52:56 UTC (rev 81183)
+++ trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs       
2007-07-02 14:57:59 UTC (rev 81184)
@@ -100,6 +100,11 @@
                        get { return store; }
                }
                
+               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);
+               }
+               
                public bool ResolveDependencies (IProgressStatus statusMonitor, 
PackageCollection packages, out PackageCollection toUninstall, out 
DependencyCollection unresolved)
                {
                        return store.ResolveDependencies (statusMonitor, 
packages, out toUninstall, out unresolved);
@@ -323,7 +328,6 @@
                        sw.WriteLine ("<table 
border=1><thead><tr><th>Add-in</th><th>Version</th><th>Description</th></tr></thead>");
                        
                        foreach (PackageRepositoryEntry entry in addins) {
-                               Console.WriteLine ("entry.Addin.Name:" + 
entry.Addin.Name);
                                sw.WriteLine ("<tr><td>" + entry.Addin.Name + 
"</td><td>" + entry.Addin.Version + "</td><td>" + entry.Addin.Description + 
"</td></tr>");
                        }
                        

Modified: trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/SetupTool.cs
===================================================================
--- trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/SetupTool.cs  
2007-07-02 14:52:56 UTC (rev 81183)
+++ trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup/SetupTool.cs  
2007-07-02 14:57:59 UTC (rev 81184)
@@ -61,6 +61,11 @@
                        set { applicationName = value; }
                }
                
+               public string ApplicationNamespace {
+                       get { return service.ApplicationNamespace; }
+                       set { service.ApplicationNamespace = value; }
+               }
+               
                public bool VerboseOutput {
                        get { return verbose; }
                        set { verbose = value; }
@@ -118,28 +123,45 @@
                                if (File.Exists (args [n])) { 
                                        packs.Add (AddinPackage.FromFile (args 
[n]));
                                } else {
-                                       string[] aname = args[n].Split ('/');
-                                       AddinRepositoryEntry[] ads = 
service.Repositories.GetAvailableAddin (aname[0], null);
+                                       string aname = Addin.GetIdName 
(GetFullId (args[n]));
+                                       string aversion = Addin.GetIdVersion 
(args[n]);
+                                       if (aversion.Length == 0) aversion = 
null;
+                                       
+                                       AddinRepositoryEntry[] ads = 
service.Repositories.GetAvailableAddin (aname, aversion);
                                        if (ads.Length == 0)
                                                throw new InstallException 
("The addin '" + args[n] + "' is not available for install.");
-                                       if (ads.Length > 1) {
-                                               if (aname.Length < 2) {
-                                                       Console.WriteLine 
(args[n] + ": the addin version is required because there are several versions 
of the same addin available.");
-                                                       return;
-                                               }
-                                               ads = 
service.Repositories.GetAvailableAddin (aname[0], aname[1]);
-                                               if (ads.Length == 0)
-                                                       throw new 
InstallException ("The addin " + aname[0] + " v" + aname[1] + " is not 
available.");
-                                       }
-                               
-                                       packs.Add (AddinPackage.FromRepository 
(ads[0]));
+                                       packs.Add (AddinPackage.FromRepository 
(ads[ads.Length-1]));
                                }
                        }
-                       Install (packs);
+                       Install (packs, true);
                }
                
-               void Install (PackageCollection packs)
+               void CheckInstall (string[] args)
                {
+                       if (args.Length < 1) {
+                               PrintHelp ("check-install");
+                               return;
+                       }
+                       
+                       PackageCollection packs = new PackageCollection ();
+                       for (int n=0; n<args.Length; n++) {
+                               Addin addin = registry.GetAddin (GetFullId 
(args[n]));
+                               if (addin != null)
+                                       continue;
+                               string aname = Addin.GetIdName (GetFullId 
(args[n]));
+                               string aversion = Addin.GetIdVersion (args[n]);
+                               if (aversion.Length == 0) aversion = null;
+                               
+                               AddinRepositoryEntry[] ads = 
service.Repositories.GetAvailableAddin (aname, aversion);
+                               if (ads.Length == 0)
+                                       throw new InstallException ("The addin 
'" + args[n] + "' is not available for install.");
+                               packs.Add (AddinPackage.FromRepository 
(ads[ads.Length-1]));
+                       }
+                       Install (packs, false);
+               }
+               
+               void Install (PackageCollection packs, bool prompt)
+               {
                        PackageCollection toUninstall;
                        DependencyCollection unresolved;
                        
@@ -149,13 +171,13 @@
                                throw new InstallException ("Not all 
dependencies could be resolved.");
 
                        bool ask = false;
-                       if (packs.Count != n || toUninstall.Count != 0) {
+                       if (prompt && (packs.Count != n || toUninstall.Count != 
0)) {
                                Console.WriteLine ("The following packages will 
be installed:");
                                foreach (Package p in packs)
                                        Console.WriteLine (" - " + p.Name);
                                ask = true;
                        }
-                       if (toUninstall.Count != 0) {
+                       if (prompt && (toUninstall.Count != 0)) {
                                Console.WriteLine ("The following packages need 
to be uninstalled:");
                                foreach (Package p in toUninstall)
                                        Console.WriteLine (" - " + p.Name);
@@ -179,7 +201,7 @@
                        if (args.Length < 1)
                                throw new InstallException ("The add-in id is 
required.");
                        
-                       Addin ads = registry.GetAddin (args[0]);
+                       Addin ads = registry.GetAddin (GetFullId (args[0]));
                        if (ads == null)
                                throw new InstallException ("The add-in '" + 
args[0] + "' is not installed.");
                        
@@ -205,12 +227,32 @@
                        return service.ApplicationNamespace != null && 
!(ainfo.Namespace + ".").StartsWith (service.ApplicationNamespace + ".");
                }
                
+               string GetId (AddinHeader ainfo)
+               {
+                       if (service.ApplicationNamespace != null && 
(ainfo.Namespace + ".").StartsWith (service.ApplicationNamespace + "."))
+                               return ainfo.Id.Substring 
(service.ApplicationNamespace.Length + 1);
+                       else
+                               return ainfo.Id;
+               }
+               
+               string GetFullId (string id)
+               {
+                       if (service.ApplicationNamespace != null)
+                               return service.ApplicationNamespace + "." + id;
+                       else
+                               return id;
+               }
+               
                void ListInstalled (string[] args)
                {
-                       bool showAll = args.Length > 0 && args [0] == "-a";
+                       IList alist = args;
+                       bool showAll = alist.Contains ("-a");
                        Console.WriteLine ("Installed add-ins:");
-                       Addin[] addins = registry.GetAddins ();
-                       foreach (Addin addin in addins) {
+                       ArrayList list = new ArrayList ();
+                       list.AddRange (registry.GetAddins ());
+                       if (alist.Contains ("-r"))
+                               list.AddRange (registry.GetAddinRoots ());
+                       foreach (Addin addin in list) {
                                if (!showAll && IsHidden (addin))
                                        continue;
                                Console.Write (" - " + addin.Name + " " + 
addin.Version);
@@ -228,7 +270,7 @@
                        foreach (PackageRepositoryEntry addin in addins) {
                                if (!showAll && IsHidden (addin.Addin))
                                        continue;
-                               Console.WriteLine (" - " + addin.Addin.Id + " 
(" + addin.Repository.Name + ")");
+                               Console.WriteLine (" - " + GetId (addin.Addin) 
+ " (" + addin.Repository.Name + ")");
                        }
                }
                
@@ -271,7 +313,7 @@
                                        packs.Add (AddinPackage.FromRepository 
(addin));
                        }
                        if (packs.Count > 0)
-                               Install (packs);
+                               Install (packs, true);
                        else
                                Console.WriteLine ("No updates found.");
                }
@@ -513,18 +555,16 @@
                        cmd.Description = description;
                        cmd.LongDescription = longDescription;
                        
-                       bool foundCat = false;
+                       int lastCatPos = -1;
                        for (int n=0; n<commands.Count; n++) {
                                SetupCommand ec = (SetupCommand) commands [n];
                                if (ec.Category == category)
-                                       foundCat = true;
-                               else if (foundCat) {
-                                       commands.Insert (n, cmd);
-                                       break;
-                               }
+                                       lastCatPos = n;
                        }
-                       if (!foundCat)
+                       if (lastCatPos == -1)
                                commands.Add (cmd);
+                       else
+                               commands.Insert (lastCatPos+1, cmd);
                }
                
                SetupCommand FindCommand (string id)
@@ -535,7 +575,7 @@
                        return null;
                }
 
-               void PrintHelp (params string[] parms)
+               public void PrintHelp (params string[] parms)
                {
                        if (parms.Length == 0) {
                                string lastCat = null;
@@ -594,6 +634,16 @@
                        cmd.AppendDesc ("of the add-in to uninstall.");
                        commands.Add (cmd);
                        
+                       cmd = new SetupCommand (cat, "check-install", "ci", new 
SetupCommandHandler (CheckInstall));
+                       cmd.Description = "Checks installed add-ins.";
+                       cmd.Usage = "[package-name|package-file] ...";
+                       cmd.AppendDesc ("Checks if a package is installed. If 
it is not, it looks for");
+                       cmd.AppendDesc ("the package in the registered 
repositories, and if found");
+                       cmd.AppendDesc ("the package is downloaded and 
installed, including all");
+                       cmd.AppendDesc ("needed dependencies.");
+                       commands.Add (cmd);
+                       
+                       
                        cmd = new SetupCommand (cat, "update", "up", new 
SetupCommandHandler (Update));
                        cmd.Description = "Updates installed add-ins.";
                        cmd.AppendDesc ("Downloads and installs available 
updates for installed add-ins.");

Modified: 
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup.ProgressMonitoring/ConsoleProgressMonitor.cs
===================================================================
--- 
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup.ProgressMonitoring/ConsoleProgressMonitor.cs
  2007-07-02 14:52:56 UTC (rev 81183)
+++ 
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup.ProgressMonitoring/ConsoleProgressMonitor.cs
  2007-07-02 14:57:59 UTC (rev 81184)
@@ -39,16 +39,16 @@
                int ilevel = 0;
                int isize = 3;
                int col = -1;
-               bool verbose;
+               int logLevel;
                LogTextWriter logger;
                
-               public ConsoleProgressMonitor (): this (false)
+               public ConsoleProgressMonitor (): this (1)
                {
                }
                
-               public ConsoleProgressMonitor (bool verbose)
+               public ConsoleProgressMonitor (int logLevel)
                {
-                       this.verbose = verbose;
+                       this.logLevel = logLevel;
                        logger = new LogTextWriter ();
                        logger.TextWritten += new LogTextEventHandler 
(WriteLog);
                }
@@ -68,8 +68,8 @@
                        set { indent = value; }
                }
                
-               public override bool VerboseLog {
-                       get { return verbose; }
+               public override int LogLevel {
+                       get { return logLevel; }
                }
                
                public override void BeginTask (string name, int totalWork)
@@ -104,20 +104,24 @@
                
                public override void ReportWarning (string message)
                {
-                       WriteText ("WARNING: " + message + "\n");
+                       if (logLevel != 0)
+                               WriteText ("WARNING: " + message + "\n");
                }
                
                public override void ReportError (string message, Exception ex)
                {
+                       if (logLevel == 0)
+                               return;
+                       
                        if (message != null && ex != null) {
                                WriteText ("ERROR: " + message + "\n");
-                               if (verbose)
+                               if (logLevel > 1)
                                        WriteText (ex + "\n");
                        }
                        if (message != null)
                                WriteText ("ERROR: " + message + "\n");
                        else if (ex != null) {
-                               if (verbose)
+                               if (logLevel > 1)
                                        WriteText ("ERROR: " + ex + "\n");
                                else
                                        WriteText ("ERROR: " + ex.Message + 
"\n");

Modified: 
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup.ProgressMonitoring/NullProgressMonitor.cs
===================================================================
--- 
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup.ProgressMonitoring/NullProgressMonitor.cs
     2007-07-02 14:52:56 UTC (rev 81183)
+++ 
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup.ProgressMonitoring/NullProgressMonitor.cs
     2007-07-02 14:57:59 UTC (rev 81184)
@@ -126,8 +126,8 @@
                        canceled = true;
                }
                
-               public virtual bool VerboseLog {
-                       get { return false; }
+               public virtual int LogLevel {
+                       get { return 1; }
                }
                
                public virtual void Dispose ()

Modified: 
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup.ProgressMonitoring/ProgressStatusMonitor.cs
===================================================================
--- 
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup.ProgressMonitoring/ProgressStatusMonitor.cs
   2007-07-02 14:52:56 UTC (rev 81183)
+++ 
trunk/mono-addins/Mono.Addins.Setup/Mono.Addins.Setup.ProgressMonitoring/ProgressStatusMonitor.cs
   2007-07-02 14:57:59 UTC (rev 81184)
@@ -108,8 +108,8 @@
                        status.Cancel ();
                }
                
-               public bool VerboseLog {
-                       get { return status.VerboseLog; }
+               public int LogLevel {
+                       get { return status.LogLevel; }
                }
                
                public void Dispose ()

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to