Compare commits

...

3 commits

Author SHA1 Message Date
Aleksey Kulikov
aa74c46a12 chore: v1.1.2 2022-06-09 18:02:49 +03:00
Aleksey Kulikov
6be34fe9a0
fix: lookup library in Flutter's .pub_cache folder (#66) 2022-06-09 17:56:27 +03:00
Aleksey Kulikov
48e2240c73
feat(revwalk): add ability to limit number of commits to walk (#65) 2022-06-09 17:15:55 +03:00
7 changed files with 54 additions and 6 deletions

View file

@ -1,3 +1,9 @@
## 1.1.2
- fix: lookup library in Flutter's .pub_cache folder
- feat: add ability to limit number of commits to walk in revision walk
## 1.1.1 ## 1.1.1
- fix: lookup library in correct locations - fix: lookup library in correct locations

View file

@ -145,11 +145,12 @@ void pushRange({
List<Pointer<git_commit>> walk({ List<Pointer<git_commit>> walk({
required Pointer<git_repository> repoPointer, required Pointer<git_repository> repoPointer,
required Pointer<git_revwalk> walkerPointer, required Pointer<git_revwalk> walkerPointer,
required int limit,
}) { }) {
final result = <Pointer<git_commit>>[]; final result = <Pointer<git_commit>>[];
var error = 0; var error = 0;
while (error == 0) { void next() {
final oid = calloc<git_oid>(); final oid = calloc<git_oid>();
error = libgit2.git_revwalk_next(oid, walkerPointer); error = libgit2.git_revwalk_next(oid, walkerPointer);
if (error == 0) { if (error == 0) {
@ -158,10 +159,21 @@ List<Pointer<git_commit>> walk({
oidPointer: oid, oidPointer: oid,
); );
result.add(commit); result.add(commit);
calloc.free(oid);
} else { } else {
break; calloc.free(oid);
return;
}
}
if (limit == 0) {
while (error == 0) {
next();
}
} else {
for (var i = 0; i < limit; i++) {
next();
} }
calloc.free(oid);
} }
return result; return result;

View file

@ -19,11 +19,15 @@ class RevWalk {
/// Returns the list of commits from the revision walk. /// Returns the list of commits from the revision walk.
/// ///
/// [limit] is optional number of commits to walk (by default walks through
/// all of the commits pushed onto the walker).
///
/// Default sorting is reverse chronological order (default in git). /// Default sorting is reverse chronological order (default in git).
List<Commit> walk() { List<Commit> walk({int limit = 0}) {
final pointers = bindings.walk( final pointers = bindings.walk(
repoPointer: bindings.repository(_revWalkPointer), repoPointer: bindings.repository(_revWalkPointer),
walkerPointer: _revWalkPointer, walkerPointer: _revWalkPointer,
limit: limit,
); );
return pointers.map((e) => Commit(e)).toList(); return pointers.map((e) => Commit(e)).toList();

View file

@ -6,6 +6,7 @@ import 'dart:io';
import 'package:libgit2dart/src/bindings/libgit2_bindings.dart'; import 'package:libgit2dart/src/bindings/libgit2_bindings.dart';
import 'package:libgit2dart/src/bindings/libgit2_opts_bindings.dart'; import 'package:libgit2dart/src/bindings/libgit2_opts_bindings.dart';
import 'package:path/path.dart' as path; import 'package:path/path.dart' as path;
import 'package:pub_cache/pub_cache.dart';
const libgit2Version = '1.4.3'; const libgit2Version = '1.4.3';
final libDir = path.join('.dart_tool', 'libgit2'); final libDir = path.join('.dart_tool', 'libgit2');
@ -52,6 +53,21 @@ String? _resolveLibPath(String name) {
libPath = path.join(path.dirname(Platform.resolvedExecutable), 'lib', name); libPath = path.join(path.dirname(Platform.resolvedExecutable), 'lib', name);
if (_doesFileExist(libPath)) return libPath; if (_doesFileExist(libPath)) return libPath;
String checkCache(PubCache pubCache) {
final pubCacheDir =
pubCache.getLatestVersion('libgit2dart')!.resolve()!.location;
return path.join(pubCacheDir.path, Platform.operatingSystem, name);
}
// If lib is in Flutter's '.pub_cache' folder.
final env = Platform.environment;
if (env.containsKey('FLUTTER_ROOT')) {
final flutterPubCache =
PubCache(Directory(path.join(env['FLUTTER_ROOT']!, '.pub-cache')));
libPath = checkCache(flutterPubCache);
if (_doesFileExist(libPath)) return libPath;
}
return null; return null;
} }

View file

@ -4,7 +4,7 @@
# #
Pod::Spec.new do |s| Pod::Spec.new do |s|
s.name = 'libgit2dart' s.name = 'libgit2dart'
s.version = '1.1.1' s.version = '1.1.2'
s.summary = 'Dart bindings to libgit2.' s.summary = 'Dart bindings to libgit2.'
s.description = <<-DESC s.description = <<-DESC
Dart bindings to libgit2. Dart bindings to libgit2.

View file

@ -2,7 +2,7 @@ name: libgit2dart
description: Dart bindings to libgit2, provides ability to use libgit2 library in Dart and Flutter. description: Dart bindings to libgit2, provides ability to use libgit2 library in Dart and Flutter.
version: 1.1.1 version: 1.1.2
homepage: https://github.com/SkinnyMind/libgit2dart homepage: https://github.com/SkinnyMind/libgit2dart

View file

@ -50,6 +50,16 @@ void main() {
} }
}); });
test('walks only number of commits provided with limit', () {
final walker = RevWalk(repo);
walker.push(repo[log.first]);
final commits = walker.walk(limit: 1);
expect(commits.length, 1);
expect(commits[0].oid.sha, log[0]);
});
test('returns list of commits with reverse sorting', () { test('returns list of commits with reverse sorting', () {
final walker = RevWalk(repo); final walker = RevWalk(repo);