mirror of
https://github.com/SkinnyMind/libgit2dart.git
synced 2025-05-05 04:39:07 -04:00
feat(tag): add bindings and api
This commit is contained in:
parent
f0803298c8
commit
0cdaa6f8f4
10 changed files with 392 additions and 1 deletions
94
lib/src/tag.dart
Normal file
94
lib/src/tag.dart
Normal file
|
@ -0,0 +1,94 @@
|
|||
import 'dart:ffi';
|
||||
|
||||
import 'bindings/libgit2_bindings.dart';
|
||||
import 'bindings/tag.dart' as bindings;
|
||||
import 'bindings/object.dart' as object_bindings;
|
||||
import 'commit.dart';
|
||||
import 'oid.dart';
|
||||
import 'repository.dart';
|
||||
import 'signature.dart';
|
||||
import 'enums.dart';
|
||||
|
||||
class Tag {
|
||||
/// Initializes a new instance of [Tag] class from provided
|
||||
/// [Repository] and [Oid] objects.
|
||||
///
|
||||
/// Should be freed with `free()` to release allocated memory.
|
||||
Tag.lookup(Repository repo, Oid oid) {
|
||||
_tagPointer = bindings.lookup(repo.pointer, oid.pointer);
|
||||
}
|
||||
|
||||
late final Pointer<git_tag> _tagPointer;
|
||||
|
||||
/// Pointer to memory address for allocated tag object.
|
||||
Pointer<git_tag> get pointer => _tagPointer;
|
||||
|
||||
/// Creates a new tag in the repository from provided Oid object.
|
||||
///
|
||||
/// A new reference will also be created pointing to this tag object. If force is true
|
||||
/// and a reference already exists with the given name, it'll be replaced.
|
||||
///
|
||||
/// The message will not be cleaned up.
|
||||
///
|
||||
/// The tag name will be checked for validity. You must avoid the characters
|
||||
/// '~', '^', ':', '\', '?', '[', and '*', and the sequences ".." and "@{" which have
|
||||
/// special meaning to revparse.
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
static Oid create({
|
||||
required Repository repository,
|
||||
required String tagName,
|
||||
required Oid target,
|
||||
required GitObject targetType,
|
||||
required Signature tagger,
|
||||
required String message,
|
||||
bool force = false,
|
||||
}) {
|
||||
// add 1 to GitObject enum index to match libgit2
|
||||
final object = object_bindings.lookup(
|
||||
repository.pointer,
|
||||
target.pointer,
|
||||
targetType.index + 1,
|
||||
);
|
||||
final result = bindings.create(
|
||||
repository.pointer,
|
||||
tagName,
|
||||
object,
|
||||
tagger.pointer,
|
||||
message,
|
||||
force,
|
||||
);
|
||||
|
||||
object_bindings.free(object);
|
||||
return Oid(result);
|
||||
}
|
||||
|
||||
/// Get the tagged object of a tag.
|
||||
///
|
||||
/// This method performs a repository lookup for the given object and returns it.
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
Commit get target => Commit(bindings.target(_tagPointer).cast());
|
||||
|
||||
/// Get the id of a tag.
|
||||
Oid get id => Oid(bindings.id(_tagPointer));
|
||||
|
||||
/// Returns the name of a tag.
|
||||
String get name => bindings.name(_tagPointer);
|
||||
|
||||
/// Returns the message of a tag.
|
||||
String get message => bindings.message(_tagPointer);
|
||||
|
||||
/// Returns the tagger (author) of a tag if there is one.
|
||||
Signature? get tagger {
|
||||
final sigPointer = bindings.tagger(_tagPointer);
|
||||
if (sigPointer != nullptr) {
|
||||
return Signature(sigPointer);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// Releases memory allocated for tag object.
|
||||
void free() => bindings.free(_tagPointer);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue