@@ -37,96 +37,33 @@ _Notes on upcoming releases will be added here_
3737
3838### Breaking changes
3939
40- #### cli(sync): Route dry-run JSON through OutputFormatter (#514 )
41-
42- JSON dry-run output bypassed ` OutputFormatter ` , producing a nested
43- workspace schema instead of the flat array used by other commands.
44- Dry-run JSON and NDJSON now use the same ` formatter.emit() ` path.
45-
4640- Dry-run ` --json ` output is now a flat array of plan entries, matching
47- the schema of ` sync --json ` and ` status --json `
48-
49- ### What's new
50-
51- #### cli(_ formatter): Add ` _HelpTheme ` protocol for argparse colorization (#514 )
52-
53- Add a typed protocol documenting the CPython 3.14+ argparse theme
54- attributes consumed by ` VcspullHelpFormatter ` . The formatter hooks into
55- ` _theme ` to colorize example command blocks in help text, applying
56- distinct colors to program names, subcommands, and options.
41+ the schema of ` sync --json ` and ` status --json ` (#514 )
5742
5843### Bug fixes
5944
60- #### cli(status): Fix false "up to date" and phantom dirty counts (#514 )
61-
62- ` check_repo_status ` initialized ` ahead ` /` behind ` to ` 0 ` instead of
63- ` None ` when no upstream is tracked, causing ` _determine_plan_action `
64- to report repos as "up to date" when the remote state was actually
65- unknown. Additionally, non-git directories (where ` clean ` is ` None ` )
66- were counted as dirty in the status summary.
67-
68- - Initialize ` ahead ` /` behind ` as ` None ` so missing upstream propagates
69- correctly
70- - Use identity checks (` is True ` / ` is False ` ) instead of truthiness
71- for ` clean ` , excluding non-git repos from clean/dirty counts
72-
73- #### cli(sync): Deduplicate repos matched by multiple patterns (#514 )
74-
75- When multiple patterns matched the same repository (e.g. ` "myrepo" `
76- and ` "*" ` ), the repo was synced multiple times. Repos are now
77- deduplicated by path after pattern matching.
78-
79- #### cli(sync): Report non-git repos as UPDATE in dry-run plan (#514 )
80-
81- ` _determine_plan_action ` blocked non-git repos in dry-run output even
82- though ` update_repo ` supports SVN and Mercurial via ` create_project() ` .
83- Non-git repos now show ` UPDATE ` with a "non-git VCS" detail instead of
84- ` BLOCKED ` .
85-
86- #### cli(sync): Widen ` update_repo ` return type (#514 )
87-
88- Return type was annotated as ` GitSync ` but ` create_project() ` returns
89- ` GitSync | HgSync | SvnSync ` . The annotation now matches the actual
90- return type.
91-
92- #### cli(_ formatter): Complete option classification for help colorization (#514 )
93-
94- The help formatter's option sets were missing several flags (` -d ` ,
95- ` -x ` , ` -V ` , ` --fetch ` , ` --offline ` , ` --verbose ` , etc.) and
96- value-expecting options (` --max-concurrent ` , ` --name ` , ` --url ` ),
97- causing tokens following those options to be misclassified in colorized
98- help output.
45+ - Fix false "up to date" status for repos without upstream tracking (#514 )
46+ - Fix non-git repos being counted in dirty/clean summary totals (#514 )
47+ - Fix repos matched by multiple patterns being synced multiple times (#514 )
48+ - Fix SVN and Mercurial repos showing as BLOCKED in dry-run plan (#514 )
49+ - Fix misclassified tokens in colorized ` --help ` output (#514 )
9950
10051### Documentation
10152
102- - Update sync examples in README and quickstart to use ` --all ` , matching
103- the v1.53.0 CLI change (#514 )
53+ - Update sync examples in README and quickstart to use ` --all ` (#514 )
10454
10555### Tests
10656
107- - Add SVN and Mercurial tests for ` update_repo ` to verify non-git VCS
108- paths (#514 )
57+ - Add SVN and Mercurial sync tests (#514 )
10958
11059## vcspull v1.53.0 (2026-02-08)
11160
112- ### What's new
113-
114- #### cli: Show help when commands are called without arguments (#511 )
115-
116- Running ` vcspull sync ` , ` vcspull search ` , ` vcspull add ` , or
117- ` vcspull discover ` with no arguments now prints the command's help
118- screen instead of raising a cryptic argparse error or silently doing
119- nothing. This makes the CLI self-documenting — new users can explore
120- available options without reaching for ` --help ` , and experienced users
121- get an instant reminder of the expected syntax.
122-
12361### Breaking changes
12462
12563#### cli(sync): Require ` --all ` to sync all repositories (#511 )
12664
127- ` vcspull sync ` without arguments previously synced nothing and exited
128- silently. It now shows help instead. To sync every configured
129- repository, use the new ` --all ` (or ` -a ` ) flag:
65+ ` vcspull sync ` without arguments now shows help instead of silently
66+ exiting. To sync every configured repository, use ` --all ` (or ` -a ` ):
13067
13168``` console
13269$ vcspull sync --all
@@ -135,88 +72,58 @@ $ vcspull sync --all
13572- Passing ` --all ` with positional patterns is an error (mutually exclusive)
13673- The ` "*" ` glob pattern still works as an alternative to ` --all `
13774
138- ## vcspull v1.52.1 (2026-02-08)
75+ ### What's new
13976
140- ### Tests
77+ - Subcommands (` sync ` , ` search ` , ` add ` , ` discover ` ) now print help when
78+ called without arguments (#511 )
14179
142- #### conftest: Fix test failures in clean build environments ( # 513 )
80+ ## vcspull v1.52.1 (2026-02-08 )
14381
144- Tests now pass in environments without a global git identity (e.g. Arch
145- Linux nspawn containers with Python 3.14). The autouse ` setup ` fixture
146- sets ` GIT_AUTHOR_NAME ` , ` GIT_AUTHOR_EMAIL ` , ` GIT_COMMITTER_NAME ` , and
147- ` GIT_COMMITTER_EMAIL ` as environment variables so subprocesses inherit
148- git identity regardless of ` ~/.gitconfig ` resolution.
82+ ### Tests
14983
150- - Add ` @skip_if_hg_missing ` / ` @skip_if_svn_missing ` markers directly on
151- test functions where libvcs fixture-level markers don't propagate
152- reliably under ` asyncio_mode = "auto" `
153- - Add pytester-based harness tests that validate fixture infrastructure
154- in isolated subprocess environments
84+ - Fix test failures in clean build environments without a global git
85+ identity (e.g. Arch Linux nspawn containers) (#513 )
15586
15687## vcspull v1.52.0 (2026-02-07)
15788
15889### Breaking changes
15990
16091- Bump minimum libvcs from v0.38.6 -> v0.39.0 (#512 )
16192
162- Adds ` SyncResult ` and various other bug fixes to syncing.
163-
16493### Features
16594
166- #### cli(sync): Detect and report errored git syncs (#512 )
167-
168- ` vcspull sync ` now detects git fetch/pull failures via libvcs's ` SyncResult `
169- and reports them as errors instead of silently succeeding. The sync summary
170- shows errored repositories alongside successful and failed counts.
95+ #### cli(sync): Detect and report errored syncs (#512 )
17196
172- - Only pass ` set_remotes=True ` for git repositories (not SVN/HG)
173- - Include repository identity in sync error messages
97+ ` vcspull sync ` now reports git fetch/pull failures as errors instead of
98+ silently succeeding. The sync summary shows errored repos alongside
99+ successful and failed counts.
174100
175101#### cli(sync): Exit non-zero on unmatched patterns with ` --exit-on-error ` (#512 )
176102
177103When ` --exit-on-error ` is set and sync patterns match no configured
178104repositories, ` vcspull sync ` now exits with a non-zero status code.
179- Unmatched patterns are tracked separately from sync failures, giving
180- automation scripts a clear signal about config/pattern problems.
181105
182106#### cli(sync): Improved sync summary output (#512 )
183107
184- - Track and display unmatched patterns separately from repo totals
108+ - Show unmatched patterns separately from repo totals
185109- Omit "0 previewed" from non-dry-run summaries
186- - Suppress unmatched-pattern lines in ` --summary-only ` mode
187- - Color the total count in summary output
188110
189111### Bug fixes
190112
191- - Fix path-based sync patterns showing ` "None" ` instead of the actual search
192- term (#512 )
193-
194- - Downgrade duplicate user-facing unmatched-pattern log message to debug level,
195- so each pattern is reported only once (#512 )
196-
197- - Emit sync summary even when all patterns are unmatched (#512 )
113+ - Fix path-based sync patterns showing ` "None" ` instead of the actual
114+ search term (#512 )
115+ - Fix duplicate unmatched-pattern warnings in output (#512 )
116+ - Fix missing sync summary when all patterns are unmatched (#512 )
198117
199118### Tests
200119
201- - Add errored sync tests: fetch failure, exit-on-error, mixed good/errored,
202- summary lines, all-fail, and cross-VCS scenarios (#512 )
203- - Add SVN and HG errored sync tests using libvcs factory fixtures (#512 )
204- - Add rev/branch mismatch and ambiguous branch/directory name regression
205- tests (#512 )
206- - Add unmatched pattern count, duplicate log, and path-pattern "None" message
207- tests (#512 )
208- - Refactor ` test_cli.py ` to use ` write_config ` helper and assert exit codes
209- consistently (#512 )
120+ - Add errored sync, unmatched pattern, and cross-VCS regression tests (#512 )
210121
211122## vcspull v1.51.1 (2026-02-01)
212123
213124### Tests
214125
215- - Add syrupy 4.x backwards compatibility for ` YamlSnapshotExtension ` (#509 )
216-
217- The custom snapshot extension now sets both ` _file_extension ` (syrupy 4.x API)
218- and ` file_extension ` (syrupy 5.x API) to support both versions. This fixes
219- test failures on systems packaging syrupy 4.6.1, such as Arch Linux (#503 ).
126+ - Fix snapshot test compatibility with syrupy 4.x (#509 , #503 )
220127
221128## vcspull v1.51.0 (2026-01-27)
222129
@@ -226,25 +133,12 @@ automation scripts a clear signal about config/pattern problems.
226133
227134### Documentation
228135
229- #### CLI reference pages now have linkable arguments (#502 )
230-
231- Each command-line argument (` --help ` , ` -v ` , ` --config ` , etc.) in the CLI
232- reference documentation now has a permalink anchor (¶). You can hover over any
233- argument to reveal the link, then share direct URLs to specific options.
234-
235- - Improved metadata display: Default values, types, and "Required" tags are now
236- styled more clearly
237- - Help text containing glob patterns like ` django-* ` no longer triggers
238- documentation build warnings
239- - Multiple CLI commands can now appear on the same documentation page without
240- ID conflicts
136+ - CLI reference arguments now have permalink anchors (#502 )
137+ - Fix doc build warnings from glob patterns in help text (#502 )
241138
242139### Bug fixes
243140
244- #### Improve downstream compatibility in test matrix (#504 )
245-
246- - Refactor syrupy snapshot tests to avoid ` name= ` parameter which may cause
247- matching issues in certain build environments, e.g., Arch Linux packaging (#503 ).
141+ - Fix snapshot test compatibility for downstream packaging (#504 , #503 )
248142
249143## vcspull v1.50.1 (2026-01-25)
250144
0 commit comments