We are proud to release Elektra 0.9.1.
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
kconfig
was added which can read KDE's kconfig ini files. Additionally we are working on a fork of KDE's KConfig
configuration system and patching it to use libelektra. (Dardan Haxhimustafa) and (Felix Resch)While the new kdb gen
was already included in the last release, it is now fully functional and ready for productive use. To get started take a look
at the new man-page for kdb-gen(1)
.
If you specifically want to use it with the High-Level API take a look at this tutorial.
We also created a new CMake function that will be available, if you include Elektra via CMake's
find_package
. The function is called elektra_kdb_gen
and can be used to tell CMake about files
that are generated via kdb gen
. (Klemens Böswirth)
kdb cmerge
. (Dominic Jäger)The following section lists news about the plugins we updated in this release.
boolean
,cachefilter
,cpptype
,dini
,enum
,regexstore
,required
,haskell
,simplespeclang
,regexdispatcher
,typechecker
,struct
. (Markus Raab, René Schwaiger)nameOfPluginCheckConf
. Before this update some plugins used the name nameOfPluginCheckConfig
instead. (René Schwaiger)crypto
, fcrypt
, and gpgme
plugins. (Peter Nirschl)execv
in the GPG module. (Peter Nirschl)ksAppendKey
regarding ownership of keys. (Raphael Gruber)gopts
specload
. (Klemens Böswirth)kconfig
. (Dardan Haxhimustafa)We removed the experimental plugin. For a plugin that is able to parse similar syntax, please take a look at the
plugins. (René Schwaiger)
argv
from the system, was added. (Klemens Böswirth)elektraGetOpts
was added. It simply checks, whether --help
is one
of the string in argv
. (Klemens Böswirth)parentKey
. It therefore now supports set calls. (Klemens Böswirth)missing/log
that allows logging of all missing require
d keys. (Klemens Böswirth)spec
now internally handles errors differently. There should be no external impact apart from better performance. (Klemens Böswirth)KDB_DB_SPEC
instead of the current working directory. (Klemens Böswirth)default
or type
metadata are no longer supported, since they are not safe in every case. (Klemens Böswirth)experimental
status. (Klemens Böswirth)3.15.3
) and Boost (1.71
). (René Schwaiger)type
plugin. For example, setting on
, enable
or true
all map to JSONs native true
value. See the type plugin for more details about boolean types. (Philipp Gackstatter)The text below summarizes updates to the C (and C++)-based libraries of Elektra.
We introduced several incompatible changes:
libelektra
, which is a collection of different elektra libraries, is now removed.
Users of CMake or pkg-config should not be affected. Otherwise change -lelektra
to -lelektra-core -lelektra-kdb
or whatever parts of Elektra your application uses. (Markus Raab)elektraKeyTo*
and elektra*ToString
are now part of the elektra-ease
library instead of
the elektra-highlevel
library. This should not cause any breaking changes since elektra-highlevel
already depends
on elektra-ease
. In addition the header elektra/conversion.h
is kept for compatibility. (Klemens Böswirth)keyRel
and keyRel2
since it can be easily replaced by other existing functions. (Philipp Gackstatter)We changed the following symbols:
kdbCommit
, was implemented. The function is carried out in the commit
phase of kdbSet
and separates the commit functionality from the kdbSet()
function. (Vid Leskovar)kdbconfig.h
is no longer included in the installed headers. This is because it could cause conflicts with other
config.h
-type headers from applications. (Klemens Böswirth)ksAppendKey
: state that it only fail on memory problems. (Markus Raab)kdbGet
. (Markus Raab)kdberrors.h
directly without generation of the specification
file because of drastically reduced error code count (Michael Zronek)keyIsDirectBelow
was renamed to keyIsDirectlyBelow
. (Philipp Gackstatter)keyMeta
was added to provide access to a key's underlying KeySet that holds its metadata keys. (Philipp Gackstatter)ksLookupByString
and ksLookupByBinary
, as well as deprecated KDB_O_*
options. (Philipp Gackstatter)keyLock
and keyIsLocked
. (Manuel Mausz)keyVInit
. (Manuel Mausz)-h
is no longer used to indicate help mode. Only --help
, will invoke help mode. (Klemens Böswirth)kdbproposal.h
:elektraKsToMemArray
was moved to kdbease.h
,elektraLookupOptions
was moved to kdbprivate.h
,keySetStringF
was moved to kdbinternal.h
,ksPrev
and elektraKsPrev
,elektraRenameKeys
and replaced it with ksRenameKeys
. (Philipp Gackstatter)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::is{Name,Value,Meta}Locked
. (Manuel Mausz)gelektra_keyset_resize
. (Manuel Mausz)gelektra_keyset_rewind
, gelektra_keyset_next
, gelektra_keyset_current
, gelektra_keyset_getcursor
, gelektra_keyset_setcursor
. (Manuel Mausz)gelektra_keyset_atcursor
to gelektra_keyset_at
. (Manuel Mausz)KeyNotFoundException
exception. (Manuel Mausz)hash(key)
will throw unless the key name is locked. (Manuel Mausz)len(Key)
, repr(Key)
, str(KeySet)
, repr(KeySet)
. (Manuel Mausz)Key(name, value, [dict])
. (Manuel Mausz)KeySet.extend([key1, key2,...])
and KeySet.append(key1, key2, ...)
. (Manuel Mausz)KeySet.append(key_name, key_value, key_opts)
which directly creates and appends a key. (Manuel Mausz)KeySet.unpack_names()
, KeySet.unpack_basenames()
, KeySet.filter(func)
, KeySet.filter_below(where)
, Key.array_elements()
. (Manuel Mausz)elektra-sys
crate which contains raw bindings to libelektra for Rust. (Philipp Gackstatter)elektra
crate which contains safe wrapper methods for the raw bindings. The crate contains bindings for the low-level API, which means that the data types Key
and KeySet
can now safely be used from Rust. The Rust version of the API has been designed to take advantage of Rust's type system and to be in accordance with the memory safety of Rust. For instance, the Key has been divided into StringKey
and BinaryKey
, to prevent type mismatches at compile-time. With the binding for KDB
, one can take advantage of the elektra ecosystem from Rust. See the Readme for more. (Philipp Gackstatter)KDBError
to follow the specification fully and in particular allow catching out of memory errors by catching resource errors. (Philipp Gackstatter)keyset!
macro to easily create a keyset with many keys in a single invocation. (Philipp Gackstatter)KDB_EXEC_PATH
, which can be used to add further external tools to kdb
, now supports :
to separate paths.
kdb list-tools
and run_env
were improved to take advantage of this. (Markus Raab)kdbCommit
have been added to kdb plugin-check. (Vid Leskovar)kdb meta-show
command which prints out all metadata along with its values for a given key. (Michael Zronek)kdb vset
as it does not properly put metadata to the spec namespace. (Michael Zronek)kdb info
is now kdb plugin-info
, kdb check
is now kdb plugin-check
and kdb list
is now kdb plugin-list
. We also removed the obsolete kdb fstab
. (Philipp Gackstatter)kdb getmeta
is now kdb meta-get
kdb lsmeta
is now kdb meta-ls
kdb showmeta
is now kdb meta-show
kdb rmmeta
is now kdb meta-rm
kdb setmeta
is now kdb meta-set
(Philipp Gackstatter)gen-gpg-testkey
by giving a narrower GPG key description. Fixes mismatches with existing GPG keys that contain "elektra.org" as e-mail address. (Peter Nirschl)kdb list-commands
and kdb plugins-list
now sort their output in an alphabetical order (Anton Hößl)kdb plugin-list
does now mention in the helptext that with option -v
the output is sorted by the plugin status (Anton Hößl)kdb import
, kdb export
and kdb editor
now search the plugin database for suitig plugins so it's now possible to run kdb export /hello json
instead of having to specify the plugin for the desired format directly. (Anton Hößl)get
and mount
: Remove dependency on kdbprivate.h
(Philipp Gackstatter)We structured the scripts. (Markus Raab)
Removed the scripts
scripts/elektra-merge
,scripts/elektra-mount
,scripts/elektra-umount
,convert-fstab
,convert-hosts
,convert-inittab
,convert-users
,scripts/benchmark_libsplit.sh
,scripts/zsh
andexample-xorg
. (Markus Raab)Renamed scripts/run_dev_env
to scripts/dev/run_env
. (Markus Raab)
The script draw-all-plugins
now also works properly, if the repository path contains space characters. (René Schwaiger)
The script link-checker
now deduplicates the list of links before checking them. The timeout and amount of retries was also reduced.
Lastly the script now supports a whitelist. Any link stored in tests/linkchecker.whitelist
will not be checked. (Klemens Böswirth)
We removed a script used to compare the runtime performance of YAML plugins. (René Schwaiger)
Cleanup: separation of dev, admin and completion scripts. (Markus Raab, Rene Schwaiger)
Pre-commit hook pre-commit-check-formatting
now lives in scripts/dev/pre-commit-check-formatting
. (Klemens Böswirth)
The new script reformat-javascript
formats the JavaScript code of the repository using the tool prettier
. (René Schwaiger)
We renamed
reformat-source
to reformat-c
, andreformat-shfmt
to reformat-shell
. (René Schwaiger)The script cmake-format now requires cmake-format
0.6. (René Schwaiger)
The new script reformat-java
formats the Java code in the repository using clang-format
. (René Schwaiger)
The Markdown Shell Recorder now also works correctly on FreeBSD. (René Schwaiger)
make
or gcc
to build Elektra anymore. (René Schwaiger)formatting test
detects code differences. This update should get rid of transient errors as reported here. (René Schwaiger)testmod_zeromqsend
from the command kdb run_all
, since it caused timeouts in high load scenarios. (Mihael Pranjić)kdbtypes.h
is now generated directly via a CMake configure_file
call. (Klemens Böswirth)ELEKTRA_STAT_ST_SIZE_F
now contains the correct format specifier for the st_size
member of the stat
struct on macOS. (René Schwaiger)conditionals
and yamlcpp
plugin any more. After this update, the code compiles without any warnings, even though we now use the compiler switch -Wconversion
. (René Schwaiger)cmake-format
is used. (Klemens Böswirth, René Schwaiger)range
plugin error message. (Michael Zronek)sudo
. (Michael Zronek)The 🔗 Check
build job now merges PRs before checking links. (Klemens Böswirth)
We enabled logging in the build job 🍎 Clang
. This update makes sure that Elektra’s logging code compiles without warnings on macOS. (René Schwaiger)
All macOS build jobs now use Xcode 11.1
instead of Xcode 10.1
. (René Schwaiger)
We removed all non-POSIX shell code from the Cirrus configuration file. (René Schwaiger)
The macOS build jobs now use Ruby 2.6
. (René Schwaiger)
We do not call ninja
directly anymore. Instead we use cmake --build
. This has the advantage that we do not have to care about the Generator used by CMake. (René Schwaiger)
We added the build job 😈 ASAN
, which builds and executes Elektra on FreeBSD with enabled AddressSanitizer. (René Schwaiger)
We now store common commands in one place at the top of the configuration file. This makes it easier to selectively disable certain build jobs. (René Schwaiger)
The new job 📚 Check
checks
The new build job 🐧 Fedora
builds and tests Elektra on Fedora Linux. (René Schwaiger)
master
branch anymore. (René Schwaiger)🍏 GCC
now uses the Travis Homebrew addon to install dependencies. (René Schwaiger)18.04
(Bionic Beaver) instead of Ubuntu 16.04
(Xenial Xerus). (René Schwaiger)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 75 issues for this release.
About 29 authors changed 1651 files with 82267 insertions(+) and 41690 deletions(-) in 1623 commits.
Thanks to all authors for making this release possible!
mmap()
system call to read and write data. Our cache implementation for Elektra's data structures makes the access to the KDB more than 80 times faster for larger data sets. The penalty for cache misses is below 20 percent for reasonably sized data sets.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 by Mihael Pranjic using GnuPG from here or on GitHub
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