mirror of
https://github.com/SkinnyMind/libgit2dart.git
synced 2025-05-05 04:39:07 -04:00
feat(reset): add ability to pass checkout options to reset(...)
API method (#72)
This commit is contained in:
parent
5f829dd1ca
commit
4a36922129
3 changed files with 84 additions and 4 deletions
|
@ -17,13 +17,48 @@ import 'package:libgit2dart/src/util.dart';
|
|||
/// HARD reset will trigger a MIXED reset and the working directory will be
|
||||
/// replaced with the content of the index. (Untracked and ignored files will
|
||||
/// be left alone, however.)
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
void reset({
|
||||
required Pointer<git_repository> repoPointer,
|
||||
required Pointer<git_object> targetPointer,
|
||||
required int resetType,
|
||||
required Pointer<git_checkout_options> checkoutOptsPointer,
|
||||
int? strategy,
|
||||
String? checkoutDirectory,
|
||||
List<String>? pathspec,
|
||||
}) {
|
||||
libgit2.git_reset(repoPointer, targetPointer, resetType, checkoutOptsPointer);
|
||||
final opts = calloc<git_checkout_options>();
|
||||
libgit2.git_checkout_options_init(opts, GIT_CHECKOUT_OPTIONS_VERSION);
|
||||
|
||||
if (strategy != null) {
|
||||
opts.ref.checkout_strategy = strategy;
|
||||
}
|
||||
if (checkoutDirectory != null) {
|
||||
opts.ref.target_directory = checkoutDirectory.toChar();
|
||||
}
|
||||
var pathPointers = <Pointer<Char>>[];
|
||||
Pointer<Pointer<Char>> strArray = nullptr;
|
||||
if (pathspec != null) {
|
||||
pathPointers = pathspec.map((e) => e.toChar()).toList();
|
||||
strArray = calloc(pathspec.length);
|
||||
for (var i = 0; i < pathspec.length; i++) {
|
||||
strArray[i] = pathPointers[i];
|
||||
}
|
||||
opts.ref.paths.strings = strArray;
|
||||
opts.ref.paths.count = pathspec.length;
|
||||
}
|
||||
|
||||
final error = libgit2.git_reset(repoPointer, targetPointer, resetType, opts);
|
||||
|
||||
for (final p in pathPointers) {
|
||||
calloc.free(p);
|
||||
}
|
||||
calloc.free(strArray);
|
||||
calloc.free(opts);
|
||||
|
||||
if (error < 0) {
|
||||
throw LibGit2Error(libgit2.git_error_last());
|
||||
}
|
||||
}
|
||||
|
||||
/// Updates some entries in the index from the target commit tree.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue