Checklist
TagStudio Version
Alpha v9.6.4 (main)
Operating System & Version
macOS 15
Description
The .ts_ignore system is meant to act 1:1 with .gitignore, however the wcmatch library used to parse the .ts_ignore does not handle reincluding files in the same way - this causes an issue where files are able to be reincluded in ways that don't align with .gitignore, including one that's currently shown as an example in the documentation and acts as the default value when migrating a pre-.ts_ignore library set to EXCLUDE:
# Exclude all files except .jpg files (incorrect behavior for .gitignore)
*
!*.jpg
This does not match .gitignore behavior, where you need to reinclude folders first before reincluding anything else, or else they get skipped when parsing:
# Exclude all files except .jpg files (correct behavior)
*
!*/
!*.jpg
Expected Behavior
.ts_ignore parsing should match 1:1 with .gitignore behavior.
Correcting this issue should not screw with existing libraries, so an informational message may be needed.
Legacy libraries converted from the EXCLUDE list should use the correct pattern going forward.
Steps to Reproduce
Create the "exclude all" example from the description, and observe how it doesn't behave the same as .gitignore.
Logs
N/A
Checklist
TagStudio Version
Alpha v9.6.4 (
main)Operating System & Version
macOS 15
Description
The
.ts_ignoresystem is meant to act 1:1 with.gitignore, however thewcmatchlibrary used to parse the.ts_ignoredoes not handle reincluding files in the same way - this causes an issue where files are able to be reincluded in ways that don't align with.gitignore, including one that's currently shown as an example in the documentation and acts as the default value when migrating a pre-.ts_ignorelibrary set toEXCLUDE:This does not match
.gitignorebehavior, where you need to reinclude folders first before reincluding anything else, or else they get skipped when parsing:Expected Behavior
.ts_ignoreparsing should match 1:1 with.gitignorebehavior.Correcting this issue should not screw with existing libraries, so an informational message may be needed.
Legacy libraries converted from the
EXCLUDElist should use the correct pattern going forward.Steps to Reproduce
Create the "exclude all" example from the description, and observe how it doesn't behave the same as
.gitignore.Logs
N/A