mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
829 lines
27 KiB
ReStructuredText
829 lines
27 KiB
ReStructuredText
***************
|
|
Version History
|
|
***************
|
|
|
|
0.14.6 - 2019-04-24
|
|
===================
|
|
|
|
Added
|
|
-----
|
|
|
|
- Support for TES III: Morrowind using ``GameType::tes3``. The sorting process
|
|
for Morrowind is slightly different than for other games, because LOOT cannot
|
|
currently detect when plugins overlap. As a result, LOOT is much less likely
|
|
to suggest load order changes.
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Updated esplugin to v2.1.2.
|
|
- Updated loot-condition-interpreter to v1.3.0.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- LOOT would unnecessarily ignore intermediate plugins in a non-master to master
|
|
cycle involving groups, leading to unexpected results when sorting plugins.
|
|
|
|
0.14.5 - 2019-02-27
|
|
===================
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Updated libgit2 to v0.28.1.
|
|
- Updated libloadorder to v12.0.1.
|
|
- Updated spdlog to v1.3.1.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- ``HearthFires.esm`` was not recognised as a hardcoded plugin on case-sensitive
|
|
filesystems, causing a cyclic interaction error when sorting Skyrim or Skyrim
|
|
SE (via libloadorder).
|
|
|
|
0.14.4 - 2019-01-27
|
|
===================
|
|
|
|
Added
|
|
-----
|
|
|
|
- Added :cpp:any:`UnsetGroup()` to ``PluginMetadata``.
|
|
|
|
0.14.3 - 2019-01-27
|
|
===================
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Condition parsing now errors if it does not consume the whole condition
|
|
string. Via loot-condition-interpreter.
|
|
- Removed a few unhelpful log statements and changed the verbosity level of
|
|
others.
|
|
- Updated loot-condition-interpreter to v1.2.2.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- Conditions were not parsed past the first instance of ``file(<regex>)``,
|
|
``active(<regex>)``, ``many(<regex>)`` or ``many_active(<regex>)``. Via
|
|
loot-condition-interpreter.
|
|
- :cpp:any:`loot::CreateGameHandle()` could crash when trying to check if the
|
|
given paths are symlinks. If a check fails, LOOT will assume the path is not a
|
|
symlink.
|
|
|
|
0.14.2 - 2019-01-20
|
|
===================
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Updated loot-condition-interpreter to v1.2.1.
|
|
- Updated spdlog to v1.3.0.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- An error when loading plugins with a file present in the plugins directory
|
|
that has a filename containing characters that cannot be represented in the
|
|
system code page.
|
|
- An error when trying to read the version of an executable that does not have
|
|
a US English version information resource. Executable versions are now read
|
|
from the file's first version information resource, whatever its language.
|
|
Via loot-condition-interpreter.
|
|
|
|
0.14.1 - 2018-12-23
|
|
===================
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Updated loot-condition-interpreter to v1.2.0.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- Product version conditions read from executables' ``VS_FIXEDFILEINFO``
|
|
structure, so the versions read did not match the versions displayed by
|
|
Windows' File Explorer. Product versions are now read from executables'
|
|
``VS_VERSIONINFO`` structure, using the ``ProductVersion`` key. Via
|
|
loot-condition-interpreter.
|
|
- The release date in the metadata syntax changelog for v0.14 was "Unreleased".
|
|
|
|
0.14.0 - 2018-12-09
|
|
===================
|
|
|
|
Added
|
|
-----
|
|
|
|
- :cpp:any:`GetHeaderVersion()` to get the value of the version field in the
|
|
``HEDR`` subrecord of a plugin's ``TES4`` record.
|
|
- :cpp:any:`IsValidAsLightMaster()` to check if a light master is valid or if a
|
|
non-light-master plugin would be valid with the light master flag or ``.esl``
|
|
extension. Validity is defined as having no new records with a FormID object
|
|
index greater than 0xFFF.
|
|
- :cpp:any:`GetGroupsPath()` to return the path between two given groups that
|
|
maximises the user metadata and minimises the masterlist metadata involved.
|
|
- :cpp:any:`loot::Vertex` to represent a plugin or group vertex in a sorting
|
|
graph path.
|
|
- :cpp:any:`loot::EdgeType` to represent the type of the edge between two vertices
|
|
in a sorting graph. Each edge type indicates the type of data it was sourced
|
|
from.
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Renamed the library from "the LOOT API" to "libloot" to avoid confusion
|
|
between the name of the library and the API that it provides. The library
|
|
filename is changed so that the ``loot_api`` part is now ``loot``, e.g.
|
|
``loot.dll`` on Windows and ``libloot.so`` on Linux.
|
|
- :cpp:any:`CyclicInteractionError` has had its constructor and methods
|
|
completely replaced to provide a more detailed and flexible representation of
|
|
the cyclic path that it reports.
|
|
- ``UndefinedGroupError::getGroupName()`` has been renamed to
|
|
``UndefinedGroupError::GetGroupName()`` for consistency with other API method
|
|
names.
|
|
- ``LootVersion::string()`` has been renamed to
|
|
``LootVersion::GetVersionString()`` for consistency with other API method
|
|
names.
|
|
- :cpp:any:`GetPluginMetadata()` and :cpp:any:`GetPluginUserMetadata()` now
|
|
return ``std::optional<PluginMetadata>`` to differentiate metadata being found
|
|
or not. Note that the ``PluginMetadata`` value may still return true for
|
|
:cpp:any:`HasNameOnly()` if a metadata entry exists but has no content other
|
|
than the plugin name.
|
|
- :cpp:any:`GetGroup()` now returns ``std::optional<std::string>`` to
|
|
indicate when there is no group metadata explicitly set, to simplify
|
|
distinguishing between explicit and implicit default group membership.
|
|
- :cpp:any:`GetVersion()` now returns ``std::optional<std::string>`` to
|
|
differentiate between there being no version and the version being an empty
|
|
string, though the latter should never occur.
|
|
- :cpp:any:`GetCRC()` now returns ``std::optional<uint32_t>`` to differentiate
|
|
between there being no CRC calculated and the CRC somehow being zero (which
|
|
should never occur).
|
|
- Filesystem paths are now represented in the API by ``std::filesystem::path``
|
|
values instead of ``std::string`` values. This affects the following
|
|
functions:
|
|
|
|
- :cpp:any:`loot::CreateGameHandle()`
|
|
- :cpp:any:`LoadLists()`
|
|
- :cpp:any:`WriteUserMetadata()`
|
|
- :cpp:any:`WriteMinimalList()`
|
|
- :cpp:any:`UpdateMasterlist()`
|
|
- :cpp:any:`GetMasterlistRevision()`
|
|
- :cpp:any:`IsLatestMasterlist()`
|
|
|
|
- The metadata condition parsing, evaluation and caching code and the pseudosem
|
|
dependency have been replaced by a dependency on
|
|
`loot-condition-interpreter`_, which provides more granular caching and more
|
|
opportunity for future enhancements.
|
|
- The API now supports v0.14 of the metadata syntax.
|
|
- Updated C++ version required to C++17. This means that Windows builds
|
|
now require the MSVC 2017 runtime redistributable to be installed.
|
|
- Updated esplugin to v2.1.1.
|
|
- Updated libloadorder to v12.0.0.
|
|
- Updated libgit2 to v0.27.7.
|
|
- Updated spdlog to v1.2.1.
|
|
|
|
.. _loot-condition-interpreter: https://github.com/loot/loot-condition-interpreter
|
|
|
|
Removed
|
|
-------
|
|
|
|
- ``PluginInterface::GetLowercasedName()``, as the case folding behaviour LOOT
|
|
uses is not necessarily appropriate for all use cases, so it's up to the
|
|
client to lowercase according to their own needs.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- BSAs/BA2s loaded by non-ASCII plugins for Oblivion, Fallout 3, Fallout: New
|
|
Vegas and Fallout 4 may not have been detected due to incorrect
|
|
case-insensitivity handling.
|
|
- Fixed incorrect case-insensitivity handling for non-ASCII plugin filenames and
|
|
``File`` metadata names.
|
|
- ``FileVersion`` and ``ProductVersion`` properties were not set in the DLL
|
|
since v0.11.0.
|
|
- Path equivalence checks could be inaccurate as they were using case-insensitive
|
|
string comparisons, which may not match filesystem behaviour. Filesystem
|
|
equivalence checks are now used to improve correctness.
|
|
- Errors due to filesystem permissions when cloning a new masterlist repository
|
|
into an existing game directory. Deleting the temporary directory is now
|
|
deferred until after its contents have been copied into the game directory,
|
|
and if an error is encountered when deleting the temporary directory, it is
|
|
logged but does not cause the masterlist update to fail.
|
|
- An error creating a game handle for Skyrim if ``loadorder.txt`` is not encoded
|
|
in UTF-8. In this case, libloadorder will now fall back to interpreting its
|
|
contents as encoded in Windows-1252, to match the behaviour when reading the
|
|
load order state.
|
|
|
|
0.13.8 - 2018-09-24
|
|
===================
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- Filesystem errors when trying to set permissions during a masterlist update
|
|
that clones a new repository.
|
|
|
|
0.13.7 - 2018-09-10
|
|
===================
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Significantly improve plugin loading performance by scanning for BSAs/BA2s
|
|
once instead of for each plugin.
|
|
- Improve performance of metadata evaluation by caching CRCs with the same
|
|
cache lifetime as condition results.
|
|
- Improve performance of sorting when it involves long plugin interaction
|
|
chains.
|
|
- Updated esplugin to v2.0.1.
|
|
- Updated libgit2 to v0.27.4.
|
|
- Updated libloadorder v11.4.1.
|
|
- Updated spdlog to v1.1.0.
|
|
- Updated yaml-cpp to 0.6.2+merge-key-support.2.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- Fallout 4's `DLCUltraHighResolution.esm` is now handled as a hardcoded plugin
|
|
(via libloadorder).
|
|
|
|
0.13.6 - 2018-06-29
|
|
===================
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Tweaked masterlist repository cloning to avoid undefined behaviour.
|
|
- Updated Boost to v1.67.0.
|
|
- Updated esplugin to v2.0.0.
|
|
- Updated libgit2 to v0.27.2.
|
|
- Updated libloadorder to v11.4.0.
|
|
|
|
0.13.5 - 2018-06-02
|
|
===================
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Sorting now enforces hardcoded plugin positions, sourcing them through
|
|
libloadorder. This avoids the need for often very verbose metadata entries,
|
|
particularly for Creation Club plugins.
|
|
- Updated libgit2 to v0.27.1. This includes a security fix for CVE-2018-11235,
|
|
but LOOT API's usage is not susceptible. libgit2 is not susceptible to
|
|
CVE-2018-11233, another Git vulnerability which was published on the same day.
|
|
- Updated libloadorder to v11.3.0.
|
|
- Updated spdlog to v0.17.0.
|
|
- Updated esplugin to v1.0.10.
|
|
|
|
0.13.4 - 2018-06-02
|
|
===================
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- :cpp:any:`NewMetadata()` now uses the passed plugin's group if the calling
|
|
plugin's group is implicit, and sets the group to be implicit if the two
|
|
plugins' groups are equal.
|
|
|
|
0.13.3 - 2018-05-26
|
|
===================
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Improved cycle avoidance when resolving evaluating plugin groups during
|
|
sorting. If enforcing the group difference between two plugins would cause a
|
|
cycle and one of the plugins' groups is the default group, that plugin's group
|
|
will be ignored for all plugins in groups between default and the other
|
|
plugin's group.
|
|
- The masterlist repository cloning process no longer moves LOOT's game folders,
|
|
so if something goes wrong the process fails more safely.
|
|
- The LOOT API is now built with debugging information on Windows, and its PDB
|
|
is included in build archives.
|
|
- Updated libloadorder to v11.2.2.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- Various filesystem-related issues that could be encountered when updating
|
|
masterlists, including failure due to file handles being left open while
|
|
attempting to remove.
|
|
- Building the esplugin and libloadorder dependencies using Rust 1.26.0, which
|
|
included a `regression`_ to workspace builds.
|
|
|
|
.. _regression: https://github.com/rust-lang/cargo/issues/5518
|
|
|
|
0.13.2 - 2018-04-29
|
|
===================
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Updated libloadorder to v11.2.1.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- Incorrect load order positions were given for light-master-flagged ``.esp``
|
|
plugins when getting the load order (via libloadorder).
|
|
|
|
0.13.1 - 2018-04-09
|
|
===================
|
|
|
|
Added
|
|
-----
|
|
|
|
- Support for Skyrim VR using ``GameType::tes5vr``.
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Updated libloadorder to v11.2.0.
|
|
|
|
0.13.0 - 2018-04-02
|
|
===================
|
|
|
|
Added
|
|
-----
|
|
|
|
- Group metadata as a replacement for priority metadata. Each plugin belongs to
|
|
a group, and a group can load after other groups. Plugins belong to the
|
|
``default`` group by default.
|
|
|
|
- Added the :cpp:any:`loot::Group` class to represent a group.
|
|
- Added :cpp:any:`loot::UndefinedGroupError`.
|
|
- Added :cpp:any:`GetGroups()`, :cpp:any:`GetUserGroups()` and :cpp:any:`SetUserGroups()`.
|
|
- Added :cpp:any:`GetGroup()`, :cpp:any:`IsGroupExplicit()`
|
|
and :cpp:any:`SetGroup()`.
|
|
- Updated :cpp:any:`MergeMetadata()` to replace the existing
|
|
group with the given object's group if the latter is explicit.
|
|
- Updated :cpp:any:`NewMetadata()` to return an object using
|
|
the called object's group.
|
|
- Updated :cpp:any:`HasNameOnly()` to check the group is
|
|
implicit.
|
|
- Updated :cpp:any:`SortPlugins()` to take into account plugin
|
|
groups.
|
|
|
|
Changed
|
|
-------
|
|
|
|
- :cpp:any:`LoadPlugins()` and
|
|
:cpp:any:`SortPlugins()` no longer load the current load order
|
|
state, so :cpp:any:`LoadCurrentLoadOrderState()` must be called
|
|
separately.
|
|
- Updated libgit2 to v0.27.0.
|
|
- Updated libloadorder to v11.1.0.
|
|
|
|
Removed
|
|
-------
|
|
|
|
- Support for local and global plugin priorities.
|
|
|
|
- Removed the ``loot::Priority`` class.
|
|
- Removed ``PluginMetadata::GetLocalPriority()``,
|
|
``PluginMetadata::GetGlobalPriority()``,
|
|
``PluginMetadata::SetLocalPriority()`` and
|
|
``PluginMetadata::SetGlobalPriority()``
|
|
- Priorities are no longer taken into account when sorting plugins.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- An error when applying a load order for Morrowind, Oblivion, Fallout 3 or
|
|
Fallout: New Vegas when a plugin had a timestamp earlier than 1970-01-01
|
|
00:00:00 UTC (via libloadorder).
|
|
- An error when loading the current load order for Skyrim with a
|
|
``loadorder.txt`` incorrectly encoded in Windows-1252 (via libloadorder).
|
|
|
|
|
|
0.12.5 - 2018-02-17
|
|
===================
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Updated esplugin to v1.0.9.
|
|
- Updated libgit2 to v0.26.3. This enables TLS 1.2 support on Windows 7, so
|
|
users shouldn't need to manually enable it themselves.
|
|
|
|
0.12.4 - 2018-02-17
|
|
===================
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- Loading or saving a load order could be very slow because the plugins
|
|
directory was scanned recursively, which is unnecessary. In the reported case,
|
|
this fix caused saving a load order to go from 23 seconds to 43 milliseconds
|
|
(via libloadorder).
|
|
- Plugin parsing errors were being logged with trace severity, they are now
|
|
logged as errors.
|
|
- Saving a load order for Oblivion, Fallout 3 or Fallout: New Vegas now updates
|
|
plugin access times to the current time for correctness (via libloadorder).
|
|
|
|
Changed
|
|
-------
|
|
|
|
- ``GameInterface::SetLoadOrder()`` now errors if passed a load order that does
|
|
not contain all installed plugins. The previous behaviour was to append any
|
|
missing plugins, but this was undefined and could cause unexpected results
|
|
(via libloadorder).
|
|
- Performance improvements for load order operations, benchmarked at 2x to 150x
|
|
faster (via libloadorder).
|
|
- Updated mentions of libespm in error messages to mention esplugin instead.
|
|
- Updated libloadorder to v11.0.1.
|
|
- Updated spdlog to v0.16.3.
|
|
|
|
0.12.3 - 2018-02-04
|
|
===================
|
|
|
|
Added
|
|
-----
|
|
|
|
- Support for Fallout 4 VR via the new :cpp:any:`loot::GameType::fo4vr` game type.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- :cpp:any:`loot::CreateGameHandle()` no longer accepts an empty game path
|
|
string, and no longer has a default value for its game path parameter, as
|
|
using an empty string as the game path is invalid and always causes an
|
|
exception to be thrown.
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Added an empty string as the default value of
|
|
:cpp:any:`loot::InitialiseLocale()`'s string parameter.
|
|
- Updated esplugin to v1.0.8.
|
|
- Updated libloadorder to v10.1.0.
|
|
|
|
0.12.2 - 2017-12-24
|
|
===================
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- Plugins with a ``.esp`` file extension that have the light master flag set are
|
|
no longer treated as masters when sorting, so they can have other ``.esp``
|
|
files as masters without causing cyclic interaction sorting errors.
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Downgraded Boost to 1.63.0 to take advantage of pre-built binaries on AppVeyor.
|
|
|
|
0.12.1 - 2017-11-23
|
|
===================
|
|
|
|
Added
|
|
-----
|
|
|
|
- Support for identifying Creation Club plugins using ``Skyrim.ccc`` and ``Fallout4.ccc`` (via libloadorder).
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Update esplugin to v1.0.7.
|
|
- Update libloadorder to v10.0.4.
|
|
|
|
0.12.0 - 2017-11-03
|
|
===================
|
|
|
|
Added
|
|
-----
|
|
|
|
- Support for light master (``.esl``) plugins.
|
|
- :cpp:any:`LoadCurrentLoadOrderState()` in :cpp:any:`loot::GameInterface` to
|
|
expose load order cache management to clients, as libloadorder no longer
|
|
internally manages it.
|
|
- :cpp:any:`loot::SetLoggingCallback()` to allow clients to handle the LOOT
|
|
API's logging statements themselves.
|
|
- Logging of libloadorder error details.
|
|
|
|
Changed
|
|
-------
|
|
|
|
- :cpp:any:`LoadPlugins()` now loads the current load order
|
|
state before loading plugins.
|
|
- Added a `condition` string field to :cpp:any:`SimpleMessage`.
|
|
- Replaced libespm dependency with esplugin v1.0.6. This significantly improves
|
|
safety and sorting performance, especially for large load orders.
|
|
- Updated libloadorder to v10.0.3. This significantly improves safety and the
|
|
performance of load order operations, at the expense of exposing cache
|
|
management to the client.
|
|
- Replaced Boost.Log with spdlog v0.14.0, removing dependencies on several other
|
|
Boost libraries in the process.
|
|
- Updated libgit2 to v0.26.0.
|
|
- Update Boost to v1.65.1.
|
|
|
|
Removed
|
|
-------
|
|
|
|
- ``DatabaseInterface::EvalLists()`` as it was superseded in v0.11.0 by the
|
|
ability to evaluate conditions when getting general messages and individual
|
|
plugins' metadata, which is more efficient.
|
|
- ``SetLoggingVerbosity()`` and ``SetLogFile()`` as they have been superseded
|
|
by the new :cpp:any:`loot::SetLoggingCallback()` function.
|
|
- The ``loot/yaml/*`` headers containing LOOT's internal YAML conversion
|
|
functions are no longer exposed alongside the API headers.
|
|
- The ``loot/windows_encoding_converters.h`` header is no longer exposed
|
|
alongside the API headers.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- Formatting in metadata documentation.
|
|
- Saving metadata wrote entries in an inconsistent order.
|
|
- Clang build errors.
|
|
|
|
0.11.1 - 2017-06-19
|
|
===================
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- A crash would occur when loading an plugin that had invalid data past its
|
|
header. Such plugins are now just silently ignored.
|
|
- :cpp:any:`loot::CreateGameHandle()` would not resolve game or local data paths
|
|
that are junction links correctly, which caused problems later when trying to
|
|
perform actions such as loading plugins.
|
|
- Performing a masterlist update on a branch where the remote and local
|
|
histories had diverged would fail. The existing local branch is now discarded
|
|
and the remote branch checked out anew, as intended.
|
|
|
|
0.11.0 - 2017-05-13
|
|
===================
|
|
|
|
Added
|
|
-----
|
|
|
|
- New functions to :cpp:class:`loot::DatabaseInterface`:
|
|
|
|
- :cpp:any:`WriteUserMetadata()`
|
|
- :cpp:any:`GetKnownBashTags()`
|
|
- :cpp:any:`GetGeneralMessages()`
|
|
- :cpp:any:`GetPluginMetadata()`
|
|
- :cpp:any:`GetPluginUserMetadata()`
|
|
- :cpp:any:`SetPluginUserMetadata()`
|
|
- :cpp:any:`DiscardPluginUserMetadata()`
|
|
- :cpp:any:`DiscardAllUserMetadata()`
|
|
- :cpp:any:`IsLatestMasterlist()`
|
|
|
|
- A :cpp:any:`loot::GameInterface` pure abstract class that exposes methods for
|
|
accessing game-specific functionality.
|
|
- A :cpp:any:`loot::PluginInterface` pure abstract class that exposes methods
|
|
for accessing plugin file data.
|
|
- The :cpp:any:`loot::SetLoggingVerbosity()` and :cpp:any:`loot::SetLogFile()`
|
|
functions and :cpp:any:`loot::LogVerbosity` enum for controlling the API's
|
|
logging behaviour.
|
|
- An :cpp:any:`loot::InitialiseLocale()` function that must be called to
|
|
configure the API's locale before any of its other functionality is used.
|
|
- LOOT's internal metadata classes are now exposed as part of the API.
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Renamed ``loot::CreateDatabase()`` to :cpp:any:`loot::CreateGameHandle()`, and
|
|
changed its signature so that it returns a shared pointer to a
|
|
:cpp:any:`loot::GameInterface` instead of a shared pointer to a
|
|
:cpp:any:`loot::DatabaseInterface`.
|
|
- Moved :cpp:any:`SortPlugins()` into :cpp:any:`loot::GameInterface`.
|
|
- Some :cpp:any:`loot::DatabaseInterface` methods are now const:
|
|
|
|
- :cpp:any:`WriteMinimalList()`
|
|
- :cpp:any:`GetMasterlistRevision()`
|
|
|
|
- LOOT's internal YAML conversion functions have been refactored into the
|
|
``include/loot/yaml`` directory, but they are not really part of the API.
|
|
They're only exposed so that they can be shared between the API and LOOT
|
|
application without introducing another component.
|
|
- LOOT's internal string encoding conversion functions have been refactored into
|
|
the ``include/loot/windows_encoding_converters.h`` header, but are not really
|
|
part of the API. They're only exposed so that they can be shared between the
|
|
API and LOOT application without introducing another component.
|
|
- Metadata is now cached more efficiently, reducing the API's memory footprint.
|
|
- Log timestamps now have microsecond precision.
|
|
- Updated to libgit2 v0.25.1.
|
|
- Refactored code only useful to the LOOT application out of the API internals
|
|
and into the application source code.
|
|
|
|
Removed
|
|
-------
|
|
|
|
- ``DatabaseInterface::GetPluginTags()``,
|
|
``DatabaseInterface::GetPluginMessages()`` and
|
|
``DatabaseInterface::GetPluginCleanliness()`` have been removed as they have
|
|
been superseded by ``DatabaseInterface::GetPluginMetadata()``.
|
|
- The ``GameDetectionError`` class, as it is no longer thrown by the API.
|
|
- The ``PluginTags`` struct, as it is no longer used.
|
|
- The ``LanguageCode`` enum, as the API now uses ISO language codes directly
|
|
instead.
|
|
- The ``PluginCleanliness`` enum. as it's no longer used. Plugin cleanliness
|
|
should now be checked by getting a plugin's evaluated metadata and checking
|
|
if any dirty info is present. If none is present, the cleanliness is unknown.
|
|
If dirty info is present, check if any of the English info strings contain the
|
|
text "Do not clean": if not, the plugin is dirty.
|
|
- The LOOT API no longer caches the load order, as this is already done more
|
|
accurately by libloadorder (which is used internally).
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- Libgit2 error details were not being logged.
|
|
- A FileAccessError was thrown when the masterlist path was an empty string. The
|
|
API now just skips trying to load the masterlist in this case.
|
|
- Updating the masterlist did not update the cached metadata, requiring a call
|
|
to :cpp:any:`LoadLists()`.
|
|
- The reference documentation was broken due to an incompatibility between
|
|
Sphinx 1.5.x and Breathe 4.4.
|
|
|
|
0.10.3 - 2017-01-08
|
|
===================
|
|
|
|
Added
|
|
-----
|
|
|
|
- Automated 64-bit API builds.
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Replaced ``std::invalid_argument`` exceptions thrown during condition evaluation with ``ConditionSyntaxError`` exceptions.
|
|
- Improved robustness of error handling when calculating file CRCs.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- Documentation was not generated correctly for enums, exceptions and structs exposed by the API.
|
|
- Added missing documentation for ``CyclicInteractionError`` methods.
|
|
|
|
0.10.2 - 2016-12-03
|
|
===================
|
|
|
|
Changed
|
|
-------
|
|
|
|
- Updated libgit2 to 0.24.3.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
- A crash could occur if some plugins that are hardcoded to always load were missing. Fixed by updating to libloadorder v9.5.4.
|
|
- Plugin cleaning metadata with no ``info`` value generated a warning message with no text.
|
|
|
|
|
|
0.10.1 - 2016-11-12
|
|
===================
|
|
|
|
No API changes.
|
|
|
|
0.10.0 - 2016-11-06
|
|
===================
|
|
|
|
Added
|
|
-----
|
|
|
|
* Support for TES V: Skyrim Special Edition.
|
|
|
|
Changed
|
|
-------
|
|
|
|
* Completely rewrote the API as a C++ API. The C API has been reimplemented as
|
|
a wrapper around the C++ API, and can be found in a `separate repository`_.
|
|
* Windows builds now have a runtime dependency on the MSVC 2015 runtime
|
|
redistributable.
|
|
* Rewrote the API documentation, which is now hosted online at `Read The Docs`_.
|
|
* The Windows release archive includes the ``.lib`` file for compile-time linking.
|
|
* LOOT now supports v0.10 of the metadata syntax. This breaks compatibility with existing syntax. See :doc:`the syntax version history <../metadata/changelog>` for the details.
|
|
* Updated libgit2 to 0.24.2.
|
|
|
|
Removed
|
|
-------
|
|
|
|
* The ``loot_get_tag_map()`` function has no equivalent in the new C++ API as it
|
|
is obsolete.
|
|
* The ``loot_apply_load_order()`` function has no equivalent in the new C++ API
|
|
as it just passed through to libloadorder, which clients can use directly
|
|
instead.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
* Database creation was failing when passing paths to symlinks that point to
|
|
the game and/or game local paths.
|
|
* Cached plugin CRCs causing checksum conditions to always evaluate to false.
|
|
* Updating the masterlist when the user's ``TEMP`` and ``TMP`` environmental variables point to a different drive than the one LOOT is installed on.
|
|
|
|
.. _separate repository: https://github.com/loot/loot-api-c
|
|
.. _Read The Docs: https://loot.readthedocs.io
|
|
|
|
0.9.2 - 2016-08-03
|
|
==================
|
|
|
|
Changed
|
|
-------
|
|
|
|
* libespm (2.5.5) and Pseudosem (1.1.0) dependencies have been updated to the
|
|
versions given in brackets.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
* The packaging script used to create API archives was packaging the wrong
|
|
binary, which caused the v0.9.0 and v0.9.1 API releases to actually be
|
|
re-releases of a snapshot build made at some point between v0.8.1 and v0.9.0:
|
|
the affected API releases were taken offline once this was discovered.
|
|
* ``loot_get_plugin_tags()`` remembering results and including them in the
|
|
results of subsequent calls.
|
|
* An error occurred when the user's temporary files directory didn't
|
|
exist and updating the masterlist tried to create a directory there.
|
|
* Errors when reading some Oblivion plugins during sorting, including
|
|
the official DLC.
|
|
|
|
0.9.1 - 2016-06-23
|
|
==================
|
|
|
|
No API changes.
|
|
|
|
0.9.0 - 2016-05-21
|
|
==================
|
|
|
|
Changed
|
|
-------
|
|
|
|
* Moved API header location to the more standard ``include/loot/api.h``.
|
|
* Documented LOOT's masterlist versioning system.
|
|
* Made all API outputs fully const to make it clear they should not be
|
|
modified and to avoid internal const casting.
|
|
* The ``loot_db`` type is now an opaque struct, and functions that used to take
|
|
it as a value now take a pointer to it.
|
|
|
|
Removed
|
|
-------
|
|
|
|
* The ``loot_cleanup()`` function, as the one string it used to destroy
|
|
is now stored on the stack and so destroyed when the API is unloaded.
|
|
* The ``loot_lang_any`` constant. The ``loot_lang_english`` constant
|
|
should be used instead.
|
|
|
|
0.8.1 - 2015-09-27
|
|
==================
|
|
|
|
Changed
|
|
-------
|
|
|
|
* Safety checks are now performed on file paths when parsing conditions (paths
|
|
must not reference a location outside the game folder).
|
|
* Updated Boost (1.59.0), libgit2 (0.23.2) and CEF (branch 2454) dependencies.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
* A crash when loading plugins due to lack of thread safety.
|
|
* The masterlist updater and validator not checking for valid condition
|
|
and regex syntax.
|
|
* The masterlist updater not working correctly on Windows Vista.
|
|
|
|
0.8.0 - 2015-07-22
|
|
==================
|
|
|
|
Added
|
|
-----
|
|
|
|
* Support for metadata syntax v0.8.
|
|
|
|
Changed
|
|
-------
|
|
|
|
* Improved plugin loading performance for computers with weaker multithreading
|
|
capabilities (eg. non-hyperthreaded dual-core or single-core CPUs).
|
|
* LOOT no longer outputs validity warnings for inactive plugins.
|
|
* Updated libgit2 to v0.23.0.
|
|
|
|
Fixed
|
|
-----
|
|
|
|
* Many miscellaneous bugs, including initialisation crashes and
|
|
incorrect metadata input/output handling.
|
|
* LOOT silently discarding some non-unique metadata: an error will now
|
|
occur when loading or attempting to apply such metadata.
|
|
* LOOT's version comparison behaviour for a wide variety of version string
|
|
formats.
|
|
|
|
0.7.1 - 2015-06-22
|
|
==================
|
|
|
|
Fixed
|
|
-----
|
|
|
|
* "No existing load order position" errors when sorting.
|
|
* Output of Bash Tag removal suggestions in ``loot_write_minimal_list()``.
|
|
|
|
0.7.0 - 2015-05-20
|
|
==================
|
|
|
|
Initial API release.
|