mirror of
https://github.com/SkinnyMind/libgit2dart.git
synced 2025-05-04 20:29:08 -04:00
refactor!: use Finalizer
to automatically free allocated memory for objects (#48)
BREAKING CHANGE: signature change for remote and repository callbacks during repository clone operation.
This commit is contained in:
parent
94c40f9a94
commit
a3213a88a2
103 changed files with 2278 additions and 2595 deletions
|
@ -30,9 +30,7 @@ void main() {
|
|||
|
||||
group('RevWalk', () {
|
||||
test('initializes walker', () {
|
||||
final walker = RevWalk(repo);
|
||||
expect(walker, isA<RevWalk>());
|
||||
walker.free();
|
||||
expect(RevWalk(repo), isA<RevWalk>());
|
||||
});
|
||||
|
||||
test('throws when trying to initialize and error occurs', () {
|
||||
|
@ -44,55 +42,42 @@ void main() {
|
|||
|
||||
test('returns list of commits with default sorting', () {
|
||||
final walker = RevWalk(repo);
|
||||
final start = Oid.fromSHA(repo: repo, sha: log.first);
|
||||
|
||||
walker.push(start);
|
||||
walker.push(repo[log.first]);
|
||||
final commits = walker.walk();
|
||||
|
||||
for (var i = 0; i < commits.length; i++) {
|
||||
expect(commits[i].oid.sha, log[i]);
|
||||
commits[i].free();
|
||||
}
|
||||
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('returns list of commits with reverse sorting', () {
|
||||
final walker = RevWalk(repo);
|
||||
final start = Oid.fromSHA(repo: repo, sha: log.first);
|
||||
|
||||
walker.push(start);
|
||||
walker.push(repo[log.first]);
|
||||
walker.sorting({GitSort.reverse});
|
||||
final commits = walker.walk();
|
||||
|
||||
for (var i = 0; i < commits.length; i++) {
|
||||
expect(commits[i].oid.sha, log.reversed.toList()[i]);
|
||||
commits[i].free();
|
||||
}
|
||||
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('changes sorting', () {
|
||||
final walker = RevWalk(repo);
|
||||
final start = Oid.fromSHA(repo: repo, sha: log.first);
|
||||
|
||||
walker.push(start);
|
||||
walker.push(repo[log.first]);
|
||||
final timeSortedCommits = walker.walk();
|
||||
|
||||
for (var i = 0; i < timeSortedCommits.length; i++) {
|
||||
expect(timeSortedCommits[i].oid.sha, log[i]);
|
||||
timeSortedCommits[i].free();
|
||||
}
|
||||
|
||||
walker.sorting({GitSort.time, GitSort.reverse});
|
||||
final reverseSortedCommits = walker.walk();
|
||||
for (var i = 0; i < reverseSortedCommits.length; i++) {
|
||||
expect(reverseSortedCommits[i].oid.sha, log.reversed.toList()[i]);
|
||||
reverseSortedCommits[i].free();
|
||||
}
|
||||
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('adds matching references for traversal with provided glob', () {
|
||||
|
@ -101,11 +86,6 @@ void main() {
|
|||
walker.pushGlob('heads');
|
||||
final commits = walker.walk();
|
||||
expect(commits.length, 7);
|
||||
|
||||
for (final c in commits) {
|
||||
c.free();
|
||||
}
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test("adds repository's head for traversal", () {
|
||||
|
@ -114,11 +94,6 @@ void main() {
|
|||
walker.pushHead();
|
||||
final commits = walker.walk();
|
||||
expect(commits.length, 6);
|
||||
|
||||
for (final c in commits) {
|
||||
c.free();
|
||||
}
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('adds reference for traversal with provided name', () {
|
||||
|
@ -127,23 +102,14 @@ void main() {
|
|||
walker.pushReference('refs/heads/master');
|
||||
final commits = walker.walk();
|
||||
expect(commits.length, 6);
|
||||
|
||||
for (final c in commits) {
|
||||
c.free();
|
||||
}
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('throws when trying to add reference for traversal with invalid name',
|
||||
() {
|
||||
final walker = RevWalk(repo);
|
||||
|
||||
expect(
|
||||
() => walker.pushReference('invalid'),
|
||||
() => RevWalk(repo).pushReference('invalid'),
|
||||
throwsA(isA<LibGit2Error>()),
|
||||
);
|
||||
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('adds range for traversal', () {
|
||||
|
@ -152,22 +118,13 @@ void main() {
|
|||
walker.pushRange('HEAD..@{-1}');
|
||||
final commits = walker.walk();
|
||||
expect(commits.length, 1);
|
||||
|
||||
for (final c in commits) {
|
||||
c.free();
|
||||
}
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('throws when trying to add invalid range for traversal', () {
|
||||
final walker = RevWalk(repo);
|
||||
|
||||
expect(
|
||||
() => walker.pushRange('HEAD..invalid'),
|
||||
() => RevWalk(repo).pushRange('HEAD..invalid'),
|
||||
throwsA(isA<LibGit2Error>()),
|
||||
);
|
||||
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('hides commit and its ancestors', () {
|
||||
|
@ -178,22 +135,13 @@ void main() {
|
|||
final commits = walker.walk();
|
||||
|
||||
expect(commits.length, 2);
|
||||
|
||||
for (final c in commits) {
|
||||
c.free();
|
||||
}
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('throws when trying to hide commit oid and error occurs', () {
|
||||
final walker = RevWalk(repo);
|
||||
|
||||
expect(
|
||||
() => walker.hide(repo['0' * 40]),
|
||||
() => RevWalk(repo).hide(repo['0' * 40]),
|
||||
throwsA(isA<LibGit2Error>()),
|
||||
);
|
||||
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('hides oids of references for provided glob pattern', () {
|
||||
|
@ -207,105 +155,72 @@ void main() {
|
|||
walker.hideGlob('*master');
|
||||
final hiddenCommits = walker.walk();
|
||||
expect(hiddenCommits.length, 1);
|
||||
|
||||
hiddenCommits[0].free();
|
||||
for (final c in commits) {
|
||||
c.free();
|
||||
}
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('hides head', () {
|
||||
final head = repo.head;
|
||||
final walker = RevWalk(repo);
|
||||
|
||||
walker.push(head.target);
|
||||
walker.push(repo.head.target);
|
||||
final commits = walker.walk();
|
||||
expect(commits.length, 6);
|
||||
|
||||
walker.push(head.target);
|
||||
walker.push(repo.head.target);
|
||||
walker.hideHead();
|
||||
final hiddenCommits = walker.walk();
|
||||
expect(hiddenCommits.length, 0);
|
||||
|
||||
for (final c in commits) {
|
||||
c.free();
|
||||
}
|
||||
head.free();
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('hides oids of reference with provided name', () {
|
||||
final head = repo.head;
|
||||
final walker = RevWalk(repo);
|
||||
|
||||
walker.push(head.target);
|
||||
walker.push(repo.head.target);
|
||||
final commits = walker.walk();
|
||||
expect(commits.length, 6);
|
||||
|
||||
walker.push(head.target);
|
||||
walker.push(repo.head.target);
|
||||
walker.hideReference('refs/heads/master');
|
||||
final hiddenCommits = walker.walk();
|
||||
expect(hiddenCommits.length, 0);
|
||||
|
||||
for (final c in commits) {
|
||||
c.free();
|
||||
}
|
||||
head.free();
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('throws when trying to hide oids of reference with invalid name', () {
|
||||
final walker = RevWalk(repo);
|
||||
|
||||
expect(
|
||||
() => walker.hideReference('invalid'),
|
||||
() => RevWalk(repo).hideReference('invalid'),
|
||||
throwsA(isA<LibGit2Error>()),
|
||||
);
|
||||
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('resets walker', () {
|
||||
final walker = RevWalk(repo);
|
||||
final start = Oid.fromSHA(repo: repo, sha: log.first);
|
||||
|
||||
walker.push(start);
|
||||
walker.push(repo[log.first]);
|
||||
walker.reset();
|
||||
final commits = walker.walk();
|
||||
|
||||
expect(commits, <Commit>[]);
|
||||
|
||||
walker.free();
|
||||
});
|
||||
|
||||
test('simplifies walker by enqueuing only first parent for each commit',
|
||||
() {
|
||||
final walker = RevWalk(repo);
|
||||
final start = Oid.fromSHA(repo: repo, sha: log.first);
|
||||
|
||||
walker.push(start);
|
||||
walker.push(repo[log.first]);
|
||||
walker.simplifyFirstParent();
|
||||
final commits = walker.walk();
|
||||
|
||||
for (var i = 0; i < commits.length; i++) {
|
||||
expect(commits.length, 3);
|
||||
commits[i].free();
|
||||
}
|
||||
|
||||
walker.free();
|
||||
expect(commits.length, 3);
|
||||
});
|
||||
|
||||
test('throws when trying to add new root for traversal and error occurs',
|
||||
() {
|
||||
final walker = RevWalk(repo);
|
||||
|
||||
expect(
|
||||
() => walker.push(repo['0' * 40]),
|
||||
() => RevWalk(repo).push(repo['0' * 40]),
|
||||
throwsA(isA<LibGit2Error>()),
|
||||
);
|
||||
});
|
||||
|
||||
walker.free();
|
||||
test('manually releases allocated memory', () {
|
||||
expect(() => RevWalk(repo).free(), returnsNormally);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue