Skip to content

Releases: emmercm/igir

v2.0.5

10 Oct 23:51
cd28d78
Compare
Choose a tag to compare

Release Highlights

Feature: {jelos} output token added

Thank you @samwelnella for this code contribution!

Just Enough Linux Operating System (JELOS) is a Linux distribution for a number of Anbernic, Powkiddy, Hardkernel, and other devices that use its own proprietary directory structure. See the official docs on adding games to a JELOS device.

All changes

6 October 2023 - cd28d78 - v2.0.5 (#746)
6 October 2023 - 8ca55d7 - CI: comment a new contributor's first PR (#745)
6 October 2023 - f29dcfb - Feature: add {jelos} output token (#698)
5 October 2023 - c044b39 - Refactor: calculate checksums of archived files using streams (#744)
3 October 2023 - 33c5865 - Chore: Hacktoberfest topic & labels (#741)
3 October 2023 - 07bad62 - Feature: calculate file MD5 & SHA1 checksums (#630)

igir, and other open-source projects like it, are a labor of love. They wouldn't be nearly as meaningful without the community supporting them. Constructive feedback and general positivity will always be welcome. Be kind to others, and be kind to yourselves.
❤️ Christian

v2.0.4

01 Oct 21:08
359e711
Compare
Choose a tag to compare

Release Highlights

Fixes: ROM set merging & splitting

@nottanumber continues to graciously help test edge cases in merging & splitting MAME sets, in lieu of proper MAME ListXML documentation existing on the internet.

Fix: non-fullnonmerged (nonmerged, split, merged) sets now include BIOS ROMs that don't exist in a BIOS set somewhere else. This would have affected machines such as aes that aren't marked as a device, have no parent, and yet specify some BIOS ROMs.

Fix: status="nodump" ROMs are now ignored as there is no chance of finding them, and DATs do not have checksum information for them. mame -verifyroms will report these games as "is best available."

Fix: don't infer parent/clone information for DATs that have some

@jmf626 brought up some cases where DAT parent/clone information should be trusted and parent/clone inference is dangerous, such as different series numberings in different regions (e.g. NES Black Bass, The (USA) is the same game as Black Bass II, The (Japan)).

Parent/clone inference will no longer be performed if a DAT has any parent/clone information.

All changes

1 October 2023 - 359e711 - v2.0.4 (#735)
1 October 2023 - 12fd9eb - CI: move Renovate lockFileMaintenance to a different day (#734)
1 October 2023 - c306663 - CI: Renovate updateNotScheduled:true (#733)
1 October 2023 - 0a12adf - Refactor: filter to unique array values, comparing mapped values (#732)
1 October 2023 - 8cf3f1c - Chore: pin dependency jest-extended to 4.0.1 (#730)
1 October 2023 - 7c0042a - Docs: npm run from main instructions (#731)
1 October 2023 - 6e5b4e9 - Fix: ignore status:nodump ROMs when merging & splitting (#728)
1 October 2023 - add9ec9 - Fix: get rid of Jest ESM hacks (#729)
30 September 2023 - c76dcc0 - Fix: only exclude BIOS ROMs found in referenced romOf game (#727)
30 September 2023 - 4e62a8c - Fix: don't infer parents for DATs that already have parent/clone info (#723)

igir, and other open-source projects like it, are a labor of love. They wouldn't be nearly as meaningful without the community supporting them. Constructive feedback and general positivity will always be welcome. Be kind to others, and be kind to yourselves.
❤️ Christian

v2.0.3

30 Sep 00:38
b95cc4c
Compare
Choose a tag to compare

Release Highlights

Feature: allow incomplete ROM sets

There may be rare instances that you want to keep/write incomplete ROM sets, where not every ROM in a multi-ROM game is found in any input director. For those occasions, there is a new --allow-incomplete-sets option. The default is still to only keep full ROM sets, as games typically are not playable without all of their ROMs.

Fix: splitting & merging parent/clones with duplicate filenames but differing checksums.

@nottanumber has been on a roll reporting edge cases with the new ROM set merge/split option added in v2. This bug fix affects games where the parent and at least one clone has a ROM with the same filename but with a different checksum. For example:

<machine name="ddonpach" sourcefile="misc/cave.cpp">
    <description>DoDonPachi (World, 1997 2/ 5 Master Ver.)</description>
    <year>1997</year>
    <manufacturer>Cave (Atlus license)</manufacturer>
    <!-- ... -->
    <rom name="eeprom-ddonpach.bin" size="128" crc="315fb546" sha1="7f597107d1610fc286413e0e93c794c80c0c554f" region="eeprom" offset="0"/>
    <!-- ... -->
</machine>
<machine name="ddonpacha" sourcefile="misc/cave.cpp" cloneof="ddonpach" romof="ddonpach">
    <description>DoDonPachi (2012/02/12 Arrange Ver. 1.1) (hack)</description>
    <year>2012</year>
    <manufacturer>hack (trap15)</manufacturer>
    <!-- ... -->
    <rom name="eeprom-ddonpach.bin" size="128" crc="2df16438" sha1="4881b70589a97e2420feb6d6e6737273beeff303" region="eeprom" offset="0"/>
    <!-- ... -->
</machine>

All changes

30 September 2023 - b95cc4c - v2.0.3 (#722)
29 September 2023 - c4cc554 - CI: don't exempt any assignees from stale issue checks (#721)
29 September 2023 - 768d71a - Feature: allow incomplete ROM sets (#718)
29 September 2023 - 381e4d5 - Fix: merging parent/clone with same ROM filename and different checksum (#719)
29 September 2023 - 1821e5b - Chore: update docker/setup-qemu-action action to v3 (#711)
28 September 2023 - 78af969 - Chore: update dependency @types/node to v18.18.0 (#716)
28 September 2023 - 7aba763 - Chore: update dependency @types/node to v18.17.19 (#706)
28 September 2023 - 0abf7f9 - Chore: update ESLint to v6.7.3 (#714)
28 September 2023 - 204e063 - Chore: update dependency @types/semver to v7.5.3 (#713)
28 September 2023 - 6b88149 - Chore: update actions/checkout action to v4 (#710)
28 September 2023 - 765bc30 - Chore: update Jest (#708)
28 September 2023 - 1221c65 - Chore: update ESLint (#707)
28 September 2023 - efb6acb - Chore: update dependencies (#705)
28 September 2023 - b021477 - Chore: update adRise/update-pr-branch action to v0.7.0 (#709)
28 September 2023 - 1d1acaa - Fix: prefer the fixdat command in tests (#704)
28 September 2023 - 2684f10 - Fix: add an end-to-end test for --zip-dat-name (#703)

igir, and other open-source projects like it, are a labor of love. They wouldn't be nearly as meaningful without the community supporting them. Constructive feedback and general positivity will always be welcome. Be kind to others, and be kind to yourselves.
❤️ Christian

v2.0.2

27 Sep 23:57
682fec9
Compare
Choose a tag to compare

Release Highlights

Feature: added {gameRegion} and {gameLanguage} output tokens

New {gameRegion} and {gameLanguage} output tokens have been added, deprecating the existing {datReleaseRegion} and {datReleaseLanguage} tokens. The difference with these new tokens is they can be replaced with inferred region and language information, rather than only coming from game "releases" defined in DATs. This makes the new tokens consistent with the region and language information used by --filter-region, --filter-language, --prefer-region, and --prefer-language.

The {datReleaseRegion} and {datReleaseLanguage} tokens will still work for now but will be removed in the future.

Thank you @samwelnella for the suggestion!

Fix: subdirectory structure within output .zip archives

The support for Hardware Target Game Database SMDBs in v1.4.0 broke the ability for output .zip archives to have subdirectories within them, which is the expected structure when building "merged" MAME ROM sets. This has been fixed.

Thank you @nottanumber for the continued MAME bug reports!

All changes

27 September 2023 - 682fec9 - v2.0.2 (#702)
27 September 2023 - 45cd8e3 - Fix: respect output archive entry paths with subdirectories (#701)
26 September 2023 - c3659a2 - Refactor: Game and Machine "with" recreation methods (#700)
26 September 2023 - 94e503a - Feature: {gameRegion} and {gameLanguage} tokens (#699)

igir, and other open-source projects like it, are a labor of love. They wouldn't be nearly as meaningful without the community supporting them. Constructive feedback and general positivity will always be welcome. Be kind to others, and be kind to yourselves.
❤️ Christian

v2.0.1

24 Sep 22:55
cd4fe62
Compare
Choose a tag to compare

Feature: new option to control grouping ROMs by their game name

The default behavior of igir is to automatically group extracted files for games with multiple files together in a subdirectory. For example:

# Game with multiple files is grouped:
Metal Gear Solid - VR Missions (USA)/Metal Gear Solid - VR Missions (USA).cue
Metal Gear Solid - VR Missions (USA)/Metal Gear Solid - VR Missions (USA).bin

# Game with a single file is not grouped:
Metal Gear Solid (USA).gbc

A new --dir-game-subdir <mode> option has been added to allow forcing this behavior for games with a single file (--dir-game-subdir always), or to turn the behavior off entirely (--dir-game-subdir never).

Fix: non-retail games being considered retail for {gameType}

igir was making an assumption that games with any releases in DATs should be considered "verified" which ends up giving them a "Retail" {gameType}. This was a poor assumption, as DATs such as No-Intro's Game Boy Color have (Proto) and other non-retail games with releases.

Thank you @samwelnella for this bug report after quite a bit of debugging!

Fix: duplicate files in MAME zips

The official MAME DATs have duplicate files for some machines such as neogeo where the filename, size, and checksum are all the same but some metadata that igir doesn't care about is different. igir now filters out duplicate files from these sets.

Thank you @nottanumber for this bug report!

All changes

24 September 2023 - cd4fe62 - v2.0.1 (#694)
24 September 2023 - 9b4c47b - Fix: de-duplicate split/merged ROM sets (#693)
24 September 2023 - af07369 - Feature: option to control when ROMs get grouped by their game name (#692)
24 September 2023 - 8be3150 - Fix: don't assume games with releases are "verified" (#690)

igir, and other open-source projects like it, are a labor of love. They wouldn't be nearly as meaningful without the community supporting them. Constructive feedback and general positivity will always be welcome. Be kind to others, and be kind to yourselves.
❤️ Christian

v2.0.0

23 Sep 07:55
33a016d
Compare
Choose a tag to compare

v2: The parent/clone infer, slice, and dice edition

You're gonna be in a great mood all day, because you're going to be parent/cloning your troubles away with igir. Stop having a boring ROM collection, stop having a boring life.

🚀 New features

Parent/clone inference

A number of DAT groups, such as Redump, don't provide parent/clone information in their DATs. Unless you use a tool such as SabreTools you won't be able to create 1G1R sets from these DATs.

No longer! igir can now associate most games together into parent/clone sets. There is no other widely used ROM manager that has this feature.

Here are some variants igir can group together with ease:

  • Differing regions
  • Differing languages
  • Differing release types (alpha, beta, debug, demo, prototype, sample, etc.) - including No-Intro, TOSEC, and GoodTools style tags!
  • Differing retail types (collector's edition, limited edition, reprint, rerelease, etc.)

One caveat is: igir isn't able to group together games that have different localized names, i.e. Pokemon - Blue Version (USA, Europe) (SGB Enhanced) and Pokemon - Edicion Azul (Spain) (SGB Enhanced).

As the updated docs say, this type of inference will never be perfect, so please open a GitHub issue if you find a scenario that isn't working right!

MAME unmerged/split/merged set creation

igir can now use parent/clone information from MAME DATs to create full un-merged, un-merged, split, and merged ROM sets.

This change comes with a whole new set of arcade documentation to explain merge types and how to build ROM sets for arcade emulators. The DATs page has also been updated with arcade information.

Other than CHD scanning, handling ROM set merging was one of the last major feature gaps igir had vs. other ROM managers.

🐞 Fixes

Non-preferred ROMs are now reported as "ignored"

When running igir in 1G1R (--single) mode, both CLI & CSV reports would indicate that clones that were not written to the output directory were "missing." Now, the preferred clone from a parent/clone set is reported as "found," and all others are reported as "ignored."

Thank you @feurry for this bug report!

"Unmatched" ROMs in reports are now called "unused"

To more accurately describe what's actually happening, files in input directories that are not used as a source for any output file are now described as "unused."

The word "unmatched" was confusing because it could imply these files did not match any DAT, which might not be the case. Files might not be used because they're a duplicate, were filtered out, or weren't preferred based on 1G1R (--single) settings.

Thank you @feurry for this suggestion!

CLI & CSV reports now respect --only-device

This was an oversight in v1.8.1.

Zip files are re-read for testing

Since v1.7.0, zip files in the output directory were not being re-read from disk in order to test them. This was a bug with some efficiency features added in that version.

📐 Command & option consistency

The --fixdat option has been replaced with the fixdat command

The --fixdat option was the only option to cause file output, so for consistency, it was turned into a command.

The --fixdat option will still work for now, but it will print a deprecation warning when used.

The --*-filter options have been renamed to --filter-*

Other options that share similar behavior also share common prefixes, such as --dir-* and --prefer-*, so the --*-filter options (--language-filter, --region-filter) got the same prefix treatment.

The --*-filter options will still work for now, but they will print a deprecation warning when used.

The --dat-regex* options have been renamed to --dat-name-regex*

...and new --dat-description-regex* options have been added.

Unofficial MAME XML DATs, in particular, tend to have fairly sparse information in their name, so it may be desirable to filter based on their description instead.

The --dat-regex* options will still work for now, but they will print a deprecating warning when used.

📂 Output token updates

{batocera}

Support has been added for:

  • Nintendo DS
  • Nintendo 3DS

Huge shoutout to @dcramer for their code contribution and GitHub Sponsors support!

🙏 Thank you

I started igir in July 2022 because I was excited to eventually receive my Analogue Pocket preorder, but also because I was frustrated by the existing ROM management tools available. I found other tools unintuitive, lacking 1G1R functionality, and locked to single operating systems. And as a fallible software engineer, I thought I could do better.

Some stats about igir:

I just want to say thank you to everyone who has given me support on GitHub or Reddit, or even if you've just used igir once. This is easily the most popular code project I've ever managed, and I can't wait to see where it goes in the following years 🚀.

All changes

23 September 2023 - 33a016d - v2.0.0 (#687)
23 September 2023 - c334118 - Feature: DAT description regex options (#679)
23 September 2023 - 33e0f27 - Docs: usage updates (#686)
23 September 2023 - b1fb461 - Fix: fixdat command rather than option (#566)
23 September 2023 - 0987692 - Fix: --filter option prefix consistency (#565)
23 September 2023 - a9f7353 - Fix: rename UNMATCHED report status to UNUSED (#668)
23 September 2023 - 8688d68 - Fix: don't report non-preferred clones as missing (#667)
22 September 2023 - 1c9366d - Fix: catch & log ROM header processing exceptions (#685)
22 September 2023 - 2e609e6 - Refactor: default --merge-roms fullnonmerged (#684)
22 September 2023 - 4701b8a - Refactor: reformat the DAT processing progress bar (#683)
22 September 2023 - 4ee5583 - Fix: create a fresh Zip object when testing (#682)
22 September 2023 - 551436a - Fix: Array[0] is not guaranteed to be defined (#680)
22 September 2023 - d141497 - CI: lower Renovate's TypeScript priority (#681)
22 September 2023 - f46ed92 - Docs: update (#678)
21 September 2023 - 0765e9d - Feature: infer parent/child relationships between games (#542)
21 September 2023 - c952f2c - Feature: DAT ROM merger & splitter (#666)
21 September 2023 - 86efbdd - Refactor: start enums at 1 (#677)
21 September 2023 - caafc5b - CI: don't limit concurrency on github.head_ref for on:pull_request (#675)
21 September 2023 - acefe02 - Fix: only consider writing candidates with files ([#674](http...

Read more

v1.9.4

16 Sep 17:20
ff379ae
Compare
Choose a tag to compare

Release Highlights

Feature: test command checks filesize when a ROM checksum is unknown

There are situations such as patching or header removal where the output file's expected checksum is unknown, so it can't be validated. But in some situations, the expected filesize is known, so the test command will now validate it.

Fix: clean command won't delete fixdats

Per-DAT fixdats were not being excluded from deletion with the clean command, resulting in them being deleted right after being created. This has been fixed.

Thank you @feurry for the bug report!

Semi-breaking: minimum Node.js version raised

Because of dependency management reasons, igir's minimum Node.js version has been raised from >=14.18.0 to >=16.3.0. Do keep in mind that Node.js 16 recently reached an early end-of-life on September 11th, so you should strongly consider upgrading to the latest LTS version (Node.js 18).

A Node.js end-of-life warning message has been added to igir to recommend users upgrade their version if the current date is past the version's end-of-life date.

All changes

16 September 2023 - ff379ae - v1.9.4 (#660)
15 September 2023 - 98a8ad2 - CI: update GitHub issue templates (#659)
15 September 2023 - ce19ae5 - CI: GitHub Actions stale issue labeler & closer (#658)
15 September 2023 - 14c1eab - CI: update GitHub labels (#657)
15 September 2023 - 686a6a3 - Fix: don't clean fixdats (#656)
11 September 2023 - 8935a0a - Chore: increase test coverage (#651)
10 September 2023 - b2f7448 - Feature: test written file & entry size (#649)
30 August 2023 - 1eafa33 - Chore: update ESLint to v6 (major) (#636)
30 August 2023 - a2404b2 - Refactor: use the nullish operator where possible (#644)
30 August 2023 - d7cc126 - Feature: Node.js version end-of-life checker & logger (#643)
29 August 2023 - e0f0a69 - Chore: update dependency archiver to v6 (#608)
29 August 2023 - d503f88 - Chore: update lockfile (#610)
29 August 2023 - d175db3 - Chore: update dev dependencies (#607)
29 August 2023 - 8a30283 - Chore: update ESLint (#635)
29 August 2023 - 8bb7226 - Chore: update dependencies (#604)
29 August 2023 - 154de61 - Chore: update dependency typescript to v5.2.2 (#605)
29 August 2023 - ffb0fe2 - Chore: update Jest (#606)
29 August 2023 - 1c04034 - Chore: increase minimum Node.js version to v15 (#640)
29 August 2023 - 594211c - CI: comment back on the version bump PR after publishing to npm (#642)
29 August 2023 - 1c1a4b3 - Chore: Renovate npm strict engines.node constraint filtering (#641)
28 August 2023 - 4c04558 - Deps: Renovate allowedPostUpgradeCommands fix (#638)
28 August 2023 - a0e246f - Deps: rebase Renovate PRs when conflicted (#637)
28 August 2023 - 73f54d3 - CI: comment back on the version bump PR after publishing to npm (#634)
28 August 2023 - fcb7d6b - Docs: contribution guidelines (#633)
28 August 2023 - 1ee154e - CI: JSDoc ESLint rules (#632)
27 August 2023 - 19112ff - CI: remove a lot of eslint-disables (#631)
26 August 2023 - 18c7e1c - CI: Node.js compile on-demand workflow dispatch (#629)
26 August 2023 - 36f5a4b - CI: comment back on the version bump PR after drafting a release (#627)
26 August 2023 - 82e05e6 - CI: Node.js compile on-demand workflow dispatch (#628)

igir, and other open-source projects like it, are a labor of love. They wouldn't be nearly as meaningful without the community supporting them. Constructive feedback and general positivity will always be welcome. Be kind to others, and be kind to yourselves.
❤️ Christian

v1.9.3

26 Aug 06:07
4239e0b
Compare
Choose a tag to compare

Release Highlights

Feature: npm package provenance (security)

igir is now being published to npm with package provenance.

I would search "supply chain attacks" if you're curious, but the summary is: anyone can validate that igir (and other open-source projects like it) does not itself contain any malicious code, but that does not guarantee the version published to npm wasn't manipulated by a malicious actor during the build & publish process. With package provenance, packages built on trusted platforms (such as GitHub Actions) can prove that what is published to npm is exactly what was under source control at the time, and there is a certificate chain for it.

That's a lot of words to say: you can trust new versions of igir on npm even more than you did before.

Feature/fix: detecting symlink permissions on Windows

Some newer versions of Windows require administrator privileges to create symlinks, even when the current user has full permissions on the source & target directories. igir now tries to detect this lack of permissions at startup when specifying the igir symlink command, and will offer the advice to try "run as administrator."

Fix: --dir-letter-limit with multi-ROM games

Unfortunately, v1.9.1 didn't fully fix all of the issues introduced in v1.8.0.

Multi-ROM games were being sorted by their ROM name, not their game name. Hopefully this has been fixed for good.

As an example, the No-Intro Commodore Amiga (Flux) DAT has the game:

<game name="Apidya (Unknown)">  
  <description>Apidya (Unknown)</description>  
  <rom name="disk1\apidya_disk1_00.0.raw" size="265730" crc="555b1be8" md5="b1f8d70e604226932b07fd4689bcf585" sha1="af96ba0c5682f16b2b8dcb0547876c51c918fc87"/>  
  <rom name="disk1\apidya_disk1_00.1.raw" size="256990" crc="9ef64ba6" md5="e99e9d0353df6e3262178b639a974489" sha1="1dee444cbadb98fe1a1058f014b943bee9e5caaa"/>
  <!-- ... -->
</game>

ROMs from this games were getting sorted into the "D" subdirectory because of the leading "D" in disk*_apidya_*.raw. But because this is a multi-ROM game, it should get sorted into the "A" subdirectory because of the leading "A" in Apidya (Unknown)/.

Fix: the ROM writer threads could exceed --writer-threads <num>

If multiple DATs were written at once, there was a chance that the ROM writer threads could exceed the intended max. This would result in higher CPU and seemingly long file write times.

All changes

26 August 2023 - 4239e0b - v1.9.3 (#625)
26 August 2023 - 8fd1ddd - CI: comment back on the version bump PR after drafting a release (#624)
26 August 2023 - 74ce5a5 - CI: GitHub Actions efficiency (#623)
26 August 2023 - 0463bbf - CI: add some console logs to debug tests in Windows (#622)
26 August 2023 - 346e138 - Fix: logger log level prefix CLI formatting (#621)
25 August 2023 - 7067751 - Feature: add {batocera} support for Amiga CDTV, MSX2, MSX2+, and MSX TurboR (#620)
25 August 2023 - 1dbfc9e - Fix: Windows symlink permissions check (#619)
25 August 2023 - cb59eb1 - CI: Renovate: separate ESLint updates, try to fix TypeScript files (#618)
25 August 2023 - 458dce0 - CI: Renovate: limit PR open time, use GitHub auto-merge (#617)
25 August 2023 - 3903204 - Fix: pad the last line of wrapped logs with spaces (#615)
25 August 2023 - b7e4bc2 - Fix: prevent writer threads from exceeding the maximum (#616)
25 August 2023 - 76c9f63 - Fix: dir letter of games with multiple ROMs (#613)
25 August 2023 - 5072263 - Refactor: eliminate some File & ArchiveEntry promises (#612)
25 August 2023 - 3668793 - Refactor: underline notice logs (#614)
25 August 2023 - be4a6da - CI: publish to npm with provenance (#611)
24 August 2023 - 2825d6b - Refactor: more efficient array duplicate element removal (#603)

igir, and other open-source projects like it, are a labor of love. They wouldn't be nearly as meaningful without the community supporting them. Constructive feedback and general positivity will always be welcome. Be kind to others, and be kind to yourselves.
❤️ Christian

v1.9.2

24 Aug 05:09
5633a8f
Compare
Choose a tag to compare

Release Highlights

Feature: new {batocera} output token has been added

Batocera uses a proprietary directory structure, and igir now has support to sort ROMs into the correct folders, similar to other emulator frontend tokens.

Huge thank you to @dcramer for this code contribution, your sponsorship, and for helping me work through some CI difficulties as the first contributor in a while!

See the Batocera page in the igir docs for more information.

Fix: determining ROM output directories to clean

v1.9.1 introduced a regression where igir was no longer finding the right ROM output directories to clean, resulting in some excess error log spam. The issue should be fixed, and better end-to-end tests have been added.

Thank you @docbobo for the bug report!

All changes

24 August 2023 - 5633a8f - v1.9.2 (#601)
24 August 2023 - aecf67c - CI: fix PR renamer for version titles (#602)
24 August 2023 - 7bfeb51 - Refactor: isolate ROM & ReleaseCandidate chained processing steps (#600)
23 August 2023 - e29aa4d - Docs: update (#599)
23 August 2023 - 8d2f8e8 - CI: use github.head_ref to limit workflow concurrency (#598)
23 August 2023 - 742663a - Feature: add a number of {batocera} systems (#597)
23 August 2023 - 3894d89 - Feature: add Xbox and Xbox 360 support for {batocera} (#596)
23 August 2023 - 8b97a41 - CI: add GitHub Actions workflow linter (#594)
23 August 2023 - c4e1abf - Fix: npm run build on Windows (#593)
22 August 2023 - 0278c1d - CI: escape PR titles for automatic renaming (#595)
22 August 2023 - 7842ba4 - Feature: add {batocera} output token (#575)
22 August 2023 - c9c3337 - CI: use on:pull_request_target for PR-modifying workflows (#592)
22 August 2023 - f996b38 - Docs: writing archives (#591)
22 August 2023 - 19e2c43 - CI: PR title enforcement & automatic renamer (#590)
22 August 2023 - 20c4219 - CI: explicit permissions for PR commenter (#589)
22 August 2023 - 40e1b89 - Fix: output cleaning directories (#588)
20 August 2023 - 4d35c98 - CI: run PR commenter with PRs from forks (#585)
20 August 2023 - 5b771c8 - Fix: calculate raw file checksum when overwriting invalid files (#584)
20 August 2023 - c941e24 - CI: release drafter GitHub Action should use new version number (#583)

igir, and other open-source projects like it, are a labor of love. They wouldn't be nearly as meaningful without the community supporting them. Constructive feedback and general positivity will always be welcome. Be kind to others, and be kind to yourselves.
❤️ Christian

v1.9.1

19 Aug 15:23
ea21409
Compare
Choose a tag to compare

Release Highlights

There are a lot of fixes and tweaks in this release. I'm intending a v2 release when I'm able to finish the parent/child inference feature, and had been holding back these changes for that, but there have been enough bug fixes that warrant an earlier release.

Feature: progress bar totals increment during file scans

When scanning directories with a lot of files (likely most obvious with --input option), igir would wait until the end of file scanning to indicate how many files it had found. Now, when specifying directory names (unfortunately globs aren't supported right now), the total file count will increment to help indicate that progress is being made.

Optimization: don't calculate "raw" file CRCs when not testing output files

Calculating the checksums of large files (e.g. BIN/CUEs, ISOs, CHDs, etc.) can take a really long time. When copying or moving only (and not extracting or zipping), and not testing them (i.e. just igir copy or igir move), igir will no longer bother calculating the expected checksum of these files.

Fix: fatal error with invalid progress bar size

@netwaretcs reported a bug that I see infrequently during development and was hoping was limited to local change instability. Sometimes igir would full crash when the "in progress" section of the progress bar had a negative number, a race condition I'm still trying to pin down. The crash should be prevented, at least.

Fix: --dir-letter-limit with multi-ROM games

The --dir-letter-limit option added in v1.8.0 was causing multi-ROM games to get sorted into odd folders, sometimes even outside of the --dir-letter folder. This has been fixed.

Fix: self-closing tags in MAME DATs

@kbullett found a bug with older MAME DATs that make use of XML self-closing tags causing crashes in igir. This should be fixed, but please continue to report any issues you see with non-DTD-compliant DATs!

Fix: deletion of moved archives of games with duplicate ROMs

@docbobo reported a bug where igir would not delete single-game archives of games that contain duplicate ROMs (e.g. duplicate BIN/CUE tracks). This should be fixed.

All changes

19 August 2023 - ea21409 - v1.9.1 (#582)
19 August 2023 - 62c0303 - CI: ShellCheck (#580)
19 August 2023 - 423c8b8 - Fix: delete moved archives of games that contain duplicate ROMs (#581)
19 August 2023 - 79c7e72 - Refactor: use TypeScript sets where appropriate (#577)
19 August 2023 - cce309e - Git: update Husky pre-commit for POSIX sh Compatibility (#578)
18 August 2023 - a0636ac - Refactor: eliminate TypeScript "as" keyword (#573)
14 August 2023 - 51cb6fc - UX: warn when specifying --dir-dat-* options that don't make sense (#571)
14 August 2023 - 88bbde7 - Chore: add 1G1R tests (#570)
14 August 2023 - 754fcde - Chore: update dependency node to v18.17.1 (#562)
14 August 2023 - 2674361 - Fix: stop & cleanup the progress bars on SIGINT (#572)
14 August 2023 - f46cf5b - Fix: protections against self-closing tags in XML DATs (#569)
10 August 2023 - 6d4e249 - Feature: don't calculate CRCs for raw files when not testing (#567)
10 August 2023 - fb7d92a - Fix: dir letter limit with multi-ROM games (#564)
10 August 2023 - 1092039 - Refactor: break out ROM output path code into its own file (#563)
7 August 2023 - ed1d5b4 - Feature: add Belgium & Scandinavia as regions (#561)
7 August 2023 - 25b6a9d - Docs: new logo (#543)
7 August 2023 - 96ceec8 - Feature: increment progress bar totals during file scans (#560)
7 August 2023 - bad93bd - Docs: update (#559)
6 August 2023 - ed1224c - Docs: update (#550)
6 August 2023 - 6056738 - Fix: progress bar can't have negative "in progress" value (#558)
5 August 2023 - 38bf781 - CI: release drafter GitHub Action should use new version number (#555)

Sponsors

  • @dcramer thank you for being the first project sponsor! It means a lot, and your code contributions already have been awesome.

igir, and other open-source projects like it, are a labor of love. They wouldn't be nearly as meaningful without the community supporting them. Constructive feedback and general positivity will always be welcome. Be kind to others, and be kind to yourselves.
❤️ Christian