GitignoreParserNet 0.2.0.9
See the version list below for details.
dotnet add package GitignoreParserNet --version 0.2.0.9
NuGet\Install-Package GitignoreParserNet -Version 0.2.0.9
<PackageReference Include="GitignoreParserNet" Version="0.2.0.9" />
paket add GitignoreParserNet --version 0.2.0.9
#r "nuget: GitignoreParserNet, 0.2.0.9"
// Install GitignoreParserNet as a Cake Addin #addin nuget:?package=GitignoreParserNet&version=0.2.0.9 // Install GitignoreParserNet as a Cake Tool #tool nuget:?package=GitignoreParserNet&version=0.2.0.9
This is a .NET port of gitignore-parser for node.js by Ger Hobbelt
A simple yet complete .gitignore
parser for .NET.
Installation
You can find the Nuget Pachage here, or just:
Install-Package GitignoreParserNet -Version 0.2.0.9
Features
Supports all features listed in the GIT SCM gitignore manpage:
handles the
**
wildcard anywhere- in both the usual usage, e.g.
foo/**/bar
, and also in complexes such asyo/**la/bin
- can be used multiple times in a single pattern, e.g.
foo/**/rec**on
- in both the usual usage, e.g.
handles the
*
wildcardhandles the
?
wildcardhandles
[a-z]
style character rangesunderstands
!
-prefixed negated patternsunderstands
\#
,\[
,\\
, etc. filename escapes, thus handles patterns like\#*#
correctly (hint: this is NOT a comment line!)deals with any sequence of positive and negative patterns, like this one from the
.gitignore
manpage:# exclude everything except directory foo/bar /* !/foo /foo/* !/foo/bar
handles any empty lines and
#
comment lines you feed itwe're filename agnostic: the "
.gitignore
file" does not have to be named.gitignore
but can be named anything: this parser accepts.gitignore
-formatted content from anywhere: you load the file, we do the parsing, you feed ourAccepts()
orDenies()
APIs any filenames / paths you want filtered and we'll tell you if it's a go or a no go.extra: an additional API is available for those of you who wish to have the complete and utter
.gitignore
experience: use ourInspects(path)
API to know whether the given gitignore filter set did actively filter the given file or did simple allow it to pass through.Read as: if the
.gitignore
has a pattern which matches the given file/path, then we will returntrue
, otherwise we returnfalse
.Use this in directory trees where you have multiple
.gitignore
files in nested directories and are implementing tooling withgit
-like.gitignore
behaviour.
Usage
static List<string> ListFileNames(string directoryPath)
{
DirectoryInfo dir = new DirectoryInfo(directoryPath);
List<string> files = new List<string>
{
dir.FullName + '/'
};
foreach (FileInfo file in dir.GetFiles())
files.Add(file.FullName);
foreach (DirectoryInfo subDir in dir.GetDirectories())
files.AddRange(ListFileNames(subDir.FullName));
return files;
}
static void Main(string[] args)
{
const string projPath = @"C:\path\to\dir";
var files = ListFileNames(projPath);
string gitignore = File.ReadAllText(Path.Combine(projPath, ".gitignore"), Encoding.UTF8);
var parser = new GitignoreParser(gitignore);
var accepted = files.Where(file => parser.Accepts(file));
foreach (string file in accepted)
Console.WriteLine(file);
}
Notes
- As the
.gitignore
spec differentiates between patterns such asfoo
andfoo/
, where the latter only matches any directory namedfoo
, you MUST pass the is-this-a-file-or-a-directory info to us when you invoke any of ourAccepts()
,Denies()
andInspects()
APIs by making sure directory paths have a trailing/
.
License
Apache 2, see LICENSE.md.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 is compatible. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 is compatible. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETCoreApp 3.1
- No dependencies.
-
.NETFramework 4.8
- No dependencies.
-
.NETStandard 2.0
- No dependencies.
-
net5.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.