Skip to content

Commit f7cd0b0

Browse files
committed
Delegate detection of invalid reference names
1 parent f68acdc commit f7cd0b0

File tree

3 files changed

+14
-15
lines changed

3 files changed

+14
-15
lines changed

LibGit2Sharp/Core/NativeMethods.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,10 @@ internal static extern int git_reference_foreach_glob(
489489
[DllImport(libgit2)]
490490
internal static extern void git_reference_free(IntPtr reference);
491491

492+
[DllImport(libgit2)]
493+
internal static extern int git_reference_is_valid_name(
494+
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(Utf8Marshaler))] string refname);
495+
492496
[DllImport(libgit2)]
493497
internal static extern int git_reference_lookup(
494498
out ReferenceSafeHandle reference,

LibGit2Sharp/Core/Proxy.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -883,6 +883,11 @@ public static void git_reference_free(IntPtr reference)
883883
NativeMethods.git_reference_free(reference);
884884
}
885885

886+
public static bool git_reference_is_valid_name(string refname)
887+
{
888+
return NativeMethods.git_reference_is_valid_name(refname) != 0;
889+
}
890+
886891
public static IList<string> git_reference_list(RepositorySafeHandle repo, GitReferenceType flags)
887892
{
888893
using (ThreadAffinity())

LibGit2Sharp/ReferenceCollectionExtensions.cs

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,15 @@ private enum RefState
1919

2020
private static RefState TryResolveReference(out Reference reference, ReferenceCollection refsColl, string canonicalName)
2121
{
22-
try
23-
{
24-
//TODO: Maybe would it be better to rather rely on git_reference_normalize_name()
25-
//This would be much more straightforward and less subject to fail for the wrong reason.
26-
27-
reference = refsColl[canonicalName];
28-
29-
if (reference != null)
30-
{
31-
return RefState.Exists;
32-
}
33-
34-
return RefState.DoesNotExistButLooksValid;
35-
}
36-
catch (LibGit2SharpException)
22+
if (!Proxy.git_reference_is_valid_name(canonicalName))
3723
{
3824
reference = null;
3925
return RefState.DoesNotLookValid;
4026
}
27+
28+
reference = refsColl[canonicalName];
29+
30+
return reference != null ? RefState.Exists : RefState.DoesNotExistButLooksValid;
4131
}
4232

4333
/// <summary>

0 commit comments

Comments
 (0)