Firelance 0.1.5.2
- FilterDirectory renamed and moved to ManifestFilter. - Refactored ManifestFilter
This commit is contained in:
@@ -214,8 +214,12 @@ namespace DevConsole
|
|||||||
Console.WriteLine($"Full: {fullPath}");
|
Console.WriteLine($"Full: {fullPath}");
|
||||||
Console.WriteLine($"Relative Path: {relPath}");
|
Console.WriteLine($"Relative Path: {relPath}");
|
||||||
|
|
||||||
Console.WriteLine("Please enter the pattern for the inclusion filter and then\nthe exclusion filter:");
|
Console.WriteLine("Please enter the filter patterns required.");
|
||||||
PrintListValues(Helpers.Filters.FilterDirectory(fullPath, Console.ReadLine(), Console.ReadLine()));
|
Console.Write("\nInclusion Filter: ");
|
||||||
|
var i = Console.ReadLine();
|
||||||
|
Console.Write("Exclusion Filter: ");
|
||||||
|
var e = Console.ReadLine();
|
||||||
|
PrintListValues(new ManifestFilter().Build(fullPath, i, e));
|
||||||
|
|
||||||
//FSManipulation.CopyDirectory(
|
//FSManipulation.CopyDirectory(
|
||||||
// fullPath,
|
// fullPath,
|
||||||
|
|||||||
+1
-99
@@ -1,8 +1,8 @@
|
|||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Reflection.Metadata;
|
||||||
|
|
||||||
namespace FirelanceMgr
|
namespace FirelanceMgr
|
||||||
{
|
{
|
||||||
@@ -48,103 +48,5 @@ namespace FirelanceMgr
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Filters
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// To deprecate.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="fullPath"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static List<string> GetFileList(string fullPath)
|
|
||||||
{
|
|
||||||
var result = new List<string>();
|
|
||||||
foreach (var file in Directory.GetFiles(fullPath))
|
|
||||||
{
|
|
||||||
result.Add(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<string> FilterDirectory(string fullPath, string inclusionStr, string exclusionStr)
|
|
||||||
{
|
|
||||||
var incBuilder = PatternBuilder(inclusionStr);
|
|
||||||
var excBuilder = PatternBuilder(exclusionStr);
|
|
||||||
var inclusionList = ManifestBuilder(incBuilder, fullPath);
|
|
||||||
var exclusionList = ManifestBuilder(excBuilder, fullPath);
|
|
||||||
|
|
||||||
return inclusionList.Where(x => exclusionList.All(y => !x.Contains(y))).ToList(); ;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<string> PatternBuilder(string filterStr)
|
|
||||||
{
|
|
||||||
var filters = new List<string>();
|
|
||||||
|
|
||||||
if (filterStr != string.Empty)
|
|
||||||
{
|
|
||||||
char delimeter = '|';
|
|
||||||
string currentFilter = string.Empty;
|
|
||||||
foreach (char f in filterStr)
|
|
||||||
{
|
|
||||||
currentFilter += f;
|
|
||||||
if (f == delimeter)
|
|
||||||
{
|
|
||||||
filters.Add(currentFilter.Trim(delimeter));
|
|
||||||
currentFilter = string.Empty;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
filters.Add(currentFilter); // Add final inclusion
|
|
||||||
}
|
|
||||||
|
|
||||||
return filters;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<string> ManifestBuilder(List<string> filters, string fullPath)
|
|
||||||
{
|
|
||||||
var filteredList = new List<string>();
|
|
||||||
|
|
||||||
foreach (var f in filters)
|
|
||||||
{
|
|
||||||
if (f == "*.*")
|
|
||||||
{
|
|
||||||
// Pattern: All
|
|
||||||
foreach (var file in Directory.GetFiles(fullPath, "*", SearchOption.AllDirectories))
|
|
||||||
{
|
|
||||||
filteredList.Add(file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (f.Contains(@"\*"))
|
|
||||||
{
|
|
||||||
// Pattern: Directory
|
|
||||||
foreach (var dir in Directory.GetDirectories(fullPath, "*", SearchOption.AllDirectories))
|
|
||||||
{
|
|
||||||
if (dir.Contains(f.Substring(0, f.LastIndexOf("\\")))) { filteredList.Add(dir); }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (f.Contains("*"))
|
|
||||||
{
|
|
||||||
// Pattern: File with wildcard
|
|
||||||
foreach (var file in Directory.GetFiles(fullPath, f, SearchOption.AllDirectories))
|
|
||||||
{
|
|
||||||
filteredList.Add(file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Pattern: File
|
|
||||||
if (File.Exists(f))
|
|
||||||
{
|
|
||||||
filteredList.Add(f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return filteredList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace FirelanceMgr
|
||||||
|
{
|
||||||
|
public class ManifestFilter
|
||||||
|
{
|
||||||
|
public List<string> Build(string fullPath, string inclusionStr, string exclusionStr)
|
||||||
|
{
|
||||||
|
var incPatterns = PatternBuilder(inclusionStr);
|
||||||
|
var excPatterns = PatternBuilder(exclusionStr);
|
||||||
|
var incFiles = FileManifestBuilder(incPatterns, fullPath);
|
||||||
|
var excFiles = FileManifestBuilder(excPatterns, fullPath);
|
||||||
|
|
||||||
|
return incFiles.Where(x => excFiles.All(y => !x.Contains(y))).Distinct().ToList(); ;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<string> PatternBuilder(string filterStr)
|
||||||
|
{
|
||||||
|
var filters = new List<string>();
|
||||||
|
|
||||||
|
if (filterStr != string.Empty)
|
||||||
|
{
|
||||||
|
char delimeter = '|';
|
||||||
|
string currentFilter = string.Empty;
|
||||||
|
foreach (char f in filterStr)
|
||||||
|
{
|
||||||
|
currentFilter += f;
|
||||||
|
if (f == delimeter)
|
||||||
|
{
|
||||||
|
filters.Add(currentFilter.Trim(delimeter));
|
||||||
|
currentFilter = string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
filters.Add(currentFilter); // Add final pending inclusion
|
||||||
|
}
|
||||||
|
|
||||||
|
return filters;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<string> FileManifestBuilder(List<string> filters, string fullPath)
|
||||||
|
{
|
||||||
|
var filteredList = new List<string>();
|
||||||
|
|
||||||
|
foreach (var f in filters)
|
||||||
|
{
|
||||||
|
if (f == "*.*") // Pattern: All
|
||||||
|
{
|
||||||
|
foreach (var file in Directory.GetFiles(fullPath, "*", SearchOption.AllDirectories))
|
||||||
|
{
|
||||||
|
filteredList.Add(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (f.Contains(@"\*")) // Pattern: Directory
|
||||||
|
{
|
||||||
|
foreach (var dir in Directory.GetDirectories(fullPath, "*", SearchOption.AllDirectories))
|
||||||
|
foreach (var file in Directory.GetFiles(dir, "*", SearchOption.AllDirectories))
|
||||||
|
{
|
||||||
|
filteredList.Add(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (f.Contains("*")) // Pattern: File with wildcard
|
||||||
|
{
|
||||||
|
foreach (var file in Directory.GetFiles(fullPath, f, SearchOption.AllDirectories))
|
||||||
|
{
|
||||||
|
filteredList.Add(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // Pattern: File
|
||||||
|
{
|
||||||
|
if (File.Exists(f)){ filteredList.Add(f); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return filteredList;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user