Skip to content

Commit 35eccc5

Browse files
codexByron
authored andcommitted
docs: record compatibility audits of 115 GitPython dependents
The five automated downstream profiles do not describe GitPython's wider runtime, development and documentation consumers. Record four completed audit batches of 31, 30, 39 and 15 distinct projects selected from September 2026 PyPI downloads plus known Git-focused users. The inventory covers every identified current declared consumer within the top-15,000 snapshot and 348,530,835 monthly distribution requests, including extras. Downloads are neither unique users nor attributable GitPython installations; the additions and metadata limits also prevent a strict popularity top-115 claim. Retain all four reports and JSON manifests under `test/downstream/`, linked from its README. Preserve release and archive provenance, commands, import proofs, backend results, baseline comparisons and coverage limits at their original tested revisions. Sources, environments, logs, JUnit XML and supplemental runners remain in ignored audit caches; a fresh environment must reconstruct the disclosed harness. The five-profile CI runner remains the maintained automation. Upstream tests, mocks and expectations are unchanged; selected helpers, unused declarations and omitted application stacks are identified explicitly. Gix selections retain documented Git CLI fallbacks. Twelve separate fixes restore immutable index readers, global `-C` selection, separate-Git-directory context, the `GitDB` selector, local tracking branches, revision tree/path diagnostics, explicit literal-path construction, editable version reporting, built-wheel version isolation, historical `Union` and `Optional` imports, and nonempty configuration-section assignment. Keep the remaining compatibility work visible. Kas 5.5 has three SSH setup failures because `add_section()` cannot create an empty section through the supported native APIs; downstream can use `set_value()` directly, while full compatibility requires a native section-edit API. sbxloop 2.1.36 has five constructor-subclass failures because native discovery validates metadata before its overridden `config_reader()` runs; restoring that view requires supported discovery/include controls without bypassing Git format validation. Index mapping mutation and automatic environment expansion remain unsupported. Airflow's ambiguous bare/mirror fetch results expose a separate GitPython adapter gap: Git `fetch --porcelain` supplies full destination identities for a future CLI adapter fix; Gix fetch remains a fallback until per-ref outcomes are exposed. Other retained failures are downstream defects, baseline behavior or explicitly recorded harness/coverage limits, not passing results. Historical final full suites after the last production fix recorded 1,832 CLI passes and 1,934 Gix passes, with 162/60 skips, one xfail and 59 passed subtests each. The last batch adds 117 upstream and 187 supplemental passes, one baseline-inherited Dstack failure and two Jira skips per backend; its separate MkNotebooks Binder build passes with both backends and the release. Those historical results are not reruns on this rewritten stack. Consolidate the four `docs:` record commits at the stack tip while retaining the feature commit and twelve fixes in their original order. Resolve only changelog context conflicts, keeping implementation entries with their fixes and the subclass record here. Verify an identical final tree, unchanged non-documentation patches, fourteen final commits with one top `docs:` commit, 115 distinct manifest projects, recorded CLI/Gix parity, local report links and `git diff --check`. No new tests or hosted CI were run and no push occurred.
1 parent 0709904 commit 35eccc5

4 files changed

Lines changed: 348 additions & 5 deletions

File tree

‎doc/gix-backend.md‎

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,24 @@ variables literal; `expand_vars=True` is unsupported. Callers wanting expansion
6161
must perform it before passing the path. Discovery still uses Gix/Git after
6262
ordinary input-path canonicalization.
6363

