Skip to content

Releases: justinfx/gofileseq

v3.0.2 Release

04 Feb 20:45

Choose a tag to compare

  • go/cpp - Enable antlr4 parser SLL prediction mode first, with LL fallback. Huge performance improvement for almost
    all cases (1000 sequence test: 189ms -> 5.5ms)

v3.0.1 Release

04 Feb 20:03

Choose a tag to compare

cpp: This patch release restores previous support for C++11 by downgrading the ANTLR4 version to 4.9.3 for C++ code generation and runtime.

v3.0.0 Release

03 Feb 21:24

Choose a tag to compare

Major Release Version 3.0.0

BREAKING CHANGES:

  • Go: Requires Go 1.18+ (for generics support in dependencies)
  • C++: Requires C++17 (for ANTLR4 runtime support)
  • Internal parsing implementation completely rewritten in both Go and C++

MAJOR CHANGES:

This major version removes the regular expression parsing of sequence patterns and implements the logic using an
ANTLR4 grammar. The grammar replicates all existing parsing rules in a more verbose and maintainable format,
making it easier to extend new rules or reason about existing ones.

Grammar-Based Parsing

  • Parser code is generated from a single grammar file (grammar/fileseq.g4)
  • Grammar is shared between Go and C++ implementations
  • Grammar-first design minimizes language-specific visitor logic
  • Ensures consistent behavior with the canonical Python implementation
  • Easier to port to additional languages in the future

Improved Edge Case Handling And Test Coverage

Defensive Limits (Go & C++)

Added protections to prevent hangs and excessive memory usage:

  • Range size limit: 100 million frames maximum
  • Y modifier limit: 1 million frames (due to O(n²) performance)
  • Stagger iterations: 10,000 maximum
  • Chunk values: 1 billion maximum (prevents integer overflow)

These limits prevent pathological inputs from causing hangs or crashes while allowing all real-world use cases.

Bug Fixes

  • Fixed pre-existing Split() bug in Go implementation that caused nil pointer panics when splitting
    comma-separated frame ranges

C++ IMPLEMENTATION IMPROVEMENTS:

The C++ library has been significantly enhanced:

Build System (CMake)

  • Builds both static (.a) and shared (.so/.dylib) libraries
  • Static library is self-contained (ANTLR4 runtime merged in)
  • Shared library has ANTLR4 embedded (no external dependencies)

Same Grammar, Same Behavior

  • Uses identical ANTLR4 grammar as Go implementation
  • Defensive limits match Go implementation

DEVELOPMENT:

Go

  • Added go generate support for regenerating parser from grammar
  • Requires Java runtime for ANTLR code generation (development only)
  • Generated parser files are committed to the repository

C++

  • CMake-based build system (replaces old waf build)
  • Requires Java runtime for ANTLR code generation (development only)
  • Generated parser files are committed to the repository

COMPATIBILITY:

  • All existing functionality preserved
  • API remains unchanged
  • 100% backward compatible for consumers of the library
  • Python implementation remains the canonical reference

v2.14.1 Release

10 Jul 22:33
eb3db05

Choose a tag to compare

What's Changed

  • #30 Update findSequencesInList to not set a padding character for single files
  • #30 Tweak the handling of the SingleFiles option in findSequencesInList to specifically treat ambiguous paths as single file sequences

Full Changelog: v2.14.0...v2.14.1

v2.14.0 Release

26 Jun 21:11
a8fcac9

Choose a tag to compare

What's Changed

This could be considered a semi-breaking change in the way single files are identified as being sequences.
However, with the Go/C++ implementations expecting to match the original python fileseq, single files were being
too aggressively identified as sequences and this fix restores the behavior to match python.

  • #30 go/cpp: Align single-file parsing rules with python fileseq, to make them less aggressive

Full Changelog: v2.13.0...v2.14.0

v2.13.0 Release

14 May 22:52
2945e64

Choose a tag to compare

Changelog

  • 2945e64 cpp: findSequenceOnDisk should set invalid FrameSet for sequence without range (refs #28) (#29)
  • 2945e64 cpp: FileSequence.string() now omits padding characters if FrameSet is invalid

v2.12.0 Release

14 Apr 06:50

Choose a tag to compare

Changelog: v2.11.2...v2.12.0

  • (9027b5b1) cpp - fix potential FileSequence memory leak during copy; switch to unique_ptr private data member
  • (05d8562c) cpp - use shared_ptr for internal map management instead of custom deleter
  • (0374a820) cpp - clang-tidy formatting

v2.11.2 Release

01 Jun 02:17
c195a8b

Choose a tag to compare

Changelog

  • 20b64c3 go/cpp: fix regex to handle parsing complex extensions with single character component ("file.1.a.ext") (#26)
  • ad4b53f go/cpp: improve handling of ambiguous frame patterns in FindSequenceOnDisk ("100.1.ext") (#26)
  • 6bb6ede go: remove excessive print statements

v2.11.1 Release

06 Jan 02:03
859ef52

Choose a tag to compare

Changelog

  • 4866c35 cpp - Fix FrameSet::inverted() memory leak
  • 4866c35 cpp - Fix framesToFrameRange() bad formatting with 2 frames (#24)

v2.11.0 Release

04 Jul 21:17

Choose a tag to compare

Changelog

  • bf8b582 go/cpp: Implement UDIM syntax padding
  • 978a16c cpp: Fix sequence parsing errors by relaxing character match in path extension (#23)
  • b09e362 go/cpp: Fix sequence parsing error by relaxing character match in path extension (#23)