# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). A `### Breaking` section is used in addition to Keep a Changelog's standard sections to explicitly document changes that are backwards-incompatible but would otherwise appear under `### Changed`. Entries under `### Breaking` trigger a major version bump in the automated release tooling. ## [Unreleased] ### Breaking ### Added - `rc` command: executes all executable scripts inside a castle's `.homesick.d/` directory in sorted order, with the castle root as the working directory. stdout/stderr from each script is forwarded to the caller. - `rc` command: when a `.homesickrc` file exists and no `parity.rb` wrapper is present in `.homesick.d/`, a Ruby wrapper script (`parity.rb`) is generated automatically to preserve backwards compatibility. An existing `parity.rb` is never overwritten. - `exec` command: runs a shell command inside the target castle root directory. - `exec_all` command: runs a shell command inside each cloned castle root directory in sorted order. - `pull --all` support: pulls updates for every cloned castle in sorted order. - `rc --force` support: legacy `.homesickrc` compatibility hooks now require explicit force mode before execution. - Global command flags restored: `--pretend` (with `--dry-run` alias) and `--quiet`. - Native Go implementations for `clone`, `link`, `unlink`, `track`, `pull`, `push`, `commit`, `destroy`, `cd`, `open`, and `generate`. - Containerized behavior test suite for command parity validation. - Dedicated test suites for `list`, `show_path`, `status`, `diff`, and `version`. - Just workflow support for building and running the Linux behavior binary. - Coverage reports and badges published to shared object storage for branches and pull requests. - Pull requests now receive coverage report links in CI comments. - Manual release preparation workflow and script to bump the reported version, promote unreleased changelog notes, and create release tags. - Main branch validation now emits a recommended next release tag based on unreleased changelog sections, and release preparation now rejects empty unreleased notes. - Release recommendations now support an explicit `### Breaking` section for major-version changes that would otherwise be described under `### Changed`. - `symlink` command alias compatibility for `link`. ### Changed - CLI argument parsing migrated to Kong. - Git operations for clone and track migrated to `go-git`. - Build and behavior workflows now produce and run the `gosick` binary name. - CI validation is unified into push events, running behavior tests only on `main` pushes. - Gitea CI workflows now cache Go modules and build artifacts using a shared runner tool cache. - Gitea workflow and README badge updated from `push-unit-tests` to `push-validation`. - CLI help now uses the invoked binary name (defaulting to `gosick`) in usage output. - CLI help description now reflects Homesick's purpose for managing precious dotfiles. - Release notes standardized to Keep a Changelog format. - Release preparation and next-tag recommendation automation now invoke `vociferate`'s standalone `releaseprep` implementation with explicit gosick paths. - `commit` command now accepts legacy positional form `commit ` in addition to `-m`. - `destroy` now prompts for confirmation by default and preserves the castle when declined. ### Fixed - `status` and `diff` now consistently write through configured app output writers. - `pull --all` output now includes per-castle prefixes to match behavior expectations. - Behavior-suite container now includes Ruby so `.homesickrc` parity wrapper execution works under `rc --force`. ### Removed - Legacy Ruby implementation and Ruby toolchain. - Legacy in-repository `releaseprep` package and command implementation, now superseded by the standalone `vociferate` tool. ## [1.1.6] - 2017-12-20 ### Fixed - Ensure `FileUtils` is imported correctly to avoid a potential error. - Fix an issue where comparing a diff did not use the content of the new file. ### Changed - Small documentation fixes. ## [1.1.5] - 2017-03-23 ### Fixed - Problem with version number being incorrect. ## [1.1.4] - 2017-03-22 ### Fixed - Ensure symlink conflicts are explicitly communicated to users and symlinks are not silently overwritten. - Fix a problem in diff when asking a user to resolve a conflict. ### Changed - Use real paths of symlinks when linking a castle into home. - Code refactoring and fixes. ## [1.1.3] - 2015-10-31 ### Added - Allow a destination to be passed when cloning a castle. ### Fixed - Make sure `homesick edit` opens the default editor in the root of the given castle. - Bug when diffing edited files. - Crashing bug when attempting to diff directories. - Ensure that messages are escaped correctly on `git commit all`. ## [1.1.2] - 2015-01-02 ### Added - `--force` option to the rc command to bypass confirmation checks when running a `.homesickrc` file. - Check to ensure that at least Git 1.8.0 is installed. ### Fixed - Stop Homesick failing silently when Git is not installed. ### Changed - Code refactoring and fixes. ## [1.1.0] - 2014-04-28 ### Added - `exec` and `exec_all` commands to run commands inside one or all cloned castles. ### Changed - Code refactoring. ## [1.0.0] - 2014-01-15 ### Added - `version` command. ### Removed - Support for Ruby 1.8.7. ## [0.9.8] - 2014-01-02 ### Added - `homesick cd` command. - `homesick open` command. ## [0.9.4] - 2013-07-31 ### Added - `homesick unlink` command. - `homesick rc` command. ### Changed - Use HTTPS protocol instead of git protocol. ## [0.9.3] - 2013-07-07 ### Added - Recursive option to `homesick clone`. ## [0.9.2] - 2013-06-27 ### Added - `homesick show_path` command. - `homesick status` command. - `homesick diff` command. ### Changed - Set `dotfiles` as default castle name. ## [0.9.1] - 2013-06-17 ### Fixed - Small bugs: #35, #40. ## [0.9.0] - 2013-06-06 ### Added - `.homesick_subdir` (#39). ## [0.8.1] - 2013-05-19 ### Fixed - `homesick list` bug on Ruby 2.0 (#37). ## [0.8.0] - 2013-04-06 ### Added - `commit` and `push` command. - Commit changes in a castle and push to remote. - Enable recursive submodule update. - Git add when using track. ## [0.7.0] - 2012-05-28 ### Added - New option for pull command: `--all`. - Pull each castle instead of just one. ### Fixed - Double-cloning (#14). ## [0.6.1] - 2010-11-13 ### Added - License. ## [0.6.0] - 2010-10-27 ### Added - `.homesickrc` support. - Castles can now have a `.homesickrc` inside them. - On clone, this is eval'd inside the destination directory. - `track` command. - Allows easily moving an existing file into a castle and symlinking it back. ## [0.5.0] - 2010-05-18 ### Added - `homesick pull ` for updating castles (thanks Jorge Dias). - A very basic `homesick generate `. ### Fixed - Listing of castles cloned using `homesick clone /` (issue 3). ## [0.4.1] - 2010-04-02 ### Fixed - Improve error message when a castle's home dir does not exist. ## [0.4.0] - 2010-04-01 ### Added - `homesick clone` can take a path to a directory on the filesystem, which is symlinked into place. - `homesick clone` tries to run `git submodule init` and `git submodule update` if git submodules are defined for a cloned repo. ### Changed - Use `HOME` environment variable for where to store files, instead of assuming `~`. ### Fixed - Missing dependency on thor and others. ## [0.3.0] - 2010-04-01 ### Changed - Rename `link` to `symlink`. ### Fixed - Conflict resolution when symlink destination exists and is a normal file. ## [0.2.0] - 2010-03-19 ### Added - Better support for recognizing git URLs (thanks jacobat). - If it looks like a GitHub user/repo, use that. - Otherwise hand off to git clone. - Listing now displays in color and shows git remote. - Support pretend, force, and quiet modes. ## [0.1.1] - 2010-03-17 ### Fixed - Trying to link against castles that do not exist. - Linking now excludes `.` and `..` from the list of files to link (thanks Martinos). ## [0.1.0] - 2010-03-10 ### Added - Initial release.