Skip to content

Commit 2b0b714

Browse files
committed
Merge branch 'register-custom-filters' into dahlbyk/register-custom-filters
Conflicts: LibGit2Sharp.Tests/TestHelpers/SubstitutionCipherFilter.cs LibGit2Sharp/GitBufReader.cs
2 parents 21a6381 + b3878f1 commit 2b0b714

File tree

11 files changed

+131
-104
lines changed

11 files changed

+131
-104
lines changed

LibGit2Sharp.Tests/FilterFixture.cs

Lines changed: 36 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -16,49 +16,42 @@ public class FilterFixture : BaseFixture
1616
readonly Func<FilterSource, IEnumerable<string>, int> checkSuccess = (source, attr) => 0;
1717

1818
private const string FilterName = "the-filter";
19-
const string Attribute = "test";
19+
readonly List<string> attributes = new List<string>{"test"};
2020

2121
[Fact]
2222
public void CanRegisterFilterWithSingleAttribute()
2323
{
24-
var filter = new EmptyFilter(FilterName, Attribute);
25-
Assert.Equal(new List<string> { Attribute }, filter.Attributes);
26-
}
27-
28-
[Fact]
29-
public void CanRegisterFilterWithCommaSeparatedListOfAttributes()
30-
{
31-
var filter = new EmptyFilter(FilterName, "one,two,three");
32-
Assert.Equal(new List<string> { "one", "two", "three" }, filter.Attributes);
24+
var filter = new EmptyFilter(FilterName, attributes);
25+
Assert.Equal( attributes , filter.Attributes);
3326
}
3427

3528
[Fact]
3629
public void CanRegisterAndUnregisterTheSameFilter()
3730
{
38-
var filter = new EmptyFilter(FilterName + 1, Attribute);
31+
var filter = new EmptyFilter(FilterName + 1, attributes);
3932

4033
GlobalSettings.RegisterFilter(filter);
41-
GlobalSettings.DeregisterFilter(filter);
34+
GlobalSettings.DeregisterFilter(filter.Name);
4235

4336
GlobalSettings.RegisterFilter(filter);
44-
GlobalSettings.DeregisterFilter(filter);
37+
GlobalSettings.DeregisterFilter(filter.Name);
4538
}
4639

4740
[Fact]
4841
public void CanRegisterAndDeregisterAfterGarbageCollection()
4942
{
50-
var filter = new EmptyFilter(FilterName + 2, Attribute);
43+
var filter = new EmptyFilter(FilterName + 2, attributes);
5144
GlobalSettings.RegisterFilter(filter);
5245

5346
GC.Collect();
5447

55-
GlobalSettings.DeregisterFilter(filter);
48+
GlobalSettings.DeregisterFilter(filter.Name);
5649
}
5750

5851
[Fact]
5952
public void SameFilterIsEqual()
6053
{
61-
var filter = new EmptyFilter(FilterName + 3, Attribute);
54+
var filter = new EmptyFilter(FilterName + 3, attributes);
6255
Assert.Equal(filter, filter);
6356
}
6457

@@ -74,7 +67,7 @@ public void CheckCallbackNotMadeWhenFileStagedAndFilterNotRegistered()
7467

7568
string repoPath = InitNewRepository();
7669

77-
new FakeFilter(FilterName + 4, Attribute, callback);
70+
new FakeFilter(FilterName + 4, attributes, callback);
7871

7972
using (var repo = CreateTestRepository(repoPath))
8073
{
@@ -95,7 +88,7 @@ public void CheckCallbackMadeWhenFileStaged()
9588
};
9689
string repoPath = InitNewRepository();
9790

98-
var filter = new FakeFilter(FilterName + 5, Attribute, checkCallBack);
91+
var filter = new FakeFilter(FilterName + 5, attributes, checkCallBack);
9992

10093
GlobalSettings.RegisterFilter(filter);
10194
using (var repo = CreateTestRepository(repoPath))
@@ -104,7 +97,7 @@ public void CheckCallbackMadeWhenFileStaged()
10497
Assert.True(called);
10598
}
10699

107-
GlobalSettings.DeregisterFilter(filter);
100+
GlobalSettings.DeregisterFilter(filter.Name);
108101
}
109102

110103
[Fact]
@@ -119,15 +112,15 @@ public void ApplyCallbackMadeWhenCheckCallbackReturnsZero()
119112
};
120113

121114
string repoPath = InitNewRepository();
122-
var filter = new FakeFilter(FilterName + 6, Attribute, checkSuccess, applyCallback);
115+
var filter = new FakeFilter(FilterName + 6, attributes, checkSuccess, applyCallback);
123116

