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
{{ message }}
Repository navigation
Commit cdf3cff
Browse filesBrowse the repository at this point in the historyBrowse files
Kas 5.5 temporarily changes Git identity and restores it with
`config["user"] = original_values`. The migrated parser removed inherited
mapping assignment, leaving cleanup broken although released GitPython 3.2.1
passes that exact caller check.
Validate the complete nonempty mapping before changing the file, then use
existing Git config section removal and value writes. This replaces duplicate
and obsolete options while retaining other sections. Each Git mutation locks
independently; replacement is not transaction-wide atomic.
Empty sections and `add_section()` remain unsupported by the available native
configuration APIs. Kas's three SSH validation failures are retained and
documented alongside the existing Airflow mirror-fetch adapter gap. No Git
serialization or successful empty-section result is implemented in Python.
All four new SHA-1/SHA-256, files/reftable regressions failed before the fix.
All 90 config/downstream cases pass on CLI and Gix; Ruff lint/format, mypy for
`git/config.py`, and `git diff --check` pass.
Copy file name to clipboardExpand all lines: doc/gix-backend.md
+40Lines changed: 40 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1103,6 +1103,46 @@ do not demonstrate a native Gix mismatch or eliminate any CLI calls.
1103
1103
| Config-backed remote/submodule maintenance | Missing config enumeration/multivar/removal operations (GIX-12), plus filesystem and worktree lifecycle requirements. |
1104
1104
| Hook execution | Every explicit hook request, including an absent hook, retains Git-managed lookup, execution and diagnostics until GIX-23 is addressed. Native operations retain GitPython's default hook/fsmonitor/maintenance restrictions. |
1105
1105
1106
+
### Downstream mirror-fetch result gap
1107
+
1108
+
Airflow Git provider 1.0.1's bare-cache refspecs
1109
+
`+refs/heads/*:refs/heads/*` and `+refs/tags/*:refs/tags/*` expose an existing
1110
+
GitPython result-decoding problem when a branch and tag share a name. With Git
1111
+
2.53.0, both refs update successfully, but verbose output abbreviates their
1112
+
names. The local CLI and Gix selections omit the ambiguous branch result;
1113
+
released GitPython 3.2.1 instead returns a nonexistent `refs/remotes/main`
1114
+
reference whose commit cannot be read. The same problem occurs with
1115
+
`+refs/*:refs/*`. Two preserved real-repository supplemental tests fail with
1116
+
all three selections; Airflow's 175 unchanged upstream tests pass.
1117
+
1118
+
This is a demonstrated GitPython adapter gap, not a demonstrated Gitoxide
1119
+
mismatch. Git's `fetch --porcelain` reports full destination refnames and old/new
1120
+
IDs, providing native evidence for a future adapter correction. Fetch remains
1121
+
a CLI fallback: GixPython 0.2.0 must expose per-ref identities, status and notes
1122
+
before its fetch outcome can satisfy `FetchInfo`. Do not infer namespaces or
1123
+
reimplement fetch semantics in Python. Reproduction and baseline evidence are
1124
+
retained in the [third downstream audit](../test/downstream/audit-2026-10-22-batch-3.md).
1125
+
1126
+
### Downstream empty configuration sections
1127
+
1128
+
Kas 5.5's three unchanged SSH key validation tests call
1129
+
`GitConfigParser.add_section('gpg "ssh"')` before assigning
1130
+
`allowedSignersFile` through a section proxy. They pass with released GitPython
1131
+
3.2.1 and fail with both local backends because empty sections and the inherited
1132
+
ConfigParser section API were removed. Git 2.53.0's config mutation interface
1133
+
and GixPython 0.2.0 do not expose creating an empty section. This is a missing
1134
+
capability and an intentional, demonstrated GitPython API break; it is not a
1135
+
demonstrated Gitoxide mismatch. No successful empty-section result is invented
1136
+
or serialized in Python. GixPython needs a supported native configuration edit
1137
+
that creates sections before this contract can be restored.
1138
+
1139
+
Kas's separate identity cleanup uses nonempty section assignment, which is
1140
+
restored through existing Git config remove/set operations under GIX-12. Values
1141
+
are validated before mutation; individual Git operations lock independently,
1142
+
so replacement does not claim transaction-wide atomicity. Downstream can avoid
1143
+
the empty-section API by calling `set_value('gpg "ssh"', 'allowedSignersFile',
1144
+
path)` directly. The three upstream failures remain in the audit.
1145
+
1106
1146
## Maintaining the adapters
1107
1147
1108
1148
`git/_backend.py` contains the capability checks. Managed command adapters return
0 commit comments