feat: upgrade libgit2 to 1.4.0 (#45)

This commit is contained in:
Aleksey Kulikov 2022-02-16 16:57:52 +03:00 committed by GitHub
parent 7a067beeb9
commit d901d2e13f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 747 additions and 287 deletions

File diff suppressed because it is too large Load diff

View file

@ -143,12 +143,13 @@ int writtenCount(Pointer<git_packbuilder> pb) {
return libgit2.git_packbuilder_written(pb);
}
/// Get the packfile's hash.
/// Get the unique name for the resulting packfile.
///
/// A packfile's name is derived from the sorted hashing of all object names.
/// This is only correct after the packfile has been written.
Pointer<git_oid> hash(Pointer<git_packbuilder> pb) {
return libgit2.git_packbuilder_hash(pb);
/// The packfile's name is derived from the packfile's content. This is only
/// correct after the packfile has been written.
String name(Pointer<git_packbuilder> pb) {
final result = libgit2.git_packbuilder_name(pb);
return result == nullptr ? '' : result.cast<Utf8>().toDartString();
}
/// Set number of threads to spawn.

View file

@ -447,6 +447,14 @@ class GitMergeFileFlag {
/// Take extra time to find minimal diff.
static const diffMinimal = GitMergeFileFlag._(128, 'diffMinimal');
/// Create zdiff3 ("zealous diff3")-style files.
static const styleZdiff3 = GitMergeFileFlag._(256, 'styleZdiff3');
/// Do not produce file conflicts when common regions have
/// changed; keep the conflict markers in the file and accept
/// that as the merge result.
static const acceptConflicts = GitMergeFileFlag._(512, 'acceptConflicts');
static const List<GitMergeFileFlag> values = [
defaults,
styleMerge,
@ -457,6 +465,8 @@ class GitMergeFileFlag {
ignoreWhitespaceEOL,
diffPatience,
diffMinimal,
styleZdiff3,
acceptConflicts,
];
int get value => _value;
@ -554,6 +564,10 @@ class GitCheckout {
/// notifications; don't update the working directory or index.
static const dryRun = GitCheckout._(16777216, 'dryRun');
/// Include common ancestor data in zdiff3 format for conflicts.
static const conflictStyleZdiff3 =
GitCheckout._(33554432, 'conflictStyleZdiff3');
static const List<GitCheckout> values = [
none,
safe,
@ -575,7 +589,8 @@ class GitCheckout {
conflictStyleDiff3,
dontRemoveExisting,
dontWriteIndex,
dryRun
dryRun,
conflictStyleZdiff3,
];
int get value => _value;

View file

@ -90,11 +90,11 @@ class PackBuilder {
/// Number of objects the packbuilder has already written out.
int get writtenLength => bindings.writtenCount(_packbuilderPointer);
/// Packfile's hash.
/// Unique name for the resulting packfile.
///
/// A packfile's name is derived from the sorted hashing of all object names.
/// This is only correct after the packfile has been written.
Oid get hash => Oid(bindings.hash(_packbuilderPointer));
/// The packfile's name is derived from the packfile's content. This is only
/// correct after the packfile has been written.
String get name => bindings.name(_packbuilderPointer);
/// Sets and returns the number of threads to spawn.
///

View file

@ -8,7 +8,7 @@ import 'package:libgit2dart/src/bindings/libgit2_bindings.dart';
import 'package:path/path.dart' as path;
import 'package:pub_cache/pub_cache.dart';
const libgit2Version = '1.3.0';
const libgit2Version = '1.4.0';
final libDir = path.join('.dart_tool', 'libgit2');
String getLibName() {

View file

@ -20,6 +20,6 @@ target_link_libraries(${PLUGIN_NAME} PRIVATE PkgConfig::GTK)
# List of absolute paths to libraries that should be bundled with the plugin
set(libgit2dart_bundled_libraries
"${CMAKE_CURRENT_SOURCE_DIR}/libgit2-1.3.0.so"
"${CMAKE_CURRENT_SOURCE_DIR}/libgit2-1.4.0.so"
PARENT_SCOPE
)

Binary file not shown.

BIN
linux/libgit2-1.4.0.so Normal file

Binary file not shown.

Binary file not shown.

BIN
macos/libgit2-1.4.0.dylib Normal file

Binary file not shown.

View file

@ -15,7 +15,7 @@ Dart bindings to libgit2.
s.source = { :path => '.' }
s.source_files = 'Classes/**/*'
s.dependency 'FlutterMacOS'
s.vendored_libraries = 'libgit2-1.3.0.dylib'
s.vendored_libraries = 'libgit2-1.4.0.dylib'
s.platform = :osx, '10.11'
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }

View file

@ -95,25 +95,29 @@ void main() {
);
});
test('clones repository with provided keypair', () {
final keypair = Keypair(
username: 'git',
pubKey: p.join('test', 'assets', 'keys', 'id_rsa.pub'),
privateKey: p.join('test', 'assets', 'keys', 'id_rsa'),
passPhrase: 'empty',
);
final callbacks = Callbacks(credentials: keypair);
test(
'clones repository with provided keypair',
() {
final keypair = Keypair(
username: 'git',
pubKey: p.join('test', 'assets', 'keys', 'id_rsa.pub'),
privateKey: p.join('test', 'assets', 'keys', 'id_rsa'),
passPhrase: 'empty',
);
final callbacks = Callbacks(credentials: keypair);
final repo = Repository.clone(
url: 'https://github.com/libgit2/TestGitRepository',
localPath: cloneDir.path,
callbacks: callbacks,
);
final repo = Repository.clone(
url: 'ssh://git@github.com/libgit2/TestGitRepository',
localPath: cloneDir.path,
callbacks: callbacks,
);
expect(repo.isEmpty, false);
expect(repo.isEmpty, false);
repo.free();
});
repo.free();
},
testOn: '!linux',
);
test('throws when no credentials is provided', () {
expect(
@ -181,29 +185,33 @@ void main() {
);
});
test('clones repository with provided keypair from memory', () {
final pubKey = File(p.join('test', 'assets', 'keys', 'id_rsa.pub'))
.readAsStringSync();
final privateKey =
File(p.join('test', 'assets', 'keys', 'id_rsa')).readAsStringSync();
final keypair = KeypairFromMemory(
username: 'git',
pubKey: pubKey,
privateKey: privateKey,
passPhrase: 'empty',
);
final callbacks = Callbacks(credentials: keypair);
test(
'clones repository with provided keypair from memory',
() {
final pubKey = File(p.join('test', 'assets', 'keys', 'id_rsa.pub'))
.readAsStringSync();
final privateKey =
File(p.join('test', 'assets', 'keys', 'id_rsa')).readAsStringSync();
final keypair = KeypairFromMemory(
username: 'git',
pubKey: pubKey,
privateKey: privateKey,
passPhrase: 'empty',
);
final callbacks = Callbacks(credentials: keypair);
final repo = Repository.clone(
url: 'https://github.com/libgit2/TestGitRepository',
localPath: cloneDir.path,
callbacks: callbacks,
);
final repo = Repository.clone(
url: 'ssh://git@github.com/libgit2/TestGitRepository',
localPath: cloneDir.path,
callbacks: callbacks,
);
expect(repo.isEmpty, false);
expect(repo.isEmpty, false);
repo.free();
});
repo.free();
},
testOn: '!linux',
);
test('throws when provided keypair from memory is incorrect', () {
final pubKey = File(p.join('test', 'assets', 'keys', 'id_rsa.pub'))

View file

@ -165,7 +165,7 @@ void main() {
group('GitMergeFileFlag', () {
test('returns correct values', () {
const expected = [0, 1, 2, 4, 8, 16, 32, 64, 128];
const expected = [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512];
final actual = GitMergeFileFlag.values.map((e) => e.value).toList();
expect(actual, expected);
});
@ -202,6 +202,7 @@ void main() {
4194304,
8388608,
16777216,
33554432,
];
final actual = GitCheckout.values.map((e) => e.value).toList();
expect(actual, expected);

View file

@ -146,16 +146,16 @@ void main() {
packbuilder.free();
});
test('returns hash of packfile', () {
test('returns name of packfile', () {
final packbuilder = PackBuilder(repo);
final odb = repo.odb;
packbuilder.add(odb.objects[0]);
Directory(packDirPath).createSync();
expect(packbuilder.hash.sha, '0' * 40);
expect(packbuilder.name, isEmpty);
packbuilder.write(null);
expect(packbuilder.hash.sha, isNot('0' * 40));
expect(packbuilder.name, isNotEmpty);
packbuilder.free();
});

View file

@ -19,6 +19,6 @@ target_link_libraries(${PLUGIN_NAME} PRIVATE flutter flutter_wrapper_plugin)
# List of absolute paths to libraries that should be bundled with the plugin
set(libgit2dart_bundled_libraries
"${CMAKE_CURRENT_SOURCE_DIR}/libgit2-1.3.0.dll"
"${CMAKE_CURRENT_SOURCE_DIR}/libgit2-1.4.0.dll"
PARENT_SCOPE
)