64+
Repository construction validates storage and configuration through Gix/Git;
65+
overriding `Repo.config_reader()` does not replace that native discovery parser.
66+
sbxloop 2.1.36's `_MetadataRepo` subclass relied on the released constructor's
67+
permissive Python discovery and overridden no-includes reader. Five upstream
68+
tests still differ: malformed includes prevent opening, malformed local config
69+
is rejected before its custom `ProvisionError`, and version-0 repositories
70+
with version-1 storage extensions are rejected before its format check. Released
71+
GitPython 3.2.1 passes those five tests. This is a breaking subclass contract,
72+
not a demonstrated Gix-versus-Git mismatch: both backends reject the metadata.
73+
GixPython `OpenOptions` has strict/lossy configuration controls and overrides,
74+
but no supported option to open a repository while omitting its local include
75+
graph. A replacement must expose separately controlled metadata discovery and
76+
literal local configuration access with Git-compatible format validation.
77+
Do not bypass validation or reconstruct discovery/storage in Python to restore
78+
the old constructor. Downstream must construct its trusted metadata view before
79+
opening it with `Repo`, and handle native discovery errors explicitly; its
80+
original tests remain failed in the audit.
81+
6482
`git.GitDB` and `git.db.GitDB` remain compatibility aliases for
6583
`GitCmdObjectDB`, so legacy `Repo(..., odbt=GitDB)` selectors use the same
6684
managed backend. Aider 0.86.2 uses that selector for every repository open.
@@ -1151,7 +1169,7 @@ IDs, providing native evidence for a future adapter correction. Fetch remains
11511169
a CLI fallback: GixPython 0.2.0 must expose per-ref identities, status and notes
11521170
before its fetch outcome can satisfy `FetchInfo`. Do not infer namespaces or
11531171
reimplement fetch semantics in Python. Reproduction and baseline evidence are
1154-
retained in the [third downstream audit](../test/downstream/audit-2026-10-22-batch-3.md).
1172+
retained in the [downstream audit](../test/downstream/audit.md#airflow-ambiguous-mirror-fetch-results).
11551173

11561174
### Downstream empty configuration sections
11571175

‎doc/source/changes.rst‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@ API changes
6565
* Editable/source imports expose the release version in ``git.__version__``,
6666
matching built distributions. Salt's GitPython provider checks can parse the
6767
version instead of rejecting the unstamped ``"git"`` build placeholder.
68+
* ``Repo`` construction validates repository configuration through Git/Gix.
69+
A subclass override of ``config_reader()`` no longer controls discovery or
70+
suppresses its include graph. Malformed configuration and invalid repository
71+
extensions can fail before downstream custom validation runs. sbxloop's
72+
metadata-reader subclass exposes this remaining compatibility break; callers
73+
must prepare their trusted metadata view before opening it with ``Repo``.
6874
* Revision root trees such as ``Repo.rev_parse("HEAD:")`` retain their empty
6975
path and can be iterated. Missing paths within a valid tree revision retain
7076
``Tree.join()``'s ``KeyError`` and missing-component message, restoring MCP

‎test/downstream/README.md‎

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Downstream compatibility
22

3+
The [October 22–23, 2026 audit](audit.md) summarizes **115 projects**, beginning
4+
with known incompatibilities and retaining each project's release, results and
5+
coverage limits. It covers every identified current declared consumer in the
6+
September snapshot's top 15,000 distributions, plus known Git-focused users.
7+
This is not a strict popularity ranking or proof of complete application coverage.
8+
The runner below automates five CI profiles; it is not the complete audit inventory.
9+
310
Run released projects' GitPython-related tests against this checkout with
411
[uv](https://docs.astral.sh/uv/) and Git 2.52 or newer:
512

@@ -35,19 +42,22 @@ settings, pytest options/plugins, and Python import paths are cleared before
3542
setup and testing. Select a different Git executable by putting its directory
3643
first on `PATH`.
3744

38-
## Selection and coverage
45+
## Automated CI profiles
3946

40-
The selection uses current runtime users, including optional end-user features,
47+
These five profiles use current runtime users, including optional end-user features,
4148
ranked by September 2026 PyPI distribution downloads. Development, documentation,
4249
and test-only dependencies are excluded. Downloads are not unique installations.
4350

4451
| Project | Distribution downloads | Last tested release | Selected coverage |
4552
| --- | ---: | --- | --- |
4653
| LangChain Community | 27,882,881 | 0.4.2 | 2 upstream GitLoader tests: real clones, commits, checkout, tree traversal, ignored paths, and remote validation |
47-
| MLflow (`mlflow-skinny`) | 25,850,354 | 3.17.0 | 47 upstream tests: 31 repository/project/model-versioning cases plus 16 Git context and credential-redaction contract cases |
54+
| MLflow (`mlflow-skinny`) | 25,850,354 | 3.17.2 | 53 unique upstream repository/project/model-versioning, Git context and credential-redaction cases in the expanded audit |
4855
| Bandit | 24,935,372 | 1.9.4 | 12 upstream baseline CLI tests: real repository creation, commits, branches, resets, discovery, and dirty state |
4956
| SWE-bench | 22,942,741 | 5.0.2 | 4 supplemental integration cases for `AutoContextManager`; no upstream tests cover its GitPython callers |
50-
| DataHub (`acryl-datahub`) | 5,019,402 | 1.7.0.14 | 7 upstream tests passed, 1 credential-dependent skip: public clone/checkout, SSH timeout, exception/redaction contracts, and configuration |
57+
| DataHub (`acryl-datahub`) | 5,019,402 | 1.7.0.16 | 8 upstream tests passed, 1 credential-dependent skip: clone/checkout, SSH timeout, exception/redaction contracts, configuration and ODCS sourcing |
58+
59+
The runner automates the original selections. The linked audit broadens MLflow
60+
with `tests/projects/test_utils.py` and DataHub with its ODCS Git sourcing test.
5161

5262
Source: [top-pypi-packages](https://hugovk.github.io/top-pypi-packages/top-pypi-packages.min.json),
5363
snapshot updated **2026-10-01 12:40:51 UTC**. Its

0 commit comments

Comments
 (0)