124117
GlobalSettings.RegisterFilter(filter);
125118
using (var repo = CreateTestRepository(repoPath))
126119
{
127120
StageNewFile(repo);
128121
}
129122

130-
GlobalSettings.DeregisterFilter(filter);
123+
GlobalSettings.DeregisterFilter(filter.Name);
131124

132125
Assert.True(called);
133126
}
@@ -144,15 +137,15 @@ public void ApplyCallbackNotMadeWhenCheckCallbackReturnsPassThrough()
144137
};
145138

146139
string repoPath = InitNewRepository();
147-
var filter = new FakeFilter(FilterName + 7, Attribute, checkPassThrough, applyCallback);
140+
var filter = new FakeFilter(FilterName + 7, attributes, checkPassThrough, applyCallback);
148141

149142
GlobalSettings.RegisterFilter(filter);
150143
using (var repo = CreateTestRepository(repoPath))
151144
{
152145
StageNewFile(repo);
153146
}
154147

155-
GlobalSettings.DeregisterFilter(filter);
148+
GlobalSettings.DeregisterFilter(filter.Name);
156149

157150
Assert.False(called);
158151
}
@@ -167,7 +160,7 @@ public void InitCallbackNotMadeWhenFilterNeverUsed()
167160
return 0;
168161
};
169162

170-
var filter = new FakeFilter(FilterName + 11, Attribute,
163+
var filter = new FakeFilter(FilterName + 11, attributes,
171164
checkSuccess,
172165
successCallback,
173166
successCallback,
@@ -177,7 +170,7 @@ public void InitCallbackNotMadeWhenFilterNeverUsed()
177170

178171
Assert.False(called);
179172

180-
GlobalSettings.DeregisterFilter(filter);
173+
GlobalSettings.DeregisterFilter(filter.Name);
181174
}
182175

183176
[Fact]
@@ -190,7 +183,7 @@ public void InitCallbackMadeWhenUsingTheFilter()
190183
return 0;
191184
};
192185

193-
var filter = new FakeFilter(FilterName + 12, Attribute,
186+
var filter = new FakeFilter(FilterName + 12, attributes,
194187
checkSuccess,
195188
successCallback,
196189
successCallback,
@@ -206,7 +199,7 @@ public void InitCallbackMadeWhenUsingTheFilter()
206199
Assert.True(called);
207200
}
208201

209-
GlobalSettings.DeregisterFilter(filter);
202+
GlobalSettings.DeregisterFilter(filter.Name);
210203
}
211204

212205
[Fact]
@@ -225,7 +218,7 @@ public void WhenStagingFileCheckIsCalledWithCleanForCorrectPath()
225218
return GitPassThrough;
226219
};
227220

228-
var filter = new FakeFilter(FilterName + 13, Attribute, callback);
221+
var filter = new FakeFilter(FilterName + 13, attributes, callback);
229222

230223
GlobalSettings.RegisterFilter(filter);
231224

@@ -235,10 +228,10 @@ public void WhenStagingFileCheckIsCalledWithCleanForCorrectPath()
235228

236229
Assert.Equal(FilterMode.Clean, calledWithMode);
237230
Assert.Equal(expectedFile.Name, actualPath);
238-
Assert.Equal(new List<string> { Attribute }, actualAttributes);
231+
Assert.Equal(attributes, actualAttributes);
239232
}
240233

241-
GlobalSettings.DeregisterFilter(filter);
234+
GlobalSettings.DeregisterFilter(filter.Name);
242235
}
243236

244237

@@ -259,16 +252,16 @@ public void WhenCheckingOutAFileFileCheckIsCalledWithSmudgeForCorrectPath()
259252
return GitPassThrough;
260253
};
261254

262-
var filter = new FakeFilter(FilterName + 14, Attribute, callback);
255+
var filter = new FakeFilter(FilterName + 14, attributes, callback);
263256

264257
GlobalSettings.RegisterFilter(filter);
265258

266259
FileInfo expectedFile = CheckoutFileForSmudge(repoPath, branchName, "hello");
267260
Assert.Equal(FilterMode.Smudge, calledWithMode);
268261
Assert.Equal(expectedFile.FullName, actualPath);
269-
Assert.Equal(new List<string> { Attribute }, actualAttributes);
262+
Assert.Equal(attributes, actualAttributes);
270263

271-
GlobalSettings.DeregisterFilter(filter);
264+
GlobalSettings.DeregisterFilter(filter.Name);
272265
}
273266

