Skip to content

Releases: justinfx/gofileseq

v3.2.0 Release

12 Apr 23:07

Choose a tag to compare

What's Changed

  • go/cpp: Optimize Ranges append logic for overlapping ranges (#3) by @justinfx in #34
  • cmd: Improve seqls tool performance by 3x and remove older vendored fastwalk package (88c4116)

Full Changelog: v3.1.1...v3.2.0

v3.1.1 Release

12 Mar 20:53

Choose a tag to compare

Full Changelog: v3.1.0...v3.1.1

v3.1.0 Release

11 Mar 03:50

Choose a tag to compare

ABI breaking change (source compatible)

  • cpp - return const refs from FileSequence accessors and remove const from setters

Full Changelog: v3.0.3...v3.1.0

v3.0.3 Release

09 Mar 21:31

Choose a tag to compare

  • grammar - Adjust the directory parsing rule to handle edge case containing dots (justinfx/fileseq#152)
  • grammar - simplify redundant tokens into just a basename pattern

Full Changelog: v3.0.2...v3.0.3

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