80 строки
1.9 KiB
C#
80 строки
1.9 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Collections.Generic;
|
|
|
|
using Microsoft.Build.Framework;
|
|
using Microsoft.Build.Utilities;
|
|
|
|
using Xamarin.MacDev.Tasks;
|
|
|
|
namespace Xamarin.iOS.Tasks
|
|
{
|
|
public abstract class GetDirectoriesTaskBase : Task
|
|
{
|
|
public string SessionId { get; set; }
|
|
|
|
[Required]
|
|
public string Path { get; set; }
|
|
|
|
public string Pattern { get; set; }
|
|
|
|
public string Option { get; set; }
|
|
|
|
public string Exclude { get; set; }
|
|
|
|
[Output]
|
|
public ITaskItem[] Directories { get; set; }
|
|
|
|
public override bool Execute ()
|
|
{
|
|
Log.LogTaskName ("GetDirectories");
|
|
Log.LogTaskProperty ("Path", Path);
|
|
Log.LogTaskProperty ("Pattern", Pattern);
|
|
Log.LogTaskProperty ("Option", Option);
|
|
Log.LogTaskProperty ("Exclude", Exclude);
|
|
|
|
var path = Path.Replace ('\\', '/').TrimEnd ('/');
|
|
var exclude = new HashSet<string> ();
|
|
var items = new List<ITaskItem> ();
|
|
IEnumerable<string> dirs;
|
|
SearchOption option;
|
|
|
|
if (!string.IsNullOrEmpty (Option)) {
|
|
if (!Enum.TryParse (Option, out option)) {
|
|
Log.LogError ("Unknown search option: {0}", Option);
|
|
return false;
|
|
}
|
|
} else {
|
|
option = SearchOption.TopDirectoryOnly;
|
|
}
|
|
|
|
if (!Directory.Exists (path)) {
|
|
Directories = items.ToArray ();
|
|
|
|
return !Log.HasLoggedErrors;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty (Pattern))
|
|
dirs = Directory.EnumerateDirectories (path, Pattern, option);
|
|
else
|
|
dirs = Directory.EnumerateDirectories (path, "*.*", option);
|
|
|
|
if (!string.IsNullOrEmpty (Exclude)) {
|
|
foreach (var rpath in Exclude.Split (new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) {
|
|
var full = System.IO.Path.Combine (path, rpath.Replace ('\\', '/'));
|
|
exclude.Add (full);
|
|
}
|
|
}
|
|
|
|
foreach (var dir in dirs) {
|
|
if (!exclude.Contains (dir))
|
|
items.Add (new TaskItem (dir));
|
|
}
|
|
|
|
Directories = items.ToArray ();
|
|
|
|
return !Log.HasLoggedErrors;
|
|
}
|
|
}
|
|
}
|