All notable changes to this project will be documented in this file. All changes are from @nickgerace unless otherwise specified.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
The latest version contains all changes.
- Bors to avoid merge skew / semantic merge conflicts
- Color mode option with the following choices: "always", "compatibility" and "never"
- "always": display with rich colors (default)
- "compatibility": display with portable colors
- "never": display with no color
- Display flag with the following choices: "standard" (or "default"), "json" and "classic"
- "standard" (or "default") and "classic" output options return from the previous release
- "json" output is a new option that displays all results in valid JSON, which is useful for third party applications, plugins, parsers, etc.
- Documentation comments almost everywhere for
cargo doc
- git2-rs, which replaces
git
subcommand usage- Even though
git
subcommands were used over git2-rs to reduce binary size, significant speed increases could only be achieved by using the latter - More consistent behavior since git2-rs can be tested at a locked version
- Even though
- JSON output flag for both version and results printing
- Troubleshooting section to CLI help
- Troubleshooting section to README for using
RUST_LOG
andRUST_BACKTRACE
- Config file location from
<prefix>/gfold/gfold.json
to<prefix>/gfold.toml
- Config file type from JSON to TOML
- CLI help sections to be divided by headers
- Major performance improvements due to moving from sequential target generation to nested, parallel iterators for target generation
- Module layout
display
now contains its child,color
report
now contains its child,target
- Grey color default to avoid a bug where the
stdout
color is not refreshed withintmux
when using macOSTerminal.app
- Testing for the entire crate
- All tests have been replaced in favor on one integration test
- The old tests relied on developer's environment, which is highly variable
- The new test creates multiple files, directories, and repositories in the
target
directory to simulate an actual development environment
- The
color
module now uses a harness rather than individual functions
- Debug flag in favor of using
RUST_LOG
- Display of
none
fields for the standard (default) display of result (i.e. now, if an optional field was not found, it is not shown) - Git path option for CLI and config file
git
subcommand usage
- Substantial performance gains should be noticeable in certain scenarios
- Observed range in loose benchmarking "real world" usage: ~1.2x to ~5.1x faster than
gfold 3.0.0
on macOS 12.3.1 - Binary size has increased, but speed has taken priority for this release
- Observed range in loose benchmarking "real world" usage: ~1.2x to ~5.1x faster than
- Using
RUST_LOG
andRUST_BACKTRACE
should be more helpful when debugging unexpected output, performance or suspected bugs
- Ability to ignore config file options
- Ability to print merged config options
- Ability to specify path to
git
- Ability to store default path target in config file (defaults to current working directory)
- Ability to use config file in
$HOME/.config/gfold/gfold.json
and{FOLDERID_Profile}\.config\gfold\gfold.json
- Ability to use old display mode with
--classic
flag and store preference in config file - Formal CLI parsing library,
argh
- Install and uninstall scripts
- New display mode that avoids grouping repositories (API-breaking since this is the new default display mode)
- Codebase to a domain-driven architecture (major refactor)
- Mention of the deprecated, old Homebrew tap in the README
- Short
-h
flag due to CLI crate addition (argh
)
- Evaluated using
tracing
andtracing-subscriber
overlog
andenv_logger
, but due to their combined larger size, the logging crates remain the same as before. - The config file can be non-existent, empty, partially filled out or completely filled out. There's also an option to ignore the config file completely and only use CLI options.
- This crate has used other CLI parsing libraries in the past, and recently did not use any, but with manual testing and publicly available benchmarks,
argh
is now in use.
- Misc package bumps
- Logger that can be set via an environment variable (
RUST_LOG
)
- Permission denied errors to be logged rather than displayed to
stderr
- Ensure
crates.io
andgit
tag are in sync (very slight and accidental derivation for2.0.0
)
- Discrete Code of Conduct file
- Unpushed commit checking by default (greedy static analysis, so this may need to be tuned for edge cases)
git
CLI wrapper instead of Git library usage due to security, Git already being installed, inconsistencies between the library and the CLI, and more
- Codebase re-write geared towards data-efficiency and parallelism
- Dramatic runtime speed and binary size improvements (consistently able to reproduce, but heavily variable based on payload, OS, etc.)
- Entire structure from library-driven to application-driven (no
lib.rs
)
- All CLI flags except for
-h/--help
and-V/--version
- CLI crate since it is unneeded
- Git library usage in favor of leveraging
git
subcommands due to security, Git already being installed, inconsistencies between the library and the CLI, and more DEVELOPING.md
andEXTRA.md
since they were outdated/unimportantlib.rs
and the crate's library-based components
- Misc package bumps
- Continue upon PermissionDenied errors rather than exiting
- Documentation to be moved to the new
docs
directory
- Config type to be embedded within the Driver
- Not in public library modules, but this should improve generation efficiency
-d/--debug
flag since all logging has been removed from the librariy, andmain.rs
does not logenv_logger
cratelog
crate- Logging from the entire library in favor of returning errors when needed and handling when possible/preferred
- Bold table headers instead of repo names
- Extra newline before first entry when printing all tables
- Middleware
run
function inlib.rs
since it's unecessary and unintuitive- Before, you used a type from the
driver
module as a parameter forrun
- Now, you only use types from
driver
- Before, you used a type from the
- Config management to be done by applications consuming the library (moved out of
lib.rs
) - Driver module to be public
- Printing to STDOUT to be done by applications consuming the library (moved out of
lib.rs
) TableWrapper
type to be a private, internal type
- Shallow search flag to disable recursive search (accessible via
-s/--shallow
)
- Binary size to be ~60% of the size of
gfold 1.0.4
- Primarily, this was achieved by removing unused default features from imported crates
- Runtime speed is the same, better, or more consistent
- Default search behavior to be recursive rather than shallow
- Short flag for
--skip-sort
from-s
to-x
- Workspace implementation to a single crate (similar to before
gfld
)
gfld
, the lightweight version ofgfold
due the following reasons:- its over ~105% average slower runtime speed (despite it being ~40% of the size)
- printing to STDOUT was not consistent in subcommand scenarios
- Recursive flag since
gfold
uses recursive search by default
- Fixed final output order (sorted by name, then by status)
- Directory name finder to default to the current working directory if empty (
gfld
) - Misc. optimizations in
gfld
- Release profile optimizations to be at workspace scope for binaries
gfld
output to not include parent root since all results started with the same string
Cargo.lock
to the workspace to fix AUR builds
- CI to use
--locked
for builds
- A brand new, minimal CLI:
gfld
DEVELOPING.md
for instructions on buildinggfld
- Documentation to include
gfld
- GitHub issue template to include
gfld
information - GitHub PR CI to only build for Linux while keeping macOS and Windows for release CI
- The repository to be split into two crates:
gfold
andgfld
- Unnecessary
PathBuf
usages toPath
when possible inutil.rs
- Release workflow for GitHub actions (now, it is "merge only")
- Uploaded binaries due to lack of checksums and maintenance
- RELEASE file for releasing
gfold
- README installation section to be condensed
- LICENSE to not use copyright dates or name (reduce maintenance)
- Makefile in order to be cross-platform-friendly
- Email display feature
- Include standard directory feature
- Shorthand flag for all features without one
- Directory walking to skip hidden directories
- Repository opening check to log error in debug mode rather than panic
- File header comments
- Prettytable macros
- Dependencies section to CHANGELOG
paru
to suggested AUR helpers in README
- All CRLF files to LF
- Condense tests into loops where possible
- Label
unpush_check
as an experimental feature macos-amd64
todarwin-amd64
unpush_check
fromdisable
toenable
- Disable unpushed commit check flag and functionality
- Logging for origin and local reference names for unpushed commit check
gfold --version
to issue template- Unpush functionality (again)
- Unpush function to only return boolean
- Contributing section from README to reduce requirements
- Empty results message since it was potentially misleading
- Condition enum for adding rows to final table
- Debug flag
- Many debug statements for the new debug flag
- Bare repository checking to original behavior
util.rs
results generation to include Condition enum
- Carets from
Cargo.toml
to maintain stability - Unpush functionality temporarily
- Debugging calls for general usage and the new unpushed commit code
- Derive debug to the
Config
struct - Lightweight logging stack with
env_logger
andlog
- Two files:
driver.rs
andutil.rs
- Unpushed commit status functionality and output
- Bare repository detection to use upstream function
- Library contents into
driver.rs
andutil.rs
through a major refactor
- In-depth description of the
run
function
- Consolidated boolean test permutations into one test
- All non-public comments in
*.rs
files
- Crate to crates.io
- Crates.io publishing requirements to
[package]
inCargo.toml
- Homebrew tap
- Library description to
lib.rs
- Dependency versioning to use carets
- README mentions of specific version tags
- README plaintext blocks to single quotes when mixed with formatted text
- README to sort installation method by package managers first
- Public structs and functions without only
run
(primary backend driver) remaining
- No color flag and functionality
- Pull request template
- Code of Conduct link
- GitHub issue template
- GitHub pull request template
- LICENSE to be extended through 2021
- Match blocks in
lib.rs
to be consolidated - Nearly all contents of
lib.rs
to return errors back to the calling function inmain.rs
- Duplicate code related to the match block consolidation
- Doc comments and
cargo doc
torelease
target eyre
for simple backtrace reportinggfold-bin
to AUR portion of READMElib.rs
as part of major refactor
- Pre-build Makefile targets to be consolidated
- Refactor source code to be driven by a library, helmed by
lib.rs
util.rs
andgfold.rs
as part of major refactor
- GitHub release downloads to README
- Binary publishing workflow to the dummy file
- Existing merge workflow to use debug building instead of release building
- Makefile target containing the old default branch name
- Makefile target for statically-linked building
- Release dummy GitHub Action
- Version README badge
- A reduction to CI build time and complexity by combining the test and check steps,
- GitHub workflow "merge" file name to "merge.yml"
- GitHub workflow name to "merge"
- OS compatibility claims in README through a simplified list
- README badges to use shields.io
- MUSL mentions in docs
- Recursive search feature and flag
- Skip sort feature and flag
- Unit tests for recursive search and skip sort
- AUR PKGBUILD GitHub repository to README
- Results and TableWrapper structs, and relevant functions,
- Three methods for Results struct (printing/sorting/populating results)
- Make targets for
run-recursive
andinstall-local
- Switch from
walk_dir
function to object-driven harness for execution - Move
walk_dir
function logic toResults
method - Function
is_git_repo
to its own file - Any unnecessary match block to use "expect" instead
- Cargo install to use a specific tag
- Version upgrade workflow to Makefile
- Leftover "FIXME" comments for recursive search ideas
- Changelog
- Tags automation
- Example output to use mythical repositories
- Path flag to positional argument
- Switched to structopt library for CLI parsing
- Tag v0.3.0 (duplicate of 0.3.0 with the "v" character)
- All GitHub releases before 0.3.1
- Releases information from README
- Add AUR installation documentation
- Add AUR packages from @orhun
- Switch to Apache 2.0 license from MIT license
- Reorganize build tags, and add test build target
- Handling for bare repositories to print their status to STDOUT with the mentorship of @yaahc
- "Continue" to the next repository object if the current object is bare
- Release availability in README
- Experimental statically-linked, MUSL support
- Switched to prettytable-rs
- Unit tests to work with prettytable-rs
- Example output, contributors, and usage in README
- Building for Windows, macOS, and Linux amd64 in CI pipeline from @jrcichra
- Base contents