diff --git a/lib/src/bindings/config.dart b/lib/src/bindings/config.dart index 02715af..8c9135c 100644 --- a/lib/src/bindings/config.dart +++ b/lib/src/bindings/config.dart @@ -233,11 +233,22 @@ Map getVariables(Pointer cfg) { return entries; } +/// Delete a config variable from the config file with the highest level +/// (usually the local one). +/// +/// Throws a [LibGit2Error] if error occured. +void deleteVariable(Pointer cfg, String name) { + final nameC = name.toNativeUtf8().cast(); + final error = libgit2.git_config_delete_entry(cfg, nameC); + calloc.free(nameC); + + if (error < 0) { + throw LibGit2Error(libgit2.git_error_last()); + } +} + /// Iterate over the values of multivar // TODO /// Multivars variables get/set -// TODO - -/// Deletes a config variable // TODO \ No newline at end of file diff --git a/lib/src/config.dart b/lib/src/config.dart index 6858077..30f43c7 100644 --- a/lib/src/config.dart +++ b/lib/src/config.dart @@ -129,6 +129,19 @@ class Config { } } + /// Deletes variable from the config file with the highest level + /// (usually the local one). + /// + /// Throws a [LibGit2Error] if error occured. + void deleteVariable(String key) { + try { + config.deleteVariable(configPointer.value, key); + variables = config.getVariables(configPointer.value); + } catch (e) { + rethrow; + } + } + /// Releases memory allocated for config object. void close() { calloc.free(configPointer); diff --git a/test/config_test.dart b/test/config_test.dart index 8dff9dc..156eda7 100644 --- a/test/config_test.dart +++ b/test/config_test.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:test/test.dart'; import 'package:libgit2dart/src/util.dart'; import 'package:libgit2dart/src/config.dart'; +import 'package:libgit2dart/src/error.dart'; void main() { final tmpDir = Directory.systemTemp.path; @@ -51,6 +52,18 @@ void main() { config.setVariable('remote.origin.url', 'updated'); expect(config.variables['remote.origin.url'], equals('updated')); }); + + test('deletes variable', () { + config.deleteVariable('core.bare'); + expect(config.variables['core.bare'], isNull); + }); + + test('throws on deleting non existing variable', () { + expect( + () => config.deleteVariable('not.there'), + throwsA(isA()), + ); + }); }); ; }