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 210da55
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.
The PR #2274 Python 3.8 install/import checks failed on Linux, macOS and
Windows with `TypeError: 'ABCMeta' object is not subscriptable` while evaluating
`Mapping[str, Any]`. Import `Mapping` from `typing`, preserving the same runtime
mapping validation while supporting the declared Python 3.8 minimum. The source
import reproduced the failure before this correction and passes afterward with
Python 3.8.20, including evaluated method annotations. The config/downstream
modules pass all 90 tests on each backend; Ruff lint/format and changed-module
mypy pass. Hosted verification follows the branch push.
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
@@ -1094,6 +1094,46 @@ do not demonstrate a native Gix mismatch or eliminate any CLI calls.
1094
1094
| Config-backed remote/submodule maintenance | Missing config enumeration/multivar/removal operations (GIX-12), plus filesystem and worktree lifecycle requirements. |
1095
1095
| 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. |
1096
1096
1097
+
### Downstream mirror-fetch result gap
1098
+
1099
+
Airflow Git provider 1.0.1's bare-cache refspecs
1100
+
`+refs/heads/*:refs/heads/*` and `+refs/tags/*:refs/tags/*` expose an existing
1101
+
GitPython result-decoding problem when a branch and tag share a name. With Git
1102
+
2.53.0, both refs update successfully, but verbose output abbreviates their
1103
+
names. The local CLI and Gix selections omit the ambiguous branch result;
1104
+
released GitPython 3.2.1 instead returns a nonexistent `refs/remotes/main`
1105
+
reference whose commit cannot be read. The same problem occurs with
1106
+
`+refs/*:refs/*`. Two preserved real-repository supplemental tests fail with
1107
+
all three selections; Airflow's 175 unchanged upstream tests pass.
1108
+
1109
+
This is a demonstrated GitPython adapter gap, not a demonstrated Gitoxide
1110
+
mismatch. Git's `fetch --porcelain` reports full destination refnames and old/new
1111
+
IDs, providing native evidence for a future adapter correction. Fetch remains
1112
+
a CLI fallback: GixPython 0.2.0 must expose per-ref identities, status and notes
1113
+
before its fetch outcome can satisfy `FetchInfo`. Do not infer namespaces or
1114
+
reimplement fetch semantics in Python. Reproduction and baseline evidence are
1115
+
retained in the [third downstream audit](../test/downstream/audit-2026-10-22-batch-3.md).
1116
+
1117
+
### Downstream empty configuration sections
1118
+
1119
+
Kas 5.5's three unchanged SSH key validation tests call
1120
+
`GitConfigParser.add_section('gpg "ssh"')` before assigning
1121
+
`allowedSignersFile` through a section proxy. They pass with released GitPython
1122
+
3.2.1 and fail with both local backends because empty sections and the inherited
1123
+
ConfigParser section API were removed. Git 2.53.0's config mutation interface
1124
+
and GixPython 0.2.0 do not expose creating an empty section. This is a missing
1125
+
capability and an intentional, demonstrated GitPython API break; it is not a
1126
+
demonstrated Gitoxide mismatch. No successful empty-section result is invented
1127
+
or serialized in Python. GixPython needs a supported native configuration edit
1128
+
that creates sections before this contract can be restored.
1129
+
1130
+
Kas's separate identity cleanup uses nonempty section assignment, which is
1131
+
restored through existing Git config remove/set operations under GIX-12. Values
1132
+
are validated before mutation; individual Git operations lock independently,
1133
+
so replacement does not claim transaction-wide atomicity. Downstream can avoid
1134
+
the empty-section API by calling `set_value('gpg "ssh"', 'allowedSignersFile',
1135
+
path)` directly. The three upstream failures remain in the audit.
1136
+
1097
1137
## Maintaining the adapters
1098
1138
1099
1139
`git/_backend.py` contains the capability checks. Managed command adapters return
0 commit comments