• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

loot / libloot / 25071265585
94%
master: 94%

Build:
Build:
LAST BUILD BRANCH: update-libloadorder
DEFAULT BRANCH: master
Ran 28 Apr 2026 06:44PM UTC
Jobs 2
Files 37
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

28 Apr 2026 06:43PM UTC coverage: 94.23% (+0.03%) from 94.202%
25071265585

push

github

Ortham
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 aft... (continued)

128 of 147 new or added lines in 6 files covered. (87.07%)

24 existing lines in 5 files now uncovered.

12347 of 13103 relevant lines covered (94.23%)

143.08 hits per line

Uncovered Changes

Lines Coverage ∆ File
10
90.42
2.05% src/archive/bsa.rs
6
50.0
0.0% src/archive/error.rs
2
78.57
0.0% src/archive/mod.rs
1
89.39
0.0% src/archive/ba2.rs

Coverage Regressions

Lines Coverage ∆ File
8
50.0
0.0% src/archive/error.rs
8
97.72
0.0% src/plugin/mod.rs
4
89.39
0.0% src/archive/ba2.rs
2
78.57
0.0% src/archive/mod.rs
2
97.39
0.0% src/archive/parse.rs
Jobs
ID Job ID Ran Files Coverage
1 25071265585.1 28 Apr 2026 06:44PM UTC 37
94.17
GitHub Action Run
2 25071265585.2 28 Apr 2026 06:44PM UTC 37
94.15
GitHub Action Run
Source Files on build 25071265585
  • Tree
  • List 37
  • Changed 2
  • Source Changed 2
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #25071265585
  • a038e9a3 on github
  • Prev Build on rework-reading-assets (#25069354574)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc