mirror of
https://github.com/SkinnyMind/libgit2dart.git
synced 2025-05-04 20:29:08 -04:00
feat(tag): add more bindings and api methods
This commit is contained in:
parent
0ed5e7c797
commit
c88b75b0fd
3 changed files with 72 additions and 0 deletions
|
@ -4,6 +4,26 @@ import '../error.dart';
|
|||
import 'libgit2_bindings.dart';
|
||||
import '../util.dart';
|
||||
|
||||
/// Fill a list with all the tags in the repository.
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
List<String> list(Pointer<git_repository> repo) {
|
||||
final out = calloc<git_strarray>();
|
||||
final error = libgit2.git_tag_list(out, repo);
|
||||
|
||||
var result = <String>[];
|
||||
|
||||
if (error < 0) {
|
||||
throw LibGit2Error(libgit2.git_error_last());
|
||||
} else {
|
||||
for (var i = 0; i < out.ref.count; i++) {
|
||||
result.add(out.ref.strings[i].cast<Utf8>().toDartString());
|
||||
}
|
||||
calloc.free(out);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/// Lookup a tag object from the repository.
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
|
@ -99,5 +119,29 @@ Pointer<git_oid> create({
|
|||
}
|
||||
}
|
||||
|
||||
/// Delete an existing tag reference.
|
||||
///
|
||||
/// The tag name will be checked for validity.
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
void delete({
|
||||
required Pointer<git_repository> repoPointer,
|
||||
required String tagName,
|
||||
}) {
|
||||
final tagNameC = tagName.toNativeUtf8().cast<Int8>();
|
||||
final error = libgit2.git_tag_delete(repoPointer, tagNameC);
|
||||
|
||||
calloc.free(tagNameC);
|
||||
|
||||
if (error < 0) {
|
||||
throw LibGit2Error(libgit2.git_error_last());
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the repository that contains the tag.
|
||||
Pointer<git_repository> owner(Pointer<git_tag> tag) {
|
||||
return libgit2.git_tag_owner(tag);
|
||||
}
|
||||
|
||||
/// Close an open tag to release memory.
|
||||
void free(Pointer<git_tag> tag) => libgit2.git_tag_free(tag);
|
||||
|
|
|
@ -74,6 +74,13 @@ class Tag {
|
|||
return Oid(result);
|
||||
}
|
||||
|
||||
/// Returns a list with all the tags in the repository.
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
static List<String> list(Repository repo) {
|
||||
return bindings.list(repo.pointer);
|
||||
}
|
||||
|
||||
/// Get the tagged object (commit, tree, blob, tag) of a tag.
|
||||
///
|
||||
/// This method performs a repository lookup for the given object and returns it.
|
||||
|
@ -122,6 +129,16 @@ class Tag {
|
|||
}
|
||||
}
|
||||
|
||||
/// Deletes an existing tag reference.
|
||||
///
|
||||
/// The tag name will be checked for validity.
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
void delete() {
|
||||
final owner = bindings.owner(_tagPointer);
|
||||
bindings.delete(repoPointer: owner, tagName: name);
|
||||
}
|
||||
|
||||
/// Releases memory allocated for tag object.
|
||||
void free() => bindings.free(_tagPointer);
|
||||
}
|
||||
|
|
|
@ -80,5 +80,16 @@ void main() {
|
|||
newTagTarget.free();
|
||||
signature.free();
|
||||
});
|
||||
|
||||
test('returns list of tags in repository', () {
|
||||
expect(Tag.list(repo), ['v0.1', 'v0.2']);
|
||||
});
|
||||
|
||||
test('successfully deletes tag', () {
|
||||
expect(Tag.list(repo), ['v0.1', 'v0.2']);
|
||||
|
||||
tag.delete();
|
||||
expect(Tag.list(repo), ['v0.1']);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue