refactor: pass repository object to arguments instead of pointer

This commit is contained in:
Aleksey Kulikov 2021-08-30 17:14:52 +03:00
parent 94b4116adf
commit e0e3742457
6 changed files with 45 additions and 26 deletions

View file

@ -18,13 +18,13 @@ class Commit {
libgit2.git_libgit2_init(); libgit2.git_libgit2_init();
} }
/// Initializes a new instance of [Commit] class from provided pointer to [Repository] /// Initializes a new instance of [Commit] class from provided [Repository]
/// object in memory and pointer to [Oid] object in memory. /// and [Oid] objects.
/// ///
/// Should be freed with `free()` to release allocated memory. /// Should be freed with `free()` to release allocated memory.
Commit.lookup(Pointer<git_repository> repo, Pointer<git_oid> oid) { Commit.lookup(Repository repo, Oid oid) {
libgit2.git_libgit2_init(); libgit2.git_libgit2_init();
_commitPointer = bindings.lookup(repo, oid); _commitPointer = bindings.lookup(repo.pointer, oid.pointer);
} }
/// Pointer to memory address for allocated commit object. /// Pointer to memory address for allocated commit object.

View file

@ -96,13 +96,14 @@ class Index {
late final Oid oid; late final Oid oid;
late final Tree tree; late final Tree tree;
if (target is Oid) { if (target is Oid) {
tree = Tree.lookup(bindings.owner(_indexPointer), target.pointer); final repo = Repository(bindings.owner(_indexPointer));
tree = Tree.lookup(repo, target);
} else if (target is Tree) { } else if (target is Tree) {
tree = target; tree = target;
} else if (isValidShaHex(target as String)) { } else if (isValidShaHex(target as String)) {
final repo = Repository(bindings.owner(_indexPointer)); final repo = Repository(bindings.owner(_indexPointer));
oid = Oid.fromSHA(repo, target); oid = Oid.fromSHA(repo, target);
tree = Tree.lookup(repo.pointer, oid.pointer); tree = Tree.lookup(repo, oid);
} else { } else {
throw ArgumentError.value( throw ArgumentError.value(
'$target should be either Oid object, SHA hex string or Tree object'); '$target should be either Oid object, SHA hex string or Tree object');

View file

@ -9,10 +9,13 @@ import 'util.dart';
class References { class References {
/// Initializes a new instance of the [References] class /// Initializes a new instance of the [References] class
/// from provided pointer to repository object in memory. /// from provided [Repository] object.
References(this._repoPointer); References(Repository repo) {
_repoPointer = repo.pointer;
}
final Pointer<git_repository> _repoPointer; /// Pointer to memory address for allocated repository object.
late final Pointer<git_repository> _repoPointer;
/// Returns a list of all the references that can be found in a repository. /// Returns a list of all the references that can be found in a repository.
/// ///
@ -58,14 +61,20 @@ class Reference {
/// The message for the reflog will be ignored if the reference does not belong in the /// The message for the reflog will be ignored if the reference does not belong in the
/// standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog. /// standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.
Reference.createDirect({ Reference.createDirect({
required Pointer<git_repository> repo, required Repository repo,
required String name, required String name,
required Pointer<git_oid> oid, required Pointer<git_oid> oid,
required bool force, required bool force,
String? logMessage, String? logMessage,
}) { }) {
_repoPointer = repo; _repoPointer = repo.pointer;
_refPointer = bindings.createDirect(repo, name, oid, force, logMessage); _refPointer = bindings.createDirect(
repo.pointer,
name,
oid,
force,
logMessage,
);
} }
/// Initializes a new instance of the [Reference] class by creating a new symbolic reference. /// Initializes a new instance of the [Reference] class by creating a new symbolic reference.
@ -91,20 +100,26 @@ class Reference {
/// The message for the reflog will be ignored if the reference does not belong in the standard /// The message for the reflog will be ignored if the reference does not belong in the standard
/// set (HEAD, branches and remote-tracking branches) and it does not have a reflog. /// set (HEAD, branches and remote-tracking branches) and it does not have a reflog.
Reference.createSymbolic({ Reference.createSymbolic({
required Pointer<git_repository> repo, required Repository repo,
required String name, required String name,
required String target, required String target,
required bool force, required bool force,
String? logMessage, String? logMessage,
}) { }) {
_repoPointer = repo; _repoPointer = repo.pointer;
_refPointer = _refPointer = bindings.createSymbolic(
bindings.createSymbolic(repo, name, target, force, logMessage); repo.pointer,
name,
target,
force,
logMessage,
);
} }
/// Pointer to memory address for allocated reference object. /// Pointer to memory address for allocated reference object.
late Pointer<git_reference> _refPointer; late Pointer<git_reference> _refPointer;
/// Pointer to memory address for allocated repository object.
late final Pointer<git_repository> _repoPointer; late final Pointer<git_repository> _repoPointer;
/// Returns the type of the reference. /// Returns the type of the reference.
@ -138,7 +153,7 @@ class Reference {
late final Oid oid; late final Oid oid;
if (isValidShaHex(target)) { if (isValidShaHex(target)) {
final repo = Repository(bindings.owner(_refPointer)); final repo = Repository(_repoPointer);
oid = Oid.fromSHA(repo, target); oid = Oid.fromSHA(repo, target);
} else { } else {
final ref = Reference( final ref = Reference(
@ -205,7 +220,7 @@ class Reference {
bool get isTag => bindings.isTag(_refPointer); bool get isTag => bindings.isTag(_refPointer);
/// Returns the repository where a reference resides. /// Returns the repository where a reference resides.
Pointer<git_repository> get owner => bindings.owner(_refPointer); Repository get owner => Repository(bindings.owner(_refPointer));
/// Delete an existing reference. /// Delete an existing reference.
/// ///

View file

@ -14,7 +14,7 @@ class RefLog {
final repo = ref.owner; final repo = ref.owner;
final name = ref.name; final name = ref.name;
_reflogPointer = bindings.read(repo, name); _reflogPointer = bindings.read(repo.pointer, name);
} }
/// Pointer to memory address for allocated reflog object. /// Pointer to memory address for allocated reflog object.

View file

@ -238,7 +238,7 @@ class Repository {
Reference get head => Reference(_repoPointer, bindings.head(_repoPointer)); Reference get head => Reference(_repoPointer, bindings.head(_repoPointer));
/// Returns [References] object. /// Returns [References] object.
References get references => References(_repoPointer); References get references => References(this);
/// Creates a new reference. /// Creates a new reference.
/// ///
@ -278,7 +278,7 @@ class Repository {
if (isDirect) { if (isDirect) {
return Reference.createDirect( return Reference.createDirect(
repo: _repoPointer, repo: this,
name: name, name: name,
oid: oid.pointer, oid: oid.pointer,
force: force, force: force,
@ -286,7 +286,7 @@ class Repository {
); );
} else { } else {
return Reference.createSymbolic( return Reference.createSymbolic(
repo: _repoPointer, repo: this,
name: name, name: name,
target: target as String, target: target as String,
force: force, force: force,
@ -318,6 +318,6 @@ class Repository {
} else { } else {
throw ArgumentError.value('$sha is not a valid sha hex string'); throw ArgumentError.value('$sha is not a valid sha hex string');
} }
return Commit.lookup(_repoPointer, oid.pointer); return Commit.lookup(this, oid);
} }
} }

View file

@ -1,6 +1,9 @@
import 'dart:ffi'; import 'dart:ffi';
import 'package:libgit2dart/src/repository.dart';
import 'bindings/libgit2_bindings.dart'; import 'bindings/libgit2_bindings.dart';
import 'bindings/tree.dart' as bindings; import 'bindings/tree.dart' as bindings;
import 'oid.dart';
import 'util.dart'; import 'util.dart';
class Tree { class Tree {
@ -11,12 +14,12 @@ class Tree {
} }
/// Initializes a new instance of [Tree] class from provided /// Initializes a new instance of [Tree] class from provided
/// pointers to repository object and oid object in memory. /// [Repository] and [Oid] objects.
/// ///
/// Should be freed with `free()` to release allocated memory. /// Should be freed with `free()` to release allocated memory.
Tree.lookup(Pointer<git_repository> repo, Pointer<git_oid> id) { Tree.lookup(Repository repo, Oid id) {
libgit2.git_libgit2_init(); libgit2.git_libgit2_init();
_treePointer = bindings.lookup(repo, id); _treePointer = bindings.lookup(repo.pointer, id.pointer);
} }
late final Pointer<git_tree> _treePointer; late final Pointer<git_tree> _treePointer;