mirror of
https://github.com/SkinnyMind/libgit2dart.git
synced 2025-05-04 20:29:08 -04:00
feat(reference): add ability to lookup reference by shorthand name
This commit is contained in:
parent
cfc6d0412b
commit
2170965ad8
4 changed files with 83 additions and 0 deletions
|
@ -65,6 +65,25 @@ Pointer<git_reference> lookup(Pointer<git_repository> repo, String name) {
|
|||
}
|
||||
}
|
||||
|
||||
/// Lookup a reference by DWIMing its short name.
|
||||
///
|
||||
/// Apply the git precendence rules to the given shorthand to determine which reference
|
||||
/// the user is referring to.
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
Pointer<git_reference> lookupDWIM(Pointer<git_repository> repo, String name) {
|
||||
final out = calloc<Pointer<git_reference>>();
|
||||
final nameC = name.toNativeUtf8().cast<Int8>();
|
||||
final error = libgit2.git_reference_dwim(out, repo, nameC);
|
||||
calloc.free(nameC);
|
||||
|
||||
if (error < 0) {
|
||||
throw LibGit2Error(libgit2.git_error_last());
|
||||
} else {
|
||||
return out.value;
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the full name of a reference.
|
||||
String name(Pointer<git_reference> ref) {
|
||||
var result = calloc<Int8>();
|
||||
|
|
|
@ -90,6 +90,19 @@ class Reference {
|
|||
_refPointer = bindings.lookup(repo, name);
|
||||
}
|
||||
|
||||
/// Initializes a new instance of the [Reference] class by
|
||||
/// lookingup a reference by DWIMing it's short [name] in a repository.
|
||||
///
|
||||
/// Should be freed with `free()` to release allocated memory.
|
||||
///
|
||||
/// The name will be checked for validity.
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
Reference.lookupDWIM(Pointer<git_repository> repo, String name) {
|
||||
libgit2.git_libgit2_init();
|
||||
_refPointer = bindings.lookupDWIM(repo, name);
|
||||
}
|
||||
|
||||
/// Pointer to memory address for allocated reference object.
|
||||
late Pointer<git_reference> _refPointer;
|
||||
|
||||
|
|
|
@ -227,6 +227,12 @@ class Repository {
|
|||
/// Throws a [LibGit2Error] if error occured.
|
||||
Reference getReference(String name) => Reference.lookup(_repoPointer, name);
|
||||
|
||||
/// Returns [Reference] object by lookingup a short [name] in repository.
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
Reference getReferenceDWIM(String name) =>
|
||||
Reference.lookupDWIM(_repoPointer, name);
|
||||
|
||||
/// Checks if a reflog exists for the specified reference [name].
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue