4320 Commits
Author SHA1 Message Date
Oliver Hamlet a12fcfcef2 Set version and changelog for 0.29.5 0.29.5 2026-05-05 17:52:18 +01:00
Oliver Hamlet 6865181237 Update libloadorder to v18.8.2 2026-05-04 21:22:27 +01:00
Oliver Hamlet a038e9a3af Store asset paths instead of hashes
This avoids the issue of hash collisions, within any one archive, a plugin's archives, or between different plugins' archives. That means that sorting has accurate data on what the asset counts loaded by plugins are, and what the asset overlap between plugins, so it can make better decisions when adding overlap edges.

It does require that the archives include the folder and file names, which is apparently not strictly required, but it seems that having the names is practically required[1][2], and I verified that the parsing code can handle archives from all of the supported games (apart from Morrowind, which doesn't have its BSAs read by LOOT). That testing covered 321 archives containing 771246 folder records and 3404007 file records, including some mod BSAs/BA2s.

If an archive doesn't have the flags set for containing folder and file names, then libloot will log an error and effectively ignore its contents, so the new behaviour means that some archives that were (potentially inaccurately) taken into account before may now be ignored. Falling back to using the hashes for archives that don't have names would be an option, but that complicates comparison against archives that do have names, and I have no evidence that the fallback would be useful in practice.

This doubles the size of each map key and set entry (from 8 to 16 bytes), introduces another level of indirection when comparing keys or values, and also means that the name strings need to be stored, further increasing memory usage.

I tested the performance impact when sorting Skyrim SE and Starfield load orders, using LOOT v0.29.1 and comparing against using it with libloot v0.24.4:

- The Skyrim SE load order had 1630 plugins and 18 BSAs totalling 3.14 GB (not including Skyrim.esm's or its BSAs, which LOOT doesn't fully load).
  - Loading plugins (which includes parsing BSAs) was ~ 2% (5 ms) faster
  - Sorting was ~ 1% (21 ms) faster
  - Memory usage after sorting was 1 MB (< 1%) higher
  - These differences are probably within margin of error

- The Starfield load order had 31 plugins and 72 BA2s totalling 20.2 GB (not including Starfield.esm or its BA2s, which LOOT doesn't fully load).
  - Loading plugins (which includes parsing BA2s) was ~ 96% (423 ms) faster
  - Sorting speed was unchanged
  - Memory usage after sorting was 11 MB (12%) higher

It looks like the accuracy improvement is also faster, and the memory usage cost is relatively modest.

[1]: https://en.uesp.net/wiki/Oblivion_Mod:BSA_File_Format
[2]: https://en.uesp.net/wiki/Skyrim_Mod:Archive_File_Format
2026-04-28 19:43:15 +01:00
Oliver Hamlet b49085f9b9 Stop treating asset hash collisions as errors
Feedback from Robert on Discord[1] is that hash collisions can be very common for certain mods.

Since erroring causes that archive's assets to be ignored, it results in less accurate sorting behaviour than not erroring, and if there are many hash collisions then logging them just produces noise.

Instead, count the number of collisions and debug log a single statement if it's non-zero, so there's still some indication to aid debugging any unexpected sorting behaviour it causes.

[1]: https://discord.com/channels/473542112974077963/473542230095822848/1498060566344896673

The linked Discord message (and a few following messages) is:

> pretty sure for Skyblivion we have > Many duplicates all over our files
and i mean A LOT
> but 100s of thousands of files that i'd expect
> [...]
> quirks of the hashing formula the game uses
>
> -- Robert in #support at 2026-04-27, 21:36 PM
2026-04-28 19:00:27 +01:00
Oliver Hamlet 1970a0b30c Fix new clippy errors
The failing lint was added in Rust v1.95.0.
2026-04-28 19:00:22 +01:00
Oliver Hamlet 391b9ad7c9 Fix C++ test printers
It turns out that they were never used, I noticed this while debugging some LOOT tests, which have a copy of the same printers.h file.
2026-04-22 18:05:27 +01:00
Oliver Hamlet 56bafaead3 Set version and changelog for 0.29.4 0.29.4 2026-04-17 18:00:31 +01:00
Oliver Hamlet 828ce476e1 Update changelog 2026-04-16 18:23:44 +01:00
Oliver Hamlet 4b1ab4fe16 Update libloadorder to v18.8.1 2026-04-16 18:23:44 +01:00
Oliver Hamlet 022143786f Update rustc-hash from 2.1.1 to 2.1.2 2026-04-09 18:29:57 +01:00
Oliver Hamlet b87b7f2137 Update regress from 0.11.0 to 0.11.1 2026-04-09 18:29:57 +01:00
Oliver HamletandGitHub 3db0ce59cb Merge pull request #242 from loot/dependabot/npm_and_yarn/nodejs/lodash-4.18.1
Bump lodash from 4.17.23 to 4.18.1 in /nodejs
2026-04-09 18:27:31 +01:00
Oliver Hamlet 7104c92bef Set version and changelog for 0.29.3 0.29.3 2026-04-07 18:23:11 +01:00
Oliver Hamlet 180a70d2ca Update libloadorder to v18.7.0
Make it the minimum version to ensure that Starfield v1.16.236.0's and the Terran Armada DLC's new plugins are supported.
2026-04-07 18:15:37 +01:00
Oliver HamletandGitHub a7250a16cf Merge pull request #238 from loot/dependabot/uv/docs/requests-2.33.0
Bump requests from 2.32.4 to 2.33.0 in /docs
2026-04-06 22:04:45 +01:00
Oliver HamletandGitHub 7a6db0b111 Merge pull request #240 from loot/dependabot/uv/docs/pygments-2.20.0
Bump pygments from 2.19.1 to 2.20.0 in /docs
2026-04-06 22:04:01 +01:00
Oliver HamletandGitHub a818bbd25a Merge pull request #241 from loot/dependabot/github_actions/astral-sh/setup-uv-8.0.0
Bump astral-sh/setup-uv from 7.3.1 to 8.0.0
2026-04-04 19:10:55 +01:00
dependabot[bot]andGitHub df7b0f3451 Bump requests from 2.32.4 to 2.33.0 in /docs
Bumps [requests](https://github.com/psf/requests) from 2.32.4 to 2.33.0.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.4...v2.33.0)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.33.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-04 17:40:03 +00:00
dependabot[bot]andGitHub c6d0d1efdb Bump pygments from 2.19.1 to 2.20.0 in /docs
Bumps [pygments](https://github.com/pygments/pygments) from 2.19.1 to 2.20.0.
- [Release notes](https://github.com/pygments/pygments/releases)
- [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES)
- [Commits](https://github.com/pygments/pygments/compare/2.19.1...2.20.0)

---
updated-dependencies:
- dependency-name: pygments
  dependency-version: 2.20.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-04 17:40:02 +00:00
Oliver Hamlet b5a96d1b94 Update Sphinx to v9.1.0
It drops compatibility with Python 3.11, but I don't think that matters: the dev container is based on Debian Trixie, which has 3.13, and CI is configured to use 3.13.
2026-04-04 18:30:13 +01:00
Oliver Hamlet 9d73fb5800 Update Doxygen config file
This was done by running `doxygen -u Doxyfile`, using doxygen v1.9.8, as that's the oldest version used in CI, and the latest version (1.16.1) doesn't warn about any other settings being obsolete.
2026-04-04 18:15:32 +01:00
Oliver Hamlet a9d323eb7e Fix C++ header doc comments
Doxygen warned about these.
2026-04-04 17:57:19 +01:00
Oliver Hamlet e96c177e51 Minor update to Sphinx config
The map form of source_suffix was introduced in Sphinx v1.8.0.
2026-04-04 17:56:13 +01:00
Oliver HamletandGitHub 596af53f84 Merge pull request #227 from loot/dependabot/npm_and_yarn/nodejs/ava-7.0.0
Bump ava from 6.4.1 to 7.0.0 in /nodejs
2026-04-04 17:41:30 +01:00
dependabot[bot]andGitHub f55a64df9d Bump ava from 6.4.1 to 7.0.0 in /nodejs
Bumps [ava](https://github.com/avajs/ava) from 6.4.1 to 7.0.0.
- [Release notes](https://github.com/avajs/ava/releases)
- [Commits](https://github.com/avajs/ava/compare/v6.4.1...v7.0.0)

---
updated-dependencies:
- dependency-name: ava
  dependency-version: 7.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-04 16:35:31 +00:00