mirror of
https://github.com/SkinnyMind/libgit2dart.git
synced 2025-05-05 04:39:07 -04:00
refactor(repository)!: move descendantOf()
method into Commit
This commit is contained in:
parent
9918ab0905
commit
eb321f052f
4 changed files with 21 additions and 47 deletions
|
@ -2,15 +2,12 @@ import 'dart:ffi';
|
||||||
|
|
||||||
import 'package:ffi/ffi.dart';
|
import 'package:ffi/ffi.dart';
|
||||||
import 'package:libgit2dart/src/bindings/libgit2_bindings.dart';
|
import 'package:libgit2dart/src/bindings/libgit2_bindings.dart';
|
||||||
import 'package:libgit2dart/src/error.dart';
|
|
||||||
import 'package:libgit2dart/src/util.dart';
|
import 'package:libgit2dart/src/util.dart';
|
||||||
|
|
||||||
/// Determine if a commit is the descendant of another commit.
|
/// Determine if a commit is the descendant of another commit.
|
||||||
///
|
///
|
||||||
/// Note that a commit is not considered a descendant of itself, in contrast to
|
/// Note that a commit is not considered a descendant of itself, in contrast to
|
||||||
/// `git merge-base --is-ancestor`.
|
/// `git merge-base --is-ancestor`.
|
||||||
///
|
|
||||||
/// Throws a [LibGit2Error] if error occured.
|
|
||||||
bool descendantOf({
|
bool descendantOf({
|
||||||
required Pointer<git_repository> repoPointer,
|
required Pointer<git_repository> repoPointer,
|
||||||
required Pointer<git_oid> commitPointer,
|
required Pointer<git_oid> commitPointer,
|
||||||
|
@ -22,11 +19,7 @@ bool descendantOf({
|
||||||
ancestorPointer,
|
ancestorPointer,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (result < 0) {
|
|
||||||
throw LibGit2Error(libgit2.git_error_last());
|
|
||||||
} else {
|
|
||||||
return result == 1 || false;
|
return result == 1 || false;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Count the number of unique commits between two commit objects.
|
/// Count the number of unique commits between two commit objects.
|
||||||
|
|
|
@ -2,6 +2,7 @@ import 'dart:ffi';
|
||||||
|
|
||||||
import 'package:libgit2dart/libgit2dart.dart';
|
import 'package:libgit2dart/libgit2dart.dart';
|
||||||
import 'package:libgit2dart/src/bindings/commit.dart' as bindings;
|
import 'package:libgit2dart/src/bindings/commit.dart' as bindings;
|
||||||
|
import 'package:libgit2dart/src/bindings/graph.dart' as graph_bindings;
|
||||||
import 'package:libgit2dart/src/bindings/libgit2_bindings.dart';
|
import 'package:libgit2dart/src/bindings/libgit2_bindings.dart';
|
||||||
|
|
||||||
class Commit {
|
class Commit {
|
||||||
|
@ -309,6 +310,18 @@ class Commit {
|
||||||
return Commit(bindings.nthGenAncestor(commitPointer: _commitPointer, n: n));
|
return Commit(bindings.nthGenAncestor(commitPointer: _commitPointer, n: n));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Checks if commit is the descendant of another [ancestor] commit.
|
||||||
|
///
|
||||||
|
/// Note that a commit is not considered a descendant of itself, in contrast
|
||||||
|
/// to `git merge-base --is-ancestor`.
|
||||||
|
bool descendantOf(Commit ancestor) {
|
||||||
|
return graph_bindings.descendantOf(
|
||||||
|
repoPointer: bindings.owner(_commitPointer),
|
||||||
|
commitPointer: bindings.id(_commitPointer),
|
||||||
|
ancestorPointer: bindings.id(ancestor.pointer),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// Creates an in-memory copy of a commit.
|
/// Creates an in-memory copy of a commit.
|
||||||
///
|
///
|
||||||
/// **IMPORTANT**: Should be freed to release allocated memory.
|
/// **IMPORTANT**: Should be freed to release allocated memory.
|
||||||
|
|
|
@ -617,21 +617,6 @@ class Repository {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks if a provided [commit] is the descendant of another [ancestor]
|
|
||||||
/// commit.
|
|
||||||
///
|
|
||||||
/// Note that a commit is not considered a descendant of itself, in contrast
|
|
||||||
/// to `git merge-base --is-ancestor`.
|
|
||||||
///
|
|
||||||
/// Throws a [LibGit2Error] if error occured.
|
|
||||||
bool descendantOf({required Oid commit, required Oid ancestor}) {
|
|
||||||
return graph_bindings.descendantOf(
|
|
||||||
repoPointer: _repoPointer,
|
|
||||||
commitPointer: commit.pointer,
|
|
||||||
ancestorPointer: ancestor.pointer,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns list with the `ahead` and `behind` number of unique commits
|
/// Returns list with the `ahead` and `behind` number of unique commits
|
||||||
/// respectively.
|
/// respectively.
|
||||||
///
|
///
|
||||||
|
|
|
@ -250,32 +250,15 @@ void main() {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('checks if commit is a descendant of another commit', () {
|
test('checks if commit is a descendant of another commit', () {
|
||||||
final commit1 = repo['821ed6e8'];
|
final commit1 = Commit.lookup(repo: repo, oid: repo['821ed6e8']);
|
||||||
final commit2 = repo['78b8bf12'];
|
final commit2 = Commit.lookup(repo: repo, oid: repo['78b8bf12']);
|
||||||
|
|
||||||
expect(
|
expect(commit1.descendantOf(commit2), true);
|
||||||
repo.descendantOf(commit: commit1, ancestor: commit2),
|
expect(commit1.descendantOf(commit1), false);
|
||||||
true,
|
expect(commit2.descendantOf(commit1), false);
|
||||||
);
|
|
||||||
expect(
|
|
||||||
repo.descendantOf(commit: commit1, ancestor: commit1),
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
expect(
|
|
||||||
repo.descendantOf(commit: commit2, ancestor: commit1),
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('throws when trying to check if commit is descendant and error occurs',
|
commit1.free();
|
||||||
() {
|
commit2.free();
|
||||||
final commit1 = repo['821ed6e8'];
|
|
||||||
final commit2 = repo['78b8bf12'];
|
|
||||||
final nullRepo = Repository(nullptr);
|
|
||||||
expect(
|
|
||||||
() => nullRepo.descendantOf(commit: commit1, ancestor: commit2),
|
|
||||||
throwsA(isA<LibGit2Error>()),
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('returns number of ahead behind commits', () {
|
test('returns number of ahead behind commits', () {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue