Skip to content

Commit 46303c8

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 3640db4 commit 46303c8

11 files changed

Lines changed: 24955 additions & 4 deletions

‎doc/gix-backend.md‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,24 @@ variables literal; `expand_vars=True` is unsupported. Callers wanting expansion
5151
must perform it before passing the path. Discovery still uses Gix/Git after
5252
ordinary input-path canonicalization.
5353

54+
Repository construction validates storage and configuration through Gix/Git;
55+
overriding `Repo.config_reader()` does not replace that native discovery parser.
56+
sbxloop 2.1.36's `_MetadataRepo` subclass relied on the released constructor's
57+
permissive Python discovery and overridden no-includes reader. Five upstream
58+
tests still differ: malformed includes prevent opening, malformed local config
59+
is rejected before its custom `ProvisionError`, and version-0 repositories
60+
with version-1 storage extensions are rejected before its format check. Released
61+
GitPython 3.2.1 passes those five tests. This is a breaking subclass contract,
62+
not a demonstrated Gix-versus-Git mismatch: both backends reject the metadata.
63+
GixPython `OpenOptions` has strict/lossy configuration controls and overrides,
64+
but no supported option to open a repository while omitting its local include
65+
graph. A replacement must expose separately controlled metadata discovery and
66+
literal local configuration access with Git-compatible format validation.
67+
Do not bypass validation or reconstruct discovery/storage in Python to restore
68+
the old constructor. Downstream must construct its trusted metadata view before
69+
opening it with `Repo`, and handle native discovery errors explicitly; its
70+
original tests remain failed in the audit.
71+
5472
`git.GitDB` and `git.db.GitDB` remain compatibility aliases for
5573
`GitCmdObjectDB`, so legacy `Repo(..., odbt=GitDB)` selectors use the same
5674
managed backend. Aider 0.86.2 uses that selector for every repository open.

‎doc/source/changes.rst‎

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

‎test/downstream/README.md‎

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

3+
The [2026-10-22 audit](audit-2026-10-22.md) covers 31 projects, including major
4+
runtime, development and documentation users. Its [manifest](audit-2026-10-22.json)
5+
records releases, source hashes, commands, results and coverage limits. The runner
6+
below automates five CI profiles; it is not the complete audit inventory.
7+
8+
The [second 30-project batch](audit-2026-10-22-batch-2.md) brings the total to
9+
61 processed projects, with four further local fixes and explicitly retained
10+
compatibility, downstream and harness failures. Its
11+
[manifest](audit-2026-10-22-batch-2.json) records the next popularity-ranked
12+
selection and results on both backends.
13+
14+
The [third 39-project batch](audit-2026-10-22-batch-3.md) brings the audit to
15+
100 distinct projects. It records further local compatibility fixes, three
16+
remaining Kas configuration API failures, and failures inherited from released
17+
GitPython. Its [manifest](audit-2026-10-22-batch-3.json) includes verified release
18+
archives, commands, import proofs and coverage limits. Additional selections are
19+
popularity-ranked; the original known-user additions mean this is a 100-project
20+
audit rather than a strict mathematical top 100.
21+
22+
The [remaining 15-project batch](audit-2026-10-23-batch-4.md) brings the audit to
23+
115 distinct projects and completes every identified current declared consumer
24+
in the September snapshot of the top 15,000 distributions. Its
25+
[manifest](audit-2026-10-23-batch-4.json) records released callers, tests, baseline
26+
comparisons and limits. This covers the identified distribution download weight;
27+
it does not attribute GitPython installs or imply complete application coverage.
28+
329
Run released projects' GitPython-related tests against this checkout with
430
[uv](https://docs.astral.sh/uv/) and Git 2.52 or newer:
531

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

38-
## Selection and coverage
64+
## Automated CI profiles
3965

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

4470
| Project | Distribution downloads | Last tested release | Selected coverage |
4571
| --- | ---: | --- | --- |
4672
| 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 |
73+
| 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 |
4874
| Bandit | 24,935,372 | 1.9.4 | 12 upstream baseline CLI tests: real repository creation, commits, branches, resets, discovery, and dirty state |
4975
| 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 |
76+
| 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 |
77+
78+
The runner automates the original selections. The linked audit broadens MLflow
79+
with `tests/projects/test_utils.py` and DataHub with its ODCS Git sourcing test.
5180

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

0 commit comments

Comments
 (0)