All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.6.0 - 2025-07-09
- Two-Stage Filtering: Added a new
--include(-i) option to specify an "allow-list" of files using an ERE pattern. This enables much more powerful and precise file selection.
- Filtering Pipeline Overhaul: The core filtering logic was refactored into a sequential, two-stage process. The
--includefilter is now applied first to create an initial set, and the--excludefilter is then applied to that set. - Transparent Reporting: The report output has been significantly enhanced with a new
NAME-BASED FILTERING REPORTsection. This gives users a clear, explicit breakdown of which files were selected or rejected by the--includeand--excludefilters. - Internal State Management: Replaced the simple
path_is_includedmodel with a more robust "three-bucket" system (path_is_rejected_by_include,path_is_rejected_by_exclude,path_is_selected_for_analysis), improving code clarity and maintainability.
- Concatenation Safety: Hardened the logic for identifying concatenatable files to ensure that special file types (symlinks, submodules, LFS pointers) are never included in the concatenation output, even if their blob content would otherwise pass safety checks.
1.5.0 - 2025-07-06
- Modern Command-Line Interface: The script now supports a full-featured CLI, including:
- Long options for all arguments (e.g.,
--exclude,--ref) for improved readability in scripts. - Assignment-style options (e.g.,
--ref=develop). - A standard
--helpflag (-h) for displaying usage information. - A standard
--versionflag for checking the installed version.
- Long options for all arguments (e.g.,
- Argument Parser Overhaul: Replaced the legacy
getoptsparser with a robust, custom implementation to enable the new CLI features and provide more resilient error handling for arguments. - Documentation Sync: Updated all user-facing documentation (
README.md,manpage, and the script's header comments) to reflect the new command options and ensure consistency.
1.4.4 - 2025-07-06
- Project Structure: Moved the main executable from
src/to a conventionalbin/directory to improve standardization. - Installation: The script is now installed with its major version number as a suffix (e.g.,
git-subtree-report-1). This prevents conflicts and allows for future parallel installations of different major versions. - Updated all documentation, examples, and build configurations to reflect the new file location and versioned command name.
1.4.3 - 2025-07-06
- Refined the language and improved the clarity of all historical entries in the
CHANGELOG.mdfile for better readability and historical accuracy.
1.4.2 - 2025-07-06
- Desktop integration files, including AppStream metadata (
.metainfo.xml) and a.desktopentry, allowing the application to be discoverable in Linux software centers and application menus.
- The Meson build system was updated to install the new desktop integration files to their standard system locations.
1.4.1 - 2025-07-05
- Corrected all documentation (
manpage,README.md) and report output to accurately state that the-eexclusion filter uses Extended Regular Expressions (ERE) and not Perl-compatible regex, aligning the documentation with the actual behavior of Bash's[[ =~ ... ]]operator.
1.4.0 - 2025-07-05
- A new, centralized error handling system (
fail_with) that provides structured, three-part error messages: a machine-parsable error code, a description of the situation, and actionable advice on how to resolve the issue.
- Replaced all ad-hoc
exitcalls andtrapcommands with the new centralized system for consistent, maintainable, and user-friendly error reporting. - Improved
SIGPIPEhandling to provide clearer feedback when output is piped to a command likehead.
1.3.0 - 2025-07-05
- Hardened the script against potential Time-of-Check, Time-of-Use (TOCTOU) race conditions. The script now verifies that no component of the path provided via the
-Cargument is a symbolic link before changing directories, preventing malicious path swapping during execution.
1.2.0 - 2025-07-04
- The report's "Exclusion Details" section now provides full transparency by listing the path and size of every file filtered by an exclusion pattern.
- Report statistics (e.g., file category counts) are now presented with percentages for a clearer at-a-glance analysis of repository composition.
- Improved the clarity of report labels (e.g., "Total size (included files)") and standardized the formatting of zero-value sizes to remove ambiguity.
1.1.1 - 2025-04-18
- Overhauled the installation instructions in
README.mdto use the standardinstallcommand, provide platform-specific guidance for Linux and Windows, and clarify the Meson build workflow.
1.1.0 - 2025-04-18
- Refactored the core analysis engine to be "blob-centric" instead of "path-centric," significantly improving performance on repositories with duplicate file content by analyzing each unique blob only once.
- Improved code clarity and maintainability by evolving the internal data model to distinguish between path-based properties (e.g.,
path_is_symlink) and content-based properties (e.g.,blob_is_safe).
1.0.2 - 2025-04-17
- A comprehensive
man(1)page providing integrated, offline help, bringing the tool in line with standard UNIX command-line utilities.
- Updated the Meson build system to handle the installation and packaging of the new man page.
1.0.1 - 2025-04-17
- A
meson.buildfile to provide a standardized, dependency-aware method for installing the script and its documentation. - Concrete example output files (
repo_commit.txt,repo_commit.log) to the repository for user reference.
- Updated
README.mdwith instructions for the new Meson build system.
1.0.0 - 2025-04-17
- Initial release of
git-subtree-report. - Core functionality for Git tree parsing and file analysis without checkout.
- Content safety validation system for null bytes, invalid UTF-8, and non-printable characters.
- Support for submodules, symbolic links, and LFS pointers.
- Command-line options for specifying repository, subtree, commit reference, and exclusion patterns.
- Concatenation output mode (
-o). - Comprehensive
README.md,LICENSE.md, and project scaffolding.