274267
[Fact]
@@ -282,7 +275,7 @@ public void WhenStagingFileApplyIsCalledWithCleanForCorrectPath()
282275
called = true;
283276
return GitPassThrough;
284277
};
285-
var filter = new FakeFilter(FilterName + 15, Attribute, checkSuccess, clean);
278+
var filter = new FakeFilter(FilterName + 15, attributes, checkSuccess, clean);
286279

287280
GlobalSettings.RegisterFilter(filter);
288281

@@ -292,7 +285,7 @@ public void WhenStagingFileApplyIsCalledWithCleanForCorrectPath()
292285
Assert.True(called);
293286
}
294287

295-
GlobalSettings.DeregisterFilter(filter);
288+
GlobalSettings.DeregisterFilter(filter.Name);
296289
}
297290

298291
[Fact]
@@ -305,7 +298,7 @@ public void CleanFilterWritesOutputToObjectTree()
305298

306299
Func<Stream, Stream, int> cleanCallback = SubstitutionCipherFilter.RotateByThirteenPlaces;
307300

308-
var filter = new FakeFilter(FilterName + 16, Attribute, checkSuccess, cleanCallback);
301+
var filter = new FakeFilter(FilterName + 16, attributes, checkSuccess, cleanCallback);
309302

310303
GlobalSettings.RegisterFilter(filter);
311304

@@ -320,7 +313,7 @@ public void CleanFilterWritesOutputToObjectTree()
320313
Assert.Equal(encodedInput, textDetected);
321314
}
322315

323-
GlobalSettings.DeregisterFilter(filter);
316+
GlobalSettings.DeregisterFilter(filter.Name);
324317
}
325318

326319

@@ -335,7 +328,7 @@ public void WhenCheckingOutAFileFileSmudgeWritesCorrectFileToWorkingDirectory()
335328

336329
Func<Stream, Stream, int> smudgeCallback = SubstitutionCipherFilter.RotateByThirteenPlaces;
337330

338-
var filter = new FakeFilter(FilterName + 17, Attribute, checkSuccess, null, smudgeCallback);
331+
var filter = new FakeFilter(FilterName + 17, attributes, checkSuccess, null, smudgeCallback);
339332
GlobalSettings.RegisterFilter(filter);
340333

341334
FileInfo expectedFile = CheckoutFileForSmudge(repoPath, branchName, encodedInput);
@@ -344,7 +337,7 @@ public void WhenCheckingOutAFileFileSmudgeWritesCorrectFileToWorkingDirectory()
344337
string readAllText = File.ReadAllText(combine);
345338
Assert.Equal(decodedInput, readAllText);
346339

347-
GlobalSettings.DeregisterFilter(filter);
340+
GlobalSettings.DeregisterFilter(filter.Name);
348341
}
349342

350343
[Fact]
@@ -368,7 +361,7 @@ public void FilterStreamsAreCoherent()
368361
return GitPassThrough;
369362
};
370363

371-
var filter = new FakeFilter(FilterName + 18, Attribute, checkSuccess, assertor, assertor);
364+
var filter = new FakeFilter(FilterName + 18, attributes, checkSuccess, assertor, assertor);
372365

373366
GlobalSettings.RegisterFilter(filter);
374367

@@ -377,7 +370,7 @@ public void FilterStreamsAreCoherent()
377370
StageNewFile(repo);
378371
}
379372

380-
GlobalSettings.DeregisterFilter(filter);
373+
GlobalSettings.DeregisterFilter(filter.Name);
381374

382375
Assert.True(inputCanRead.HasValue);
383376
Assert.True(inputCanWrite.HasValue);
@@ -440,7 +433,7 @@ private Repository CreateTestRepository(string path)
440433

441434
class EmptyFilter : Filter
442435
{
443-
public EmptyFilter(string name, string attributes)
436+
public EmptyFilter(string name, IEnumerable<string> attributes)
444437
: base(name, attributes)
445438
{ }
446439
}
@@ -452,7 +445,7 @@ class FakeFilter : Filter
452445
private readonly Func<Stream, Stream, int> smudgeCallback;
453446
private readonly Func<int> initCallback;
454447

