We are proud to release Elektra 0.9.8.
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database. For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
docker pull elektra/elektra
docker run -it elektra/elektra
kdb
now prohibits write operations on cascading keys that miss a corresponding existing key. See the details in the Tools
section below and the new subsection on cascading writes in the tutorial on cascading keys for further information. (Alexander Firbas)We have created a version of Redshift that uses Elektra for configuration management!
We removed and refactored Redshift's code for loading configuration files, parsing CLI options and validating configuration to use Elektra. Redshift with Elektra has about 700 fewer lines of code (-16%) and is a great example of what Elektra is all about: More applications with less code for configuration management!
To test it, take a look at our PR Refactor to use Elektra and follow the instructions provided in CONTRIBUTING.md.
Refactoring Redshift to use Elektra brings the following benefits:
*.c
and *.h
files exclusive of files automatically generated by Elektra).Redshift with Elektra uses the high-level API.
We have made a large number of improvements to the high-level API in the course of refactoring Redshift. The highlights are:
More improvements and details are explained in later sections of these release notes.
Thanks to Klemens Böswirth, Markus Raab and Tobias Schubert!
We are now shipping experimental releases for Windows 32- and 64-bit! They can be downloaded here.
A big success is that Redshift already works with Elektra under Windows.
The following section lists news about the plugins we updated in this release.
gopts
plugin now includes deeply nested options and arguments in the generated help message. (Tobias Schubert @qwepoizt)gopts
are now correctly reported. (Klemens Böswirth)gopts_win32.h
. (Tobias Schubert @qwepoizt)range
plugin now uses metakey type
as fallback, if check/type
is not specified. (Tobias Schubert @qwepoizt)range
now treats all validation problems as warnings during kdbGet(). (Tobias Schubert @qwepoizt)spec
plugin now runs before other postgetstorage
plugins, so that validation can happen during kdbGet
as well.
This is especially relevant in combination with gopts
. (Klemens Böswirth)ELEKTRA_PLUGIN_COMMIT
export. (Tobias Schubert @qwepoizt)toml
plugin now supports all four kinds of strings via the tomltype
metadata.
The plugin also remembers which kind was used and handles escape sequences properly, instead of always
converting to basic strings. For details take a look at the updated README (Klemens Böswirth)comment/#/space
metakey is now used correctly to store the actual whitespace characters from the file,
instead of a number. (Klemens Böswirth)The text below summarizes updates to the C (and C++)-based libraries of Elektra.
ksSearch
ksSearchInternal
is now static. Use ksSearch
instead.(Michael Tucek)
ksNeedSync
function. (Mihael Pranjić)sprintf
by snprintf
and fix out of bounds array access in markdownlinkconverter. (Mihael Pranjić)mount
ed and spec-mount
ed. (Tobias Schubert @qwepoizt)Bindings allow you to utilize Elektra using various programming languages. This section keeps you up-to-date with the multi-language support provided by Elektra.
Key::createNameless
to Key::create
. To migrate to this change, just update calling code to use the new method name.KDB::open(Key)
KDB::open(KeySet, Key)
KDB::close(Key)
KDB::get(Key)
KDB::get(KeySet, Key)
KDB::set(KeySet, Key)
, better explaining the relevance of the second argument parentKey
KeySet::remove(Key)
and KeySet::remove(String)
KeySet::lookup(Key, int)
and KeySet::lookup(String, int)
as well as accompanying flag definitions KeySet::KDB_O_NONE
, KeySet::KDB_O_DEL
and KeySet::KDB_O_POP
. Please use KeySet::lookup(Key)
and KeySet::lookup(String)
instead. Instead of KeySet::KDB_O_DEL
, please consider using Key::release
. The proper replacement for KeySet::KDB_O_POP
is KeySet::remove(Key)
or KeySet::remove(String)
.Elektra
is now package private (previously was public).whitelist
(see here)Key nextMeta()
to Optional<Key> nextMeta ()
no longer throwing NoSuchElementException for non-exceptional behaviorElektra
is now package private (previously was public)whitelist
Key::getBinary()
and Key::setBinary(byte[])
KeyBinaryTypeNotSupportedException
to KeyStringValueException
KeyBinaryValueException
Key
test coverageexamples/external/java/read-keys-example
KeySetReleasedException
and KeyReleasedException
have been replaced by the native IllegalStateException
ReadableKey
to better reflect the limitations of metadata keys via a type hierarchy. Metadata keys are now returned as ReadableKey
s:Key
extends ReadableKey
Key
class is now finalKey Key::nextMeta()
to Optional<ReadableKey> Key::nextMeta()
, no longer throwing NoSuchElementException for non-exceptional behaviorKey Key::currentMeta()
to ReadableKey Key::currentMeta()
Optional<Key> Key::getMeta(String)
to Optional<ReadableKey> Key::getMeta(String)
Key::incRef
, Key::decRef
and Key::getRef
ReadableKey
/Key
now implements Comparable<ReadableKey>
int Key::cmp(Key)
has been renamed to int Key::compareTo(Key)
ReadableKey
now implements equals
and hashCode
in line with the contract for int Key::compareTo(Key)
ReadableKey
/Key
no longer implements Iterable<String>
for iterating over the parts of a key's name - use Iterator<String> ReadableKey::keyNameIterator ()
insteadKey
now implements Iterable<Key>
to iterate over a key's metadata ReadableKey
sReadableKey::isDirectBelow
/Key::isDirectBelow
to isDirectlyBelow
KeyNameIterator
and KeySetIterator
are now package privateKeySetAppendException
has been renamed to KeySetException
and now conveys general KeySet
related exceptional statesKeySet
now implements SortedSet<Key>
(see Java API). Previously KeySet
was only implementing Iterator<Key>
. Now a native key set can be used via its KeySet
representation wherever one of the following Java Collection Framework interfaces is supported:Iterable
Collection
Set
SortedSet
(Michael Tucek)
glib
binding with -Wno-pedantic
for compatibility. (Mihael Pranjić)-DTOOLS=ALL
. (Markus Raab)webd
: update npm dependencies. (Mihael Pranjić)kdb set
, kdb meta-set
: Only allow writes to the cascading namespace if the lookup succeeds. Otherwise, the operation is ambiguous and therefore aborted.
No more guessing of namespaces in case a cascading key is given (user:, system
: for kdb set
, spec:
for kdb meta-set
), (Alexander Firbas)kdb set
, kdb meta-set
: Validation of keys can no longer be bypassed by using non-cascading keys (except with the new --force (-f) option). (Alexander Firbas)-N/--namespace
option in all kdb subcommands (Alexander Firbas)kdb namespace
, kdb basename
and kdb dirname
. (Alexander Firbas)kdb file
: Remove namespace guessing (in case a cascading key is given, it needs to resolve to an existing key). (Alexander Firbas)kdb editor/import
: Disable the use of cascading names (and the 'validate' strategy operating on cascading keys) entirely. (Alexander Firbas)kdb gen
: Generate specification token during code-generation and add it to generated contract. (Tobias Schubert @qwepoizt)kdb gen
: Improve naming of variables to make code easier to understand. (Tobias Schubert @qwepoizt)kdb spec-mount
: Improve usability by failing with helpful error messages, if the specification contains errors. (Tobias Schubert @qwepoizt)loadConfiguration()
's signature in release 0.9.5 (Tobias Schubert @qwepoizt)kdb gen
. (Tobias Schubert @qwepoizt)testshell_markdown_tutorial_crypto
on Mac OS and other OS with GnuPG version >= 2.3.1. (Peter Nirschl @petermax2)keytest
(@lawli3t)keymeta
(@lawli3t)docker build
commands. (Mihael Pranjić)tmpfs
in Docker to speed up the test suite. (Mihael Pranjić)The website is generated from the repository, so all information about plugins, bindings and tools are always up-to-date. Furthermore, we changed:
We are currently working on following topics:
We closed 59 issues for this release.
About 17 authors changed 396 files with 13155 insertions(+) and 8331 deletions(-) in 597 commits.
Thanks to all authors for making this release possible!
We welcome new contributors! Read here about how to get started.
As first step, you could give us feedback about these release notes. Contact us via our issue tracker.
You can download the release from here or GitHub
The hashsums are:
The release tarball is also available signed using GnuPG from here or on GitHub
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
Already built API documentation can be found here or on GitHub.
Subscribe to the RSS feed to always get the release notifications.
If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative