diff --git a/lib/src/bindings/config.dart b/lib/src/bindings/config.dart index 10d0ec8..c08b523 100644 --- a/lib/src/bindings/config.dart +++ b/lib/src/bindings/config.dart @@ -251,7 +251,7 @@ List getMultivarValue( /// Set the value of a multivar config variable in the config file with the /// highest level (usually the local one). /// -/// The regular expression is applied case-sensitively on the value. +/// The regexp is applied case-sensitively on the value. void setMultivarValue( Pointer cfg, String variable, @@ -267,3 +267,20 @@ void setMultivarValue( calloc.free(regexpC); calloc.free(valueC); } + +/// Deletes one or several values from a multivar in the config file +/// with the highest level (usually the local one). +/// +/// The regexp is applied case-sensitively on the value. +void deleteMultivar( + Pointer cfg, + String variable, + String regexp, +) { + final name = variable.toNativeUtf8().cast(); + final regexpC = regexp.toNativeUtf8().cast(); + libgit2.git_config_delete_multivar(cfg, name, regexpC); + + calloc.free(name); + calloc.free(regexpC); +} diff --git a/lib/src/config.dart b/lib/src/config.dart index 94df69d..9d25ee0 100644 --- a/lib/src/config.dart +++ b/lib/src/config.dart @@ -105,12 +105,12 @@ class Config { /// Pointer to memory address for allocated config object. late Pointer> configPointer; - /// Returns map of all the config variables and their values + /// Returns map of all the config variables and their values. Map getEntries() { return config.getEntries(configPointer.value); } - /// Returns the value of config [variable] + /// Returns the value of config [variable]. String getValue(String variable) { try { return config.getValue(configPointer.value, variable); @@ -119,7 +119,7 @@ class Config { } } - /// Sets the [value] of config [variable] + /// Sets the [value] of config [variable]. void setValue(String variable, dynamic value) { try { if (value.runtimeType == bool) { @@ -158,11 +158,20 @@ class Config { /// highest level (usually the local one). /// /// The [regexp] is applied case-sensitively on the value. - /// Empty [regexp] sets [value] for all values of a multivar [variable] + /// Empty [regexp] sets [value] for all values of a multivar [variable]. void setMultivarValue(String variable, String regexp, String value) { config.setMultivarValue(configPointer.value, variable, regexp, value); } + /// Deletes one or several values from a multivar [variable] in the config file + /// with the highest level (usually the local one). + /// + /// The [regexp] is applied case-sensitively on the value. + /// Empty [regexp] deletes all values of a multivar [variable]. + void deleteMultivar(String variable, String regexp) { + config.deleteMultivar(configPointer.value, variable, regexp); + } + /// Releases memory allocated for config object. void close() { calloc.free(configPointer); diff --git a/test/config_test.dart b/test/config_test.dart index 8f84b0d..94d2e3a 100644 --- a/test/config_test.dart +++ b/test/config_test.dart @@ -80,6 +80,7 @@ void main() { group('deleteEntry()', () { test('successfully deletes entry', () { + expect(config.getValue('core.bare'), equals('false')); config.deleteEntry('core.bare'); final entries = config.getEntries(); expect(entries['core.bare'], isNull); @@ -133,6 +134,37 @@ void main() { expect(multivarValues.length, equals(2)); }); }); + + group('deleteMultivar()', () { + test('successfully deletes value of a multivar', () { + expect( + config.getMultivarValue('core.gitproxy', regexp: 'for kernel.org\$'), + ['proxy-command for kernel.org'], + ); + + config.deleteMultivar('core.gitproxy', 'for kernel.org\$'); + + expect( + config.getMultivarValue('core.gitproxy', regexp: 'for kernel.org\$'), + [], + ); + }); + + test('successfully deletes all values of a multivar when regexp is empty', + () { + expect( + config.getMultivarValue('core.gitproxy'), + [ + 'proxy-command for kernel.org', + 'default-proxy', + ], + ); + + config.deleteMultivar('core.gitproxy', ''); + + expect(config.getMultivarValue('core.gitproxy'), []); + }); + }); }); ; }