You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Working assumption: checkboxes in this file reflect current checkout, not only historical issue state.
6
7
7
8
## Mission
@@ -20,9 +21,11 @@ Make object-hash kind first-class across config, protocol, storage, tests, and c
20
21
-[ ] Remove hash-type specific methods from `gix-hash` and lean on `gix_hash::Kind`-parametric usage.
21
22
Evidence: `gix-hash` still contains `new_sha1`, `new_sha256`, `from_20_bytes`, `from_32_bytes`, `null_sha1`, `null_sha256`.
22
23
-[ ] Remove len-20 assumptions from all relevant code paths.
23
-
Evidence: big progress exists, but 73`Kind::Sha1.null()` call sites still remain, plus a few explicit 20-byte comments and helpers.
24
+
Evidence: big progress exists, but 69 non-plan/non-changelog`Kind::Sha1.null()` call sites still remain, plus a few explicit 20-byte comments and helpers.
24
25
-[ ] Provide visible CLI path for choosing object hash kind.
25
26
Evidence: current tree has 0 `--object-hash` matches.
27
+
-[ ] Propagate `sha256` feature support through crates that participate in object traversal, object parsing, and object-id storage.
28
+
Evidence: only `gix-hash`, `gix-ref`, `gix-worktree-stream`, and top-level `gix` define a `sha256` feature today; `gix-traverse` only exposes `sha1`, while `justfile` compile-guards it for missing hash selection and only checks `--features sha1`.
26
29
-[x] Remove default `sha1` feature from `gix-hash` and deal with fallout.
27
30
Evidence: `gix-hash` has `default = []`, docs.rs explicitly enables `sha1`, root `gitoxide` chooses SHA1 via features, and `justfile` contains 31 compile-guard checks for missing hash selection.
28
31
-[x] Remove SHA1 mention from `gix-features` feature toggles.
@@ -45,28 +48,35 @@ Make object-hash kind first-class across config, protocol, storage, tests, and c
45
48
46
49
## Current Snapshot
47
50
48
-
Workspace signals on 2026-04-22:
51
+
Workspace signals on 2026-04-30:
49
52
50
53
-`gix-hash` default hash feature: removed
51
54
- compile-guard checks for missing hash selection in `justfile`: 31
-`gix-traverse` hash feature declarations: `sha1` only
57
+
-`Kind::Sha1.null()` occurrences outside this plan and changelogs: 69
53
58
-`object-format=sha1` fixture occurrences: 10
54
59
- clone path `unimplemented!()` for hash mismatch: 1
55
60
-`--object-hash` CLI flag matches: 0
56
61
57
62
Dual-hash test hooks already exist in `justfile` for at least:
58
63
59
64
-`gix-filter`
65
+
-`gix-diff`
60
66
-`gix-commitgraph`
61
67
-`gix-object`
68
+
-`gix-ref-tests`
62
69
-`gix-pack`
70
+
-`gix-diff-tests`
71
+
-`gix-blame`
63
72
-`gix-refspec`
73
+
-`gix-worktree-stream`
64
74
-`gix-hash`
65
75
66
76
## Confirmed Done
67
77
68
78
-[x]`gix-commitgraph`
69
-
Evidence: issue marked it complete, crate depends on`gix-hash` with `sha1` and `sha256`, and `justfile` runs it with `GIX_TEST_FIXTURE_HASH=sha1` and `sha256`.
79
+
Evidence: issue marked it complete, dev-dependencies enable`gix-hash` with `sha1` and `sha256`, and `justfile` runs it with `GIX_TEST_FIXTURE_HASH=sha1` and `sha256`.
70
80
71
81
## Remaining Hotspots
72
82
@@ -78,13 +88,21 @@ Dual-hash test hooks already exist in `justfile` for at least:
78
88
repository object hash still falls back to SHA1 when config does not say otherwise.
79
89
-`gix/src/clone/fetch/mod.rs`
80
90
clone still aborts on remote hash mismatch instead of configuring repo state.
91
+
-`gix-traverse/Cargo.toml`
92
+
only defines a `sha1` feature and docs.rs/dev-dependencies use `sha1`; there is no `sha256` feature despite traversal code carrying `ObjectId` and `object_hash` state.
93
+
-`gix/Cargo.toml`
94
+
top-level `sha256` currently forwards only to `gix-hash/sha256`, unlike `sha1`, which fans out to the stack including `gix-traverse/sha1`.
95
+
-`gix-worktree-stream/Cargo.toml`
96
+
has a `sha256` feature, but it forwards only `gix-hash/sha256`; its `sha1` feature forwards into `gix-filter`, `gix-object`, and `gix-traverse`.
81
97
82
98
## Execution Order
83
99
84
100
### Batch 1: hash API and explicit selection
85
101
86
102
-[ ]`gix-hash`
87
103
Remove remaining SHA1/SHA256-shaped helper APIs where `Kind`-based forms can replace them.
104
+
-[ ] feature propagation
105
+
Add and forward `sha256` features where crates already have hash-sensitive APIs or compile guards, starting with `gix-traverse`, then the dependent stack that needs to run under SHA256.
88
106
-[ ]`gitoxide` CLI surface
89
107
Decide whether to restore a flag like `--object-hash` or bless config-only selection and document it clearly.
90
108
-[ ]`gix-refspec`
@@ -100,6 +118,8 @@ Dual-hash test hooks already exist in `justfile` for at least:
100
118
Expand refs and reflog read/write coverage to both hash lengths.
101
119
-[ ]`gix-index`
102
120
Extend checksum and extension tests to SHA256-sized object ids.
121
+
-[ ]`gix-traverse`
122
+
Add `sha256` feature support and traversal tests that parse SHA256 commit parents and tree ids instead of relying on SHA1-shaped fixtures.
103
123
104
124
### Batch 3: protocol and transport
105
125
@@ -123,6 +143,8 @@ Dual-hash test hooks already exist in `justfile` for at least:
123
143
Remove SHA1-only sentinel assumptions where caller hash kind should drive impossible ids.
124
144
-[ ]`gix-blame`
125
145
Same sentinel cleanup where SHA1 null ids are only placeholders.
146
+
-[ ]`gix-traverse`
147
+
Replace remaining SHA1 defaults in traversal state with caller/repository hash kind where traversal starts from generic object ids.
126
148
-[ ] broad repo sweep
127
149
Review remaining `Kind::Sha1.null()` occurrences one by one and separate acceptable sentinels from real SHA1 assumptions.
128
150
@@ -136,6 +158,7 @@ Dual-hash test hooks already exist in `justfile` for at least:
136
158
## Immediate Next Moves
137
159
138
160
-[ ] Decide whether `--object-hash` is still required as CLI UX, or whether config plus API is enough.
161
+
-[ ] Add `sha256` feature support to `gix-traverse` and forward it from dependent crates.
139
162
-[ ] Make `extensions.objectFormat=sha256` parse successfully.
140
163
-[ ] Make fetch negotiation accept `object-format=sha256`.
141
164
-[ ] Remove clone-time `unimplemented!()` for remote hash mismatch.
0 commit comments