455-
public FakeFilter(string name, string attributes,
448+
public FakeFilter(string name, IEnumerable<string> attributes,
456449
Func<FilterSource, IEnumerable<string>, int> checkCallBack = null,
457450
Func<Stream, Stream, int> cleanCallback = null,
458451
Func<Stream, Stream, int> smudgeCallback = null,

LibGit2Sharp.Tests/SubstitutionCipherFilterFixture.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.IO;
34
using LibGit2Sharp.Tests.TestHelpers;
45
using Xunit;
@@ -13,7 +14,8 @@ public void CorrectlyEncodesAndDecodesInput()
1314
const string decodedInput = "This is a substitution cipher";
1415
const string encodedInput = "Guvf vf n fhofgvghgvba pvcure";
1516

16-
var filter = new SubstitutionCipherFilter("ROT13", ".rot13");
17+
var attributes = new List<string> { ".rot13" };
18+
var filter = new SubstitutionCipherFilter("ROT13", attributes);
1719
GlobalSettings.RegisterFilter(filter);
1820

1921
string repoPath = InitNewRepository();
@@ -42,15 +44,16 @@ public void CorrectlyEncodesAndDecodesInput()
4244
Assert.Equal(decodedInput, fileContents);
4345
}
4446

45-
GlobalSettings.DeregisterFilter(filter);
47+
GlobalSettings.DeregisterFilter(filter.Name);
4648
}
4749

4850
[Fact]
4951
public void WhenAttributesDoNotMatchFileIsNotFilterd()
5052
{
5153
const string decodedInput = "This is a substitution cipher";
5254

53-
var filter = new SubstitutionCipherFilter("ROT13", ".rot13");
55+
var attributes = new List<string> { ".rot13" };
56+
var filter = new SubstitutionCipherFilter("ROT13", attributes);
5457
GlobalSettings.RegisterFilter(filter);
5558

5659
string repoPath = InitNewRepository();
@@ -67,7 +70,7 @@ public void WhenAttributesDoNotMatchFileIsNotFilterd()
6770
Assert.Equal(1, filter.CheckCalledCount);
6871
}
6972

70-
GlobalSettings.DeregisterFilter(filter);
73+
GlobalSettings.DeregisterFilter(filter.Name);
7174
}
7275

7376
private static string ReadTextFromFile(Repository repo, string fileName)

LibGit2Sharp.Tests/TestHelpers/SubstitutionCipherFilter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class SubstitutionCipherFilter : Filter
1010
public int CleanCalledCount = 0;
1111
public int SmudgeCalledCount = 0;
1212

13-
public SubstitutionCipherFilter(string name, string attributes)
13+
public SubstitutionCipherFilter(string name, IEnumerable<string> attributes)
1414
: base(name, attributes)
1515
{
1616
}

LibGit2Sharp/Core/GitFilter.cs

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
using System;
22
using System.Runtime.InteropServices;
3-
using System.Text;
4-
53
namespace LibGit2Sharp.Core
64
{
75
/// <summary>
@@ -89,21 +87,6 @@ public delegate int git_filter_apply_fn(
8987
/// to keep per-source filter state, use this callback to free that payload and release resources as required.
9088
/// </summary>
9189
public delegate void git_filter_cleanup_fn(IntPtr gitFilter, IntPtr payload);
92-
93-
public static string GetAttributesFromPointer(IntPtr intPtr)
94-
{
95-
return EncodingMarshaler.FromNative(Encoding.UTF8, intPtr);
96-
}
97-
98-
public string ManagedAttributes()
99-
{
100-
return GetAttributesFromPointer(attributes);
101-
}
102-
103-
public static IntPtr GetAttributesFromManaged(string attributes)
104-
{
105-
return EncodingMarshaler.FromManaged(Encoding.UTF8, attributes);
106-
}
10790
}
10891
/// <summary>
10992
/// The file source being filtered

LibGit2Sharp/Core/NativeMethods.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,6 @@ internal static extern int git_blob_filtered_content(
165165
[DllImport(libgit2)]
166166
internal static extern IntPtr git_blob_rawcontent(GitObjectSafeHandle blob);
167167

168-
[DllImport(libgit2)]
169-
internal static extern IntPtr git_blob_rawcontent(IntPtr blob);
170-
171168
[DllImport(libgit2)]
172169
internal static extern Int64 git_blob_rawsize(GitObjectSafeHandle blob);
173170

LibGit2Sharp/Core/Proxy.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -861,11 +861,8 @@ public static void git_filter_unregister(string name)
861861

862862
public static FilterMode git_filter_source_mode(IntPtr filterSource)
863863
{
864-
using (ThreadAffinity())
865-
{
866-
var res = NativeMethods.git_filter_source_mode(filterSource);
867-
return (FilterMode)res;
868-
}
864+
var res = NativeMethods.git_filter_source_mode(filterSource);
865+
return (FilterMode)res;
869866
}
870867

871868
public static void git_filter_free(IntPtr gitFilter)

0 commit comments

Comments
 (0)