From e0e3742457d2948dccbf7647e28337b556eb345d Mon Sep 17 00:00:00 2001 From: Aleksey Kulikov Date: Mon, 30 Aug 2021 17:14:52 +0300 Subject: [PATCH] refactor: pass repository object to arguments instead of pointer --- lib/src/commit.dart | 8 ++++---- lib/src/index.dart | 5 +++-- lib/src/reference.dart | 39 +++++++++++++++++++++++++++------------ lib/src/reflog.dart | 2 +- lib/src/repository.dart | 8 ++++---- lib/src/tree.dart | 9 ++++++--- 6 files changed, 45 insertions(+), 26 deletions(-) diff --git a/lib/src/commit.dart b/lib/src/commit.dart index 004a714..162a9cf 100644 --- a/lib/src/commit.dart +++ b/lib/src/commit.dart @@ -18,13 +18,13 @@ class Commit { libgit2.git_libgit2_init(); } - /// Initializes a new instance of [Commit] class from provided pointer to [Repository] - /// object in memory and pointer to [Oid] object in memory. + /// Initializes a new instance of [Commit] class from provided [Repository] + /// and [Oid] objects. /// /// Should be freed with `free()` to release allocated memory. - Commit.lookup(Pointer repo, Pointer oid) { + Commit.lookup(Repository repo, Oid oid) { libgit2.git_libgit2_init(); - _commitPointer = bindings.lookup(repo, oid); + _commitPointer = bindings.lookup(repo.pointer, oid.pointer); } /// Pointer to memory address for allocated commit object. diff --git a/lib/src/index.dart b/lib/src/index.dart index b3dfe1e..bd96dbb 100644 --- a/lib/src/index.dart +++ b/lib/src/index.dart @@ -96,13 +96,14 @@ class Index { late final Oid oid; late final Tree tree; 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) { tree = target; } else if (isValidShaHex(target as String)) { final repo = Repository(bindings.owner(_indexPointer)); oid = Oid.fromSHA(repo, target); - tree = Tree.lookup(repo.pointer, oid.pointer); + tree = Tree.lookup(repo, oid); } else { throw ArgumentError.value( '$target should be either Oid object, SHA hex string or Tree object'); diff --git a/lib/src/reference.dart b/lib/src/reference.dart index 3e5bbb3..5c80c9d 100644 --- a/lib/src/reference.dart +++ b/lib/src/reference.dart @@ -9,10 +9,13 @@ import 'util.dart'; class References { /// Initializes a new instance of the [References] class - /// from provided pointer to repository object in memory. - References(this._repoPointer); + /// from provided [Repository] object. + References(Repository repo) { + _repoPointer = repo.pointer; + } - final Pointer _repoPointer; + /// Pointer to memory address for allocated repository object. + late final Pointer _repoPointer; /// 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 /// standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog. Reference.createDirect({ - required Pointer repo, + required Repository repo, required String name, required Pointer oid, required bool force, String? logMessage, }) { - _repoPointer = repo; - _refPointer = bindings.createDirect(repo, name, oid, force, logMessage); + _repoPointer = repo.pointer; + _refPointer = bindings.createDirect( + repo.pointer, + name, + oid, + force, + logMessage, + ); } /// 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 /// set (HEAD, branches and remote-tracking branches) and it does not have a reflog. Reference.createSymbolic({ - required Pointer repo, + required Repository repo, required String name, required String target, required bool force, String? logMessage, }) { - _repoPointer = repo; - _refPointer = - bindings.createSymbolic(repo, name, target, force, logMessage); + _repoPointer = repo.pointer; + _refPointer = bindings.createSymbolic( + repo.pointer, + name, + target, + force, + logMessage, + ); } /// Pointer to memory address for allocated reference object. late Pointer _refPointer; + /// Pointer to memory address for allocated repository object. late final Pointer _repoPointer; /// Returns the type of the reference. @@ -138,7 +153,7 @@ class Reference { late final Oid oid; if (isValidShaHex(target)) { - final repo = Repository(bindings.owner(_refPointer)); + final repo = Repository(_repoPointer); oid = Oid.fromSHA(repo, target); } else { final ref = Reference( @@ -205,7 +220,7 @@ class Reference { bool get isTag => bindings.isTag(_refPointer); /// Returns the repository where a reference resides. - Pointer get owner => bindings.owner(_refPointer); + Repository get owner => Repository(bindings.owner(_refPointer)); /// Delete an existing reference. /// diff --git a/lib/src/reflog.dart b/lib/src/reflog.dart index be609ca..78d9140 100644 --- a/lib/src/reflog.dart +++ b/lib/src/reflog.dart @@ -14,7 +14,7 @@ class RefLog { final repo = ref.owner; final name = ref.name; - _reflogPointer = bindings.read(repo, name); + _reflogPointer = bindings.read(repo.pointer, name); } /// Pointer to memory address for allocated reflog object. diff --git a/lib/src/repository.dart b/lib/src/repository.dart index 45169ba..d36f11b 100644 --- a/lib/src/repository.dart +++ b/lib/src/repository.dart @@ -238,7 +238,7 @@ class Repository { Reference get head => Reference(_repoPointer, bindings.head(_repoPointer)); /// Returns [References] object. - References get references => References(_repoPointer); + References get references => References(this); /// Creates a new reference. /// @@ -278,7 +278,7 @@ class Repository { if (isDirect) { return Reference.createDirect( - repo: _repoPointer, + repo: this, name: name, oid: oid.pointer, force: force, @@ -286,7 +286,7 @@ class Repository { ); } else { return Reference.createSymbolic( - repo: _repoPointer, + repo: this, name: name, target: target as String, force: force, @@ -318,6 +318,6 @@ class Repository { } else { throw ArgumentError.value('$sha is not a valid sha hex string'); } - return Commit.lookup(_repoPointer, oid.pointer); + return Commit.lookup(this, oid); } } diff --git a/lib/src/tree.dart b/lib/src/tree.dart index fcac52f..1fb9c68 100644 --- a/lib/src/tree.dart +++ b/lib/src/tree.dart @@ -1,6 +1,9 @@ import 'dart:ffi'; +import 'package:libgit2dart/src/repository.dart'; + import 'bindings/libgit2_bindings.dart'; import 'bindings/tree.dart' as bindings; +import 'oid.dart'; import 'util.dart'; class Tree { @@ -11,12 +14,12 @@ class Tree { } /// 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. - Tree.lookup(Pointer repo, Pointer id) { + Tree.lookup(Repository repo, Oid id) { libgit2.git_libgit2_init(); - _treePointer = bindings.lookup(repo, id); + _treePointer = bindings.lookup(repo.pointer, id.pointer); } late final Pointer _treePointer;