summaryrefslogtreecommitdiff
path: root/CHANGELOG.md
blob: 0007033a8319e5659e8a392d22e5ed180d8e83e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# Changelog

For new changes prior to version 4.0.0, please see [CHANGELOG_PRE_V4](./docs/CHANGELOG_PRE_V4.md).

- All notable changes to this project will be documented in this file
- All changes are from [@nickgerace](https://github.com/nickgerace) unless otherwise specified
- The format was inspired by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
- This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)

## Unreleased

The latest version contains all changes.

## 4.4.0 - 2023-06-26

### Changed

- Bump dependencies

### Notes

- Bump the minor version field instead of the patch field because the dependency tree has significantly changed
  - Technically, the sole user-facing change is that the external dependencies have been bumped
  - For context, `libgfold` was newly introduced and contains the majority of the original `gfold` source code
- Only run CI checks on merge
- Publish and use `libgfold` for the first time
- Split `gfold` into two crates: a library and a binary
- Use cargo workspace dependencies

## 4.3.3 - 2023-04-07

### Changed

- Bump dependencies

### Notes

- Remove `flake.nix` due to lack of use (might return in the future)
- Fix missing `4.3.2` title in the `CHANGELOG`

## 4.3.2 - 2023-03-09

### Changed

- Bump dependencies

### Notes

- Add `flake.nix` for more local development options

## 4.3.1 - 2023-02-05

### Changed

- Bump dependencies
- Bump LICENSE year

## 4.3.0 - 2023-02-05

### Added

- Add submodule information to the `json` display mode (i.e. `gfold -d json`)
  - This information is not yet accessible in other display modes

### Changed

- Bump dependencies

### Notes

- Add demo GIF to README
- Performed significant refactor to reduce the usage of "floating" functions
  (i.e. ensure functions are members of unit structs at minimum) as well as
  remove reliance on a single generic error enum

## 4.2.0 - 2022-12-21

### Changed

- Add "unknown" status for repositories hitting the `extensions.worktreeconfig` error
- Bump dependencies
- Change "unpushed" color to blue
- Ignore the `extensions.worktreeconfig` error until the corresponding upstream issue is resolved: https://github.com/libgit2/libgit2/issues/6044

## 4.1.2 - 2022-12-20

### Changed

- Bump dependencies
- When checking if "unpushed" and attempting to resolve the reference from a short name, ignore the error and assume we need to push

## 4.1.1 - 2022-12-19

### Changed

- Bump dependencies
- Ensure dependencies have their minor version fields locked

### Notes

- This `CHANGELOG` entry was accidentally not included in the `4.1.1` tag

## 4.1.0 - 2022-10-20

- Add debug symbol stripping for `cargo install` users (result: ~79% of the size of `4.0.1`)

### Changed

- Bump dependencies
- Change CLI library from `argh` to `clap v4`
- Ensure integration test artifacts exist in the correct location
- Refactor to use `cargo` workspaces, which should unlock the ability to create "scripts" via sub-crates

### Removed

- Remove ability to print the version as a single JSON field (combine `-V/--version` with `-d/--display json`)
  - Normally, this would necessitate a bump of the "major" field in the version, but `-V/--version` is serializable to JSON (just a string)

## 4.0.1 - 2022-07-05

### Changed

- Bump dependencies

## 4.0.0 - 2022-05-10

### Added

- Add [Bors](https://bors.tech/) to avoid merge skew/semantic merge conflicts
- Add 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
- Add 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.
- Add documentation comments almost everywhere for `cargo doc`
- Add [git2-rs](https://github.com/rust-lang/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
- Add JSON output flag for both version and results printing
- Add roubleshooting section to CLI help
- Add troubleshooting section to README for using `RUST_LOG` and `RUST_BACKTRACE`

### Changed

- Change config file location from `<prefix>/gfold/gfold.json` to `<prefix>/gfold.toml`
- Change config file type from JSON to TOML
- Change CLI help sections to be divided by headers
- Drastically improve performance by moving from sequential target generation to nested, parallel iterators for target generation
- Modify grey color default to avoid a bug where the `stdout` color is not refreshed within `tmux` when using macOS `Terminal.app`
- Refactor module layout
  - `display` now contains its child, `color`
  - `report` now contains its child, `target`
- Refactor 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
- Use a harness for the `color` module instead of individual functions

### Removed

- Remove debug flag in favor of using `RUST_LOG`
- Remove 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)
- Remove git path option for CLI and config file
- Remove `git` subcommand usage

### Notes

- 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
- Using `RUST_LOG` and `RUST_BACKTRACE` should be more helpful when debugging unexpected output, performance or suspected bugs

## Before 4.0.0

Please see [CHANGELOG_PRE_V4](./docs/CHANGELOG_PRE_V4.md).