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:
authorMarius Ungureanu <marius.ungureanu@xamarin.com>2020-07-27 19:46:53 +0300
committerGitHub <noreply@github.com>2020-07-27 19:46:53 +0300
commit6788491d545966417e7d7842cd176dc38da1772d (patch)
tree4f6d61d68e5fb0aa34e3365193762fe60518f9f7
parent40a4b54a22c5c4251d2c669f975824e194301adf (diff)
parent2193b6a78bf80ed1a1621073b95f4f25c6f596d5 (diff)
Merge pull request #164 from mono/dev/therzok/opt-fsext
-rw-r--r--Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs6
-rw-r--r--Mono.Addins/Mono.Addins.Database/AddinDatabase.cs2
-rw-r--r--Mono.Addins/Mono.Addins.Database/AddinFileSystemExtension.cs4
-rw-r--r--Mono.Addins/Mono.Addins.Database/AddinFolderVisitor.cs19
-rw-r--r--Mono.Addins/Mono.Addins.Database/AssemblyLocatorVisitor.cs11
-rw-r--r--Mono.Addins/Mono.Addins/AddinRegistry.cs2
6 files changed, 26 insertions, 18 deletions
diff --git a/Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs b/Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs
index 4de0ccd..e9ee1d4 100644
--- a/Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs
+++ b/Mono.Addins.Setup/Mono.Addins.Setup/SetupService.cs
@@ -746,7 +746,7 @@ namespace Mono.Addins.Setup
bool modified = false;
monitor.Log.WriteLine ("Checking directory: " + mainPath);
- foreach (string file in Directory.GetFiles (mainPath, "*.mpack")) {
+ foreach (string file in Directory.EnumerateFiles (mainPath, "*.mpack")) {
DateTime date = File.GetLastWriteTime (file);
string fname = Path.GetFileName (file);
@@ -801,7 +801,7 @@ namespace Mono.Addins.Setup
rootrep.AddEntry (repEntry);
}
- foreach (string dir in Directory.GetDirectories (mainPath)) {
+ foreach (string dir in Directory.EnumerateDirectories (mainPath)) {
if (Path.GetFileName (dir) == addinFilesDir)
continue;
string based = dir.Substring (rootPath.Length + 1);
@@ -818,7 +818,7 @@ namespace Mono.Addins.Setup
File.Delete (file);
}
}
- if (Directory.Exists (targetDir) && Directory.GetFileSystemEntries (targetDir).Length == 0)
+ if (Directory.Exists (targetDir) && !Directory.EnumerateFileSystemEntries (targetDir).Any())
Directory.Delete (targetDir, true);
}
diff --git a/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs b/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs
index b1cb643..97cdbbf 100644
--- a/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs
+++ b/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs
@@ -1381,7 +1381,7 @@ namespace Mono.Addins.Database
// Check if any of the previously scanned folders has been deleted
- foreach (string file in Directory.GetFiles (AddinFolderCachePath, "*.data")) {
+ foreach (string file in Directory.EnumerateFiles (AddinFolderCachePath, "*.data")) {
AddinScanFolderInfo folderInfo;
bool res = ReadFolderInfo (monitor, file, out folderInfo);
bool validForDomain = scanResult.Domain == null || folderInfo.Domain == GlobalDomain || folderInfo.Domain == scanResult.Domain;
diff --git a/Mono.Addins/Mono.Addins.Database/AddinFileSystemExtension.cs b/Mono.Addins/Mono.Addins.Database/AddinFileSystemExtension.cs
index ce5f6ae..74e16d2 100644
--- a/Mono.Addins/Mono.Addins.Database/AddinFileSystemExtension.cs
+++ b/Mono.Addins/Mono.Addins.Database/AddinFileSystemExtension.cs
@@ -94,7 +94,7 @@ namespace Mono.Addins.Database
/// </param>
public virtual System.Collections.Generic.IEnumerable<string> GetFiles (string path)
{
- return Directory.GetFiles (path);
+ return Directory.EnumerateFiles (path);
}
/// <summary>
@@ -108,7 +108,7 @@ namespace Mono.Addins.Database
/// </param>
public virtual System.Collections.Generic.IEnumerable<string> GetDirectories (string path)
{
- return Directory.GetDirectories (path);
+ return Directory.EnumerateDirectories (path);
}
/// <summary>
diff --git a/Mono.Addins/Mono.Addins.Database/AddinFolderVisitor.cs b/Mono.Addins/Mono.Addins.Database/AddinFolderVisitor.cs
index 37c64d6..3ba62f0 100644
--- a/Mono.Addins/Mono.Addins.Database/AddinFolderVisitor.cs
+++ b/Mono.Addins/Mono.Addins.Database/AddinFolderVisitor.cs
@@ -27,6 +27,7 @@
using System;
using System.Collections.Generic;
using System.IO;
+using System.Linq;
using System.Xml;
namespace Mono.Addins.Database
@@ -49,8 +50,11 @@ namespace Mono.Addins.Database
public void VisitFolder (IProgressStatus monitor, string path, string domain, bool recursive)
{
- path = Path.GetFullPath (path);
+ VisitFolderInternal (monitor, Path.GetFullPath (path), domain, recursive);
+ }
+ void VisitFolderInternal (IProgressStatus monitor, string path, string domain, bool recursive)
+ {
// Avoid folders including each other
if (!visitedFolders.Add (path) || ScanContext.IgnorePath (path))
return;
@@ -63,7 +67,7 @@ namespace Mono.Addins.Database
if (!FileSystem.DirectoryExists (path))
return;
- var files = FileSystem.GetFiles (path);
+ var files = FileSystem.GetFiles (path).ToArray();
// First of all scan .addins files, since they can contain exclude paths.
// Only extract the information, don't follow directory inclusions yet
@@ -98,16 +102,17 @@ namespace Mono.Addins.Database
foreach (var entry in addinsFileEntries) {
string dir = entry.Folder;
- if (!Path.IsPathRooted (dir))
- dir = Path.Combine (path, entry.Folder);
- VisitFolder (monitor, dir, entry.Domain, entry.Recursive);
+ if (!Path.IsPathRooted(dir))
+ dir = Path.GetFullPath (Path.Combine (path, entry.Folder));
+
+ VisitFolderInternal (monitor, dir, entry.Domain, entry.Recursive);
}
// Scan subfolders
if (recursive) {
foreach (string sd in FileSystem.GetDirectories (path))
- VisitFolder (monitor, sd, domain, true);
+ VisitFolderInternal (monitor, sd, domain, true);
}
}
@@ -125,8 +130,6 @@ namespace Mono.Addins.Database
{
List<AddinsEntry> entries = new List<AddinsEntry>();
XmlTextReader r = null;
- List<string []> directories = new List<string []> ();
- List<string []> directoriesWithSubdirs = new List<string []> ();
string basePath = Path.GetDirectoryName (file);
try {
diff --git a/Mono.Addins/Mono.Addins.Database/AssemblyLocatorVisitor.cs b/Mono.Addins/Mono.Addins.Database/AssemblyLocatorVisitor.cs
index 545b3be..2149adf 100644
--- a/Mono.Addins/Mono.Addins.Database/AssemblyLocatorVisitor.cs
+++ b/Mono.Addins/Mono.Addins.Database/AssemblyLocatorVisitor.cs
@@ -97,15 +97,17 @@ namespace Mono.Addins.Database
int i = fullName.IndexOf (',');
string name = fullName.Substring (0, i);
if (name == "Mono.Addins")
- return GetType ().Assembly.Location;
+ return typeof (AssemblyIndex).Assembly.Location;
if (!assemblyLocations.TryGetValue (name, out var list))
return null;
string lastAsm = null;
- foreach (string file in list.ToArray ()) {
+ for (int n = list.Count - 1; n >= 0; --n) {
try {
- list.Remove (file);
+ var file = list[n];
+ list.RemoveAt(n);
+
AssemblyName aname = AssemblyName.GetAssemblyName (file);
lastAsm = file;
assemblyLocationsByFullName [aname.FullName] = file;
@@ -116,6 +118,9 @@ namespace Mono.Addins.Database
// In this case, just ignore it.
}
}
+
+ // If we got here, we removed all the list's items.
+ assemblyLocations.Remove (name);
if (lastAsm != null) {
// If an exact version is not found, just take any of them
diff --git a/Mono.Addins/Mono.Addins/AddinRegistry.cs b/Mono.Addins/Mono.Addins/AddinRegistry.cs
index f51b4db..0e1ef2a 100644
--- a/Mono.Addins/Mono.Addins/AddinRegistry.cs
+++ b/Mono.Addins/Mono.Addins/AddinRegistry.cs
@@ -760,7 +760,7 @@ namespace Mono.Addins
if (!Directory.Exists (database.HostsPath))
Directory.CreateDirectory (database.HostsPath);
- foreach (string s in Directory.GetFiles (database.HostsPath, baseName + "*.addins")) {
+ foreach (string s in Directory.EnumerateFiles (database.HostsPath, baseName + "*.addins")) {
try {
using (StreamReader sr = new StreamReader (s)) {
XmlTextReader tr = new XmlTextReader (sr);