test: disable repository owner verification for tests (#47)

This commit is contained in:
Aleksey Kulikov 2022-04-13 14:02:26 +03:00 committed by GitHub
parent f42f8a6e1b
commit 94c40f9a94
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 61 additions and 4 deletions

View file

@ -2480,17 +2480,39 @@ class Libgit2 {
/// @return 0 on success, <0 on failure
int git_libgit2_opts(
int option,
ffi.Pointer<ffi.Int8> out,
) {
return _git_libgit2_opts(
option,
out,
);
}
late final _git_libgit2_optsPtr =
_lookup<ffi.NativeFunction<ffi.Int32 Function(ffi.Int32)>>(
late final _git_libgit2_optsPtr = _lookup<
ffi.NativeFunction<
ffi.Int32 Function(
ffi.Int32, ffi.Pointer<ffi.Int8>)>>('git_libgit2_opts');
late final _git_libgit2_opts = _git_libgit2_optsPtr
.asFunction<int Function(int, ffi.Pointer<ffi.Int8>)>();
/// Set a library global option.
///
/// Look at [git_libgit2_opts]
int git_libgit2_opts_set(
int option,
int value,
) {
return _git_libgit2_opts_set(
option,
value,
);
}
late final _git_libgit2_opts_setPtr =
_lookup<ffi.NativeFunction<ffi.Int32 Function(ffi.Int32, ffi.Int32)>>(
'git_libgit2_opts');
late final _git_libgit2_opts =
_git_libgit2_optsPtr.asFunction<int Function(int)>();
late final _git_libgit2_opts_set =
_git_libgit2_opts_setPtr.asFunction<int Function(int, int)>();
/// Free the memory referred to by the git_buf.
///

View file

@ -2,6 +2,7 @@ import 'dart:ffi';
import 'package:ffi/ffi.dart';
import 'package:libgit2dart/libgit2dart.dart';
import 'package:libgit2dart/src/bindings/libgit2_bindings.dart';
import 'package:libgit2dart/src/util.dart';
class Libgit2 {
@ -33,4 +34,25 @@ class Libgit2 {
.where((e) => featuresInt & e.value == e.value)
.toSet();
}
/// Returns owner validation setting for repository directories.
static bool get ownerValidation {
libgit2.git_libgit2_init();
final out = calloc<Int8>();
libgit2.git_libgit2_opts(
git_libgit2_opt_t.GIT_OPT_GET_OWNER_VALIDATION,
out,
);
return out.value == 1 || false;
}
/// Sets owner validation setting for repository directories.
static set ownerValidation(bool value) {
libgit2.git_libgit2_init();
final valueC = value ? 1 : 0;
libgit2.git_libgit2_opts_set(
git_libgit2_opt_t.GIT_OPT_SET_OWNER_VALIDATION,
valueC,
);
}
}

View file

@ -1,7 +1,9 @@
import 'dart:io';
import 'package:libgit2dart/libgit2dart.dart';
import 'package:path/path.dart' as p;
Directory setupRepo(Directory repoDir) {
Libgit2.ownerValidation = false;
final tmpDir = Directory.systemTemp.createTempSync('testrepo');
copyRepo(from: repoDir, to: tmpDir);
return tmpDir;

View file

@ -14,5 +14,16 @@ void main() {
{GitFeature.threads, GitFeature.https, GitFeature.ssh, GitFeature.nsec},
);
});
test(
'sets and returns the owner validation setting for repository '
'directories', () {
final oldValue = Libgit2.ownerValidation;
Libgit2.ownerValidation = !oldValue;
expect(Libgit2.ownerValidation, equals(!oldValue));
// Set it back
Libgit2.ownerValidation = oldValue;
});
});
}