Commit ddd6db7
parity: branch foundations sprint + upstream merge train
## Summary
Closes 9 compat-mode rows in tests/journey/parity/branch.sh, lands three
reusable foundations consumed by future sprints (commit, push, tag, merge),
and folds in 6 upstream syncs that arrived during the sprint.
## Closed parity rows (all bytes-mode, steward-verified, on-disk state asserted)
- `-v` / `--verbose` — column-aligned name + SHA + subject
- `-vv` — adds `[upstream: ahead N, behind N]` tracking annotation
- `--abbrev=N` / `--no-abbrev` — SHA width override
- `--column=always` — column-major packing
- `-u` / `--set-upstream-to` — writes branch.<n>.{remote,merge}
- `--unset-upstream` — clears them; emits `fatal: branch '<n>' has no upstream information` + exit 128 when absent
- `--track` (create-side) — writes upstream config after ref creation
- `--edit-description` — spawns editor, writes branch.<n>.description
Plus three on-disk-state guard rows (chained gix → gix invocations) so
bytes-mode parity tests can no longer mask missing-side-effect regressions
in branch-config writers.
## Foundations introduced
- gix::Repository::{set_branch_upstream, unset_branch_upstream, set_branch_description}
with $GIT_DIR/config persistence via gix_config::File::write_to_filter
on Source::Local sections (matches gix/src/clone/fetch/util.rs::setup_branch_config).
- Branch::DESCRIPTION key constant + SnapshotMut::clear_subsection_value helper.
- gitoxide-core::shared::columns::write_columns — column-major packer (reusable
for status --column).
- gitoxide-core::shared::editor::edit_file — $GIT_EDITOR/core.editor/$VISUAL/$EDITOR/vi
resolver + shell-spawn (reusable for commit -e, tag --edit, merge --edit).
## Upstream syncs folded in
- merge: pull upstream gix-main into gix-brit (security hardening + fuzz expansion)
- merge: pull GitoxideLabs#2508 — allow checkouts into non-empty directories
- merge: pull GitoxideLabs#2375 — filters and partial cloning: initial support
- merge: pull GitoxideLabs#2503 — IOUC (UNTR extension) dirwalk speedup
- merge: pull GitoxideLabs#2457 — gix-blame: Incremental
- merge: pull GitoxideLabs#2465 — barebones server-side upload-pack
## Adjustments
- steward agent: surface idiomatic Rust as an explicit design priority,
reframing vendor/git as the *what* (flag surface, exit codes, output bytes)
while gitoxide idioms anchor *how*.
- Post-merge cleanup: dropped duplicate clone --filter stub (superseded by GitoxideLabs#2375)
and pr-2457's orphaned log helpers (our log_all already handles paths).
Plan: etc/plan/foundations-sprint-branch-render-and-config.md
Pre-squash backup tag: pre-squash-foundations
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent f3dcb4b commit ddd6db7
546 files changed
Lines changed: 14446 additions & 1047 deletions
File tree
- .claude/agents
- .config
- docs/parity
- etc
- plan
- gitoxide-core/src
- pack
- repository
- gix-actor/fuzz
- corpus/actors
- fuzz_targets
- gix-attributes/fuzz
- gix-bitmap
- fuzz
- artifacts/ewah
- fuzz_targets
- src
- tests
- gix-blame
- benches
- src
- file
- tests
- gix-command
- fuzz
- corpus/prepare
- fuzz_targets
- src
- tests
- gix-commitgraph
- fuzz
- src
- file
- tests
- access
- fixtures
- generated-archives
- gix-config-value/fuzz
- gix-config/fuzz
- fuzz_targets
- gix-credentials/fuzz
- corpus/context
- fuzz_targets
- gix-date/fuzz
- gix-dir
- src/walk
- tests
- dir
- walk_utils
- gix-features/src
- gix-ignore/fuzz
- corpus/ignore
- fuzz_targets
- gix-imara-diff/fuzz
- gix-index
- fuzz
- artifacts/index_file
- corpus/index_file
- fuzz_targets
- src
- decode
- extension
- tree
- tests
- fixtures/fuzzed
- index
- file
- gix-mailmap/fuzz
- corpus/mailmap
- fuzz_targets
- gix-object/fuzz
- fuzz_targets
- gix-odb
- src
- store_impls
- dynamic
- loose
- tests/odb/store
- gix-packetline
- fuzz
- corpus/packet_lines
- fuzz_targets
- src
- async_io
- blocking_io
- tests/read
- gix-pack
- fuzz
- artifacts
- data_file
- index_file
- multi_index_file
- corpus
- data_file
- index_file
- multi_index_file
- fuzz_targets
- src
- src
- bundle/write
- cache/delta/traverse
- data
- entry
- file
- decode
- input
- index
- traverse
- write
- multi_index
- tests/pack
- data
- index
- multi_index
- gix-pathspec/fuzz
- corpus/parse
- fuzz_targets
- gix-protocol
- src
- fetch
- serve
- upload_pack
- tests
- gix-ref/fuzz
- gix-sec
- src
- tests/sec
- gix-serve
- fixtures
- src
- tests
- gix-status/tests/status
- gix-submodule
- src
- tests/file
- gix-transport
- fuzz
- corpus
- capabilities_from_bytes
- capabilities_from_lines
- capabilities_handshake
- fuzz_targets
- src
- src
- client/blocking_io/http
- reqwest
- server
- blocking_io
- tests
- client/blocking_io/http
- gix-validate
- src
- tests/validate
- gix-worktree/src/stack/state
- gix
- src
- clone
- fetch
- config
- cache
- snapshot
- tree/sections
- dirwalk
- open
- remote
- connection/fetch
- fetch
- repository
- config
- status
- submodule
- tests
- fixtures
- generated-archives
- gix
- config
- repository
- config/config_snapshot
- src/plumbing
- options
- tests
- fixtures
- generated-archives
- scripts
- it/src/commands
- journey
- parity
- snapshots/plumbing
- blobless-clone
- bloblimit-clone
- no-repo/pack/verify
- tools/src
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| |||
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
82 | | - | |
83 | | - | |
| 82 | + | |
| 83 | + | |
84 | 84 | | |
85 | 85 | | |
86 | 86 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
1 | 6 | | |
2 | 7 | | |
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
269 | 269 | | |
270 | 270 | | |
271 | 271 | | |
| 272 | + | |
272 | 273 | | |
273 | 274 | | |
274 | 275 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
843 | 843 | | |
844 | 844 | | |
845 | 845 | | |
846 | | - | |
| 846 | + | |
847 | 847 | | |
848 | 848 | | |
849 | 849 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | 10 | | |
21 | 11 | | |
22 | 12 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
36 | | - | |
| 36 | + | |
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 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 | + | |
0 commit comments