-
-
Notifications
You must be signed in to change notification settings - Fork 988
Comparing changes
Open a pull request
base repository: gitpython-developers/GitPython
base: 3.1.58
head repository: gitpython-developers/GitPython
compare: main
- 13 commits
- 18 files changed
- 2 contributors
Commits on Aug 4, 2026
-
Merge pull request #2207 from gitpython-developers/next-release
prepare changelog for upcoming release
Configuration menu - View commit details
-
Copy full SHA for 4ba9ce6 - Browse repository at this point
Copy the full SHA 4ba9ce6View commit details
Commits on Aug 5, 2026
-
Block file-reading Git options
<!-- agent --> Reject file-reading options passed to blame, diff, and tag APIs. Inspect positional values after resolving aliases, recognize unsafe options behind command-specific short-flag clusters, and retain the explicit allow_unsafe_options escape hatch. This closes GHSA-5xxx-qhh7-9287 and GHSA-3wxw-xv34-2frg and covers the adjacent diff order-file sink. Regression tests cover long, short, and clustered options, incremental blame, tag path/reference positionals, the ref keyword alias, both diff entry points, and preservation of diff pickaxe behavior. Git baseline: cf5497b14c; git-blame, git-diff, and git-tag document the relevant file-input options. Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com>
Configuration menu - View commit details
-
Copy full SHA for 1b0d2d9 - Browse repository at this point
Copy the full SHA 1b0d2d9View commit details -
Configuration menu - View commit details
-
Copy full SHA for ce9d8e8 - Browse repository at this point
Copy the full SHA ce9d8e8View commit details -
Merge pull request #2208 from gitpython-developers/security-fixes
Block file-reading Git options
Configuration menu - View commit details
-
Copy full SHA for 9729ed3 - Browse repository at this point
Copy the full SHA 9729ed3View commit details
Commits on Aug 10, 2026
-
fix:
index.add()now supports filters (#2021)This is done by calling into `git hash-object` for correctness, instead of using a mostly incorrect custom implementation for this (lacks filters). <!-- agent --> GitCmdObjectDB inherited LooseObjectDB.store(), so despite its name, object writes bypassed Git and used gitdb's loose-object implementation. That path creates and chmods object files itself, which can fail during Index.add() on filesystems where those permission changes are unsupported. Override store() to stream new objects through `git hash-object -w --stdin`. This lets Git manage object creation and permissions consistently with the repository configuration. Retain the inherited implementation for pre-hashed objects and custom output streams, whose existing semantics hash-object cannot provide. Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com>
Configuration menu - View commit details
-
Copy full SHA for 93677a0 - Browse repository at this point
Copy the full SHA 93677a0View commit details -
Block separate git directories during clone
<!-- agent --> Repo.clone() and Repo.clone_from() did not reject the clone option that redirects repository metadata to a caller-controlled path (GHSA-8mcc-hrx5-hvxc). Regression coverage exercises both keyword and multi-option input through both public clone APIs. Add the option to the existing clone denylist, matching Repo.init() and the documented allow_unsafe_options contract. Git itself registers The Python package and Alpine test workflows failed across the submodule suite because GitPython internally supplies --separate-git-dir when creating modern submodule layouts. The new public clone guard correctly rejected that option, but could not distinguish the library-generated path from caller input. Validate caller-provided keyword and multi-options before adding the library-controlled metadata path, then explicitly allow the resulting trusted clone invocation. This preserves rejection of unsafe clone_multi_options while restoring normal submodule creation. Update the one test that intentionally invokes Repo.clone_from() with its own separate git directory to opt in explicitly. Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com> Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com>
Configuration menu - View commit details
-
Copy full SHA for b68afff - Browse repository at this point
Copy the full SHA b68afffView commit details -
Merge pull request #2209 from caroescm/fix-index-add-chmod
index: write blobs via git hash-object, not gitdb's odb.store
Configuration menu - View commit details
-
Copy full SHA for 5ff52cc - Browse repository at this point
Copy the full SHA 5ff52ccView commit details -
Merge pull request #2210 from gitpython-developers/fix-clone-unsafe-o…
…ption Block separate git directories during clone
Configuration menu - View commit details
-
Copy full SHA for b473abb - Browse repository at this point
Copy the full SHA b473abbView commit details -
fix: preserve multiline config values when writing
<!-- agent --> GitConfigParser decoded valid multiline values into embedded newlines, but _write() serialized those newlines as indented physical lines. Rewriting an otherwise unchanged config could therefore change its meaning to Git. Serialize resident multiline values with Git-compatible escapes inside a quoted continuation, preserving GitPython read compatibility while keeping each option structurally intact. This addresses GHSA-284h-m62q-gf8w. The regression starts with an inert multiline value, performs an unrelated write, and verifies with both GitPython and git config that it remains one value and does not create another option. Git baseline: config.c parse_value() and write_pair() at cf5497b14c5a escape embedded LF as \\n rather than emitting it as a physical config line. Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com>
Configuration menu - View commit details
-
Copy full SHA for 4b4e47f - Browse repository at this point
Copy the full SHA 4b4e47fView commit details -
fix: ignore includes in submodule configuration
<!-- agent --> Submodule configuration is read from .gitmodules, whose contents may come from an untrusted repository. Its parser inherited merge_includes=True and could therefore open files named by include directives during ordinary submodule enumeration. Disable include merging at the SubmoduleConfigParser construction site. This matches Repo.config_writer() hardening from 41ecc6a and addresses GHSA-7833-fr7j-v32q without changing include behavior for trusted config parsers. The regression points .gitmodules at a non-config file and verifies the submodule entry remains readable without opening the included path. Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com>
Configuration menu - View commit details
-
Copy full SHA for ef7568e - Browse repository at this point
Copy the full SHA ef7568eView commit details -
Merge pull request #2211 from gitpython-developers/config-sanitize-more
fix: harden config parsing boundaries
Configuration menu - View commit details
-
Copy full SHA for a5e047d - Browse repository at this point
Copy the full SHA a5e047dView commit details -
Configuration menu - View commit details
-
Copy full SHA for 66340d7 - Browse repository at this point
Copy the full SHA 66340d7View commit details -
Merge pull request #2212 from gitpython-developers/next-release
prepare changelog prior to release
Configuration menu - View commit details
-
Copy full SHA for 52a6cba - Browse repository at this point
Copy the full SHA 52a6cbaView commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff 3.1.58...main