feat(reset): add ability to remove entries in index (#57)

This commit is contained in:
Aleksey Kulikov 2022-05-18 15:49:08 +03:00 committed by GitHub
parent 16c42b9b2d
commit faddaa52e2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 9 deletions

View file

@ -28,12 +28,15 @@ void reset({
/// Updates some entries in the index from the target commit tree.
///
/// The scope of the updated entries is determined by the paths being passed in
/// the pathspec parameters.
/// the [pathspec] parameters.
///
/// Passing a null [targetPointer] will result in removing entries in the index
/// matching the provided [pathspec]s.
///
/// Throws a [LibGit2Error] if error occured.
void resetDefault({
required Pointer<git_repository> repoPointer,
required Pointer<git_object> targetPointer,
required Pointer<git_object>? targetPointer,
required List<String> pathspec,
}) {
final pathspecC = calloc<git_strarray>();
@ -50,7 +53,7 @@ void resetDefault({
final error = libgit2.git_reset_default(
repoPointer,
targetPointer,
targetPointer ?? nullptr,
pathspecC,
);

View file

@ -578,13 +578,19 @@ class Repository extends Equatable {
/// The scope of the updated entries is determined by the paths being passed
/// in the [pathspec].
///
/// Passing a null [oid] will result in removing entries in the index
/// matching the provided [pathspec]s.
///
/// Throws a [LibGit2Error] if error occured.
void resetDefault({required Oid oid, required List<String> pathspec}) {
final object = object_bindings.lookup(
repoPointer: _repoPointer,
oidPointer: oid.pointer,
type: GitObject.commit.value,
);
void resetDefault({required Oid? oid, required List<String> pathspec}) {
Pointer<git_object>? object;
if (oid != null) {
object = object_bindings.lookup(
repoPointer: _repoPointer,
oidPointer: oid.pointer,
type: GitObject.commit.value,
);
}
reset_bindings.resetDefault(
repoPointer: _repoPointer,

View file

@ -61,6 +61,17 @@ void main() {
expect(repo.status['feature_file'], {GitStatus.wtModified});
});
test('removes entry in the index when null oid is provided', () {
const fileName = 'new_file.txt';
File(p.join(tmpDir.path, fileName)).createSync();
repo.index.add(fileName);
expect(repo.status[fileName], {GitStatus.indexNew});
repo.resetDefault(oid: null, pathspec: [fileName]);
expect(repo.status[fileName], {GitStatus.wtNew});
});
test('throws when pathspec list is empty', () {
expect(
() => repo.resetDefault(oid: repo.head.target, pathspec: []),