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