django-migration-fixer
django-migration-fixer copied to clipboard
chore(deps): update dependency gitpython to v3.1.41 [security]
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| gitpython | ==3.1.30 -> ==3.1.41 |
GitHub Vulnerability Alerts
CVE-2023-40267
GitPython before 3.1.32 does not block insecure non-multi options in clone and clone_from, making it vulnerable to Remote Code Execution (RCE) due to improper user input validation, which makes it possible to inject a maliciously crafted remote URL into the clone command. Exploiting this vulnerability is possible because the library makes external calls to git without sufficient sanitization of input arguments. NOTE: this issue exists because of an incomplete fix for CVE-2022-24439.
CVE-2023-40590
Summary
When resolving a program, Python/Windows look for the current working directory, and after that the PATH environment (see big warning in https://docs.python.org/3/library/subprocess.html#popen-constructor). GitPython defaults to use the git command, if a user runs GitPython from a repo has a git.exe or git executable, that program will be run instead of the one in the user's PATH.
Details
This is more of a problem on how Python interacts with Windows systems, Linux and any other OS aren't affected by this. But probably people using GitPython usually run it from the CWD of a repo.
The execution of the git command happens in
https://github.com/gitpython-developers/GitPython/blob/1c8310d7cae144f74a671cbe17e51f63a830adbf/git/cmd.py#L277
https://github.com/gitpython-developers/GitPython/blob/1c8310d7cae144f74a671cbe17e51f63a830adbf/git/cmd.py#L983-L996
And there are other commands executed that should probably be aware of this problem.
PoC
On a Windows system, create a git.exe or git executable in any directory, and import or run GitPython from that directory
python -c "import git"
The git executable from the current directory will be run.
Impact
An attacker can trick a user to download a repository with a malicious git executable, if the user runs/imports GitPython from that directory, it allows the attacker to run any arbitrary commands.
Possible solutions
- Default to an absolute path for the git program on Windows, like
C:\\Program Files\\Git\\cmd\\git.EXE(default git path installation). - Require users to set the
GIT_PYTHON_GIT_EXECUTABLEenvironment variable on Windows systems. - Make this problem prominent in the documentation and advise users to never run GitPython from an untrusted repo, or set the
GIT_PYTHON_GIT_EXECUTABLEenv var to an absolute path. - Resolve the executable manually by only looking into the
PATHenvironment variable (suggested by @Byron)
[!NOTE] This vulnerability was reported via email, and it was decided to publish it here and make it public, so the community is aware of it, and a fix can be provided.
CVE-2023-41040
Summary
In order to resolve some git references, GitPython reads files from the .git directory, in some places the name of the file being read is provided by the user, GitPython doesn't check if this file is located outside the .git directory. This allows an attacker to make GitPython read any file from the system.
Details
This vulnerability is present in
https://github.com/gitpython-developers/GitPython/blob/1c8310d7cae144f74a671cbe17e51f63a830adbf/git/refs/symbolic.py#L174-L175
That code joins the base directory with a user given string without checking if the final path is located outside the base directory.
I was able to exploit it from three places, but there may be more code paths that lead to it:
https://github.com/gitpython-developers/GitPython/blob/1c8310d7cae144f74a671cbe17e51f63a830adbf/git/repo/base.py#L605
https://github.com/gitpython-developers/GitPython/blob/1c8310d7cae144f74a671cbe17e51f63a830adbf/git/repo/base.py#L620
https://github.com/gitpython-developers/GitPython/blob/1c8310d7cae144f74a671cbe17e51f63a830adbf/git/index/base.py#L1353
PoC
Running GitPython within any repo should work, here is an example with the GitPython repo.
import git
r = git.Repo(".")
# This will make GitPython read the README.md file from the root of the repo
r.commit("../README.md")
r.tree("../README.md")
r.index.diff("../README.md")
# Reading /etc/random
# WARNING: this will probably halt your system, run with caution
# r.commit("../../../../../../../../../dev/random")
Impact
I wasn't able to show the contents of the files (that's why "blind" local file inclusion), depending on how GitPython is being used, this can be used by an attacker for something inoffensive as checking if a file exits, or cause a DoS by making GitPython read a big/infinite file (like /dev/random on Linux systems).
Possible solutions
A solution would be to check that the final path isn't located outside the repodir path (maybe even after resolving symlinks). Maybe there could be other checks in place to make sure that the reference names are valid.
[!NOTE] This vulnerability was reported via email, and it was decided to publish it here and make it public, so the community is aware of it, and a fix can be provided.
CVE-2024-22190
Summary
This issue exists because of an incomplete fix for CVE-2023-40590. On Windows, GitPython uses an untrusted search path if it uses a shell to run git, as well as when it runs bash.exe to interpret hooks. If either of those features are used on Windows, a malicious git.exe or bash.exe may be run from an untrusted repository.
Details
Although GitPython often avoids executing programs found in an untrusted search path since 3.1.33, two situations remain where this still occurs. Either can allow arbitrary code execution under some circumstances.
When a shell is used
GitPython can be told to run git commands through a shell rather than as direct subprocesses, by passing shell=True to any method that accepts it, or by both setting Git.USE_SHELL = True and not passing shell=False. Then the Windows cmd.exe shell process performs the path search, and GitPython does not prevent that shell from finding and running git in the current directory.
When GitPython runs git directly rather than through a shell, the GitPython process performs the path search, and currently omits the current directory by setting NoDefaultCurrentDirectoryInExePath in its own environment during the Popen call. Although the cmd.exe shell will honor this environment variable when present, GitPython does not currently pass it into the shell subprocess's environment.
Furthermore, because GitPython sets the subprocess CWD to the root of a repository's working tree, using a shell will run a malicious git.exe in an untrusted repository even if GitPython itself is run from a trusted location.
This also applies if Git.execute is called directly with shell=True (or after Git.USE_SHELL = True) to run any command.
When hook scripts are run
On Windows, GitPython uses bash.exe to run hooks that appear to be scripts. However, unlike when running git, no steps are taken to avoid finding and running bash.exe in the current directory.
This allows the author of an untrusted fork or branch to cause a malicious bash.exe to be run in some otherwise safe workflows. An example of such a scenario is if the user installs a trusted hook while on a trusted branch, then switches to an untrusted feature branch (possibly from a fork) to review proposed changes. If the untrusted feature branch contains a malicious bash.exe and the user's current working directory is the working tree, and the user performs an action that runs the hook, then although the hook itself is uncorrupted, it runs with the malicious bash.exe.
Note that, while bash.exe is a shell, this is a separate scenario from when git is run using the unrelated Windows cmd.exe shell.
PoC
On Windows, create a git.exe file in a repository. Then create a Repo object, and call any method through it (directly or indirectly) that supports the shell keyword argument with shell=True:
mkdir testrepo
git init testrepo
cp ... testrepo git.exe # Replace "..." with any executable of choice.
python -c "import git; print(git.Repo('testrepo').git.version(shell=True))"
The git.exe executable in the repository directory will be run.
Or use no Repo object, but do it from the location with the git.exe:
cd testrepo
python -c "import git; print(git.Git().version(shell=True))"
The git.exe executable in the current directory will be run.
For the scenario with hooks, install a hook in a repository, create a bash.exe file in the current directory, and perform an operation that causes GitPython to attempt to run the hook:
mkdir testrepo
cd testrepo
git init
mv .git/hooks/pre-commit.sample .git/hooks/pre-commit
cp ... bash.exe # Replace "..." with any executable of choice.
echo "Some text" >file.txt
git add file.txt
python -c "import git; git.Repo().index.commit('Some message')"
The bash.exe executable in the current directory will be run.
Impact
The greatest impact is probably in applications that set Git.USE_SHELL = True for historical reasons. (Undesired console windows had, in the past, been created in some kinds of applications, when it was not used.) Such an application may be vulnerable to arbitrary code execution from a malicious repository, even with no other exacerbating conditions. This is to say that, if a shell is used to run git, the full effect of CVE-2023-40590 is still present. Furthermore, as noted above, running the application itself from a trusted directory is not a sufficient mitigation.
An application that does not direct GitPython to use a shell to run git subprocesses thus avoids most of the risk. However, there is no such straightforward way to prevent GitPython from running bash.exe to interpret hooks. So while the conditions needed for that to be exploited are more involved, it may be harder to mitigate decisively prior to patching.
Possible solutions
A straightforward approach would be to address each bug directly:
- When a shell is used, pass
NoDefaultCurrentDirectoryInExePathinto the subprocess environment, because in that scenario the subprocess is thecmd.exeshell that itself performs the path search. - Set
NoDefaultCurrentDirectoryInExePathin the GitPython process environment during thePopencall made to run hooks with abash.exesubprocess.
These need only be done on Windows.
Release Notes
gitpython-developers/GitPython (gitpython)
v3.1.41: - fix Windows security issue
The details about the Windows security issue can be found in this advisory.
Special thanks go to @EliahKagan who reported the issue and fixed it in a single stroke, while being responsible for an incredible amount of improvements that he contributed over the last couple of months ❤️.
What's Changed
- Add
__all__in git.exc by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1719 - Set submodule update cadence to weekly by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1721
- Never modify sys.path by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1720
- Bump git/ext/gitdb from
8ec2390toec58b7eby @dependabot in https://github.com/gitpython-developers/GitPython/pull/1722 - Revise comments, docstrings, some messages, and a bit of code by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1725
- Use zero-argument super() by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1726
- Remove obsolete note in _iter_packed_refs by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1727
- Reorganize test_util and make xfail marks precise by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1729
- Clarify license and make module top comments more consistent by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1730
- Deprecate compat.is_
, rewriting all uses by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1732 - Revise and restore some module docstrings by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1735
- Make the rmtree callback Windows-only by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1739
- List all non-passing tests in test summaries by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1740
- Document some minor subtleties in test_util.py by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1749
- Always read metadata files as UTF-8 in setup.py by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1748
- Test native Windows on CI by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1745
- Test macOS on CI by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1752
- Let close_fds be True on all platforms by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1753
- Fix IndexFile.from_tree on Windows by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1751
- Remove unused TASKKILL fallback in AutoInterrupt by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1754
- Don't return with operand when conceptually void by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1755
- Group .gitignore entries by purpose by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1758
- Adding dubious ownership handling by @marioaag in https://github.com/gitpython-developers/GitPython/pull/1746
- Avoid brittle assumptions about preexisting temporary files in tests by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1759
- Overhaul noqa directives by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1760
- Clarify some Git.execute kill_after_timeout limitations by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1761
- Bump actions/setup-python from 4 to 5 by @dependabot in https://github.com/gitpython-developers/GitPython/pull/1763
- Don't install black on Cygwin by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1766
- Extract all "import gc" to module level by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1765
- Extract remaining local "import gc" to module level by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1768
- Replace xfail with gc.collect in TestSubmodule.test_rename by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1767
- Enable CodeQL by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1769
- Replace some uses of the deprecated mktemp function by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1770
- Bump github/codeql-action from 2 to 3 by @dependabot in https://github.com/gitpython-developers/GitPython/pull/1773
- Run some Windows environment variable tests only on Windows by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1774
- Fix TemporaryFileSwap regression where file_path could not be Path by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1776
- Improve hooks tests by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1777
- Fix if items of Index is of type PathLike by @stegm in https://github.com/gitpython-developers/GitPython/pull/1778
- Better document IterableObj.iter_items and improve some subclasses by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1780
- Revert "Don't install black on Cygwin" by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1783
- Add missing pip in $PATH on Cygwin CI by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1784
- Shorten Iterable docstrings and put IterableObj first by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1785
- Fix incompletely revised Iterable/IterableObj docstrings by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1786
- Pre-deprecate setting Git.USE_SHELL by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1782
- Deprecate Git.USE_SHELL by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1787
- In handle_process_output don't forward finalizer result by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1788
- Fix mypy warning "Missing return statement" by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1789
- Fix two remaining Windows untrusted search path cases by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1792
New Contributors
- @marioaag made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1746
- @stegm made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1778
Full Changelog: https://github.com/gitpython-developers/GitPython/compare/3.1.40...3.1.41
v3.1.40: - fix downstream CI
What's Changed
- Add missing info in Submodule.remove docstring by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1714
- Have init script clone submodules unconditionally by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1715
Full Changelog: https://github.com/gitpython-developers/GitPython/compare/3.1.38...3.1.40
v3.1.38
What's Changed
- Add missing assert keywords by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1678
- Make clear every test's status in every CI run by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1679
- Fix new link to license in readme by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1680
- Drop unneeded flake8 suppressions by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1681
- Update instructions and test helpers for git-daemon by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1684
- Fix Git.execute shell use and reporting bugs by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1687
- No longer allow CI to select a prerelease for 3.12 by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1689
- Clarify Git.execute and Popen arguments by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1688
- Ask git where its daemon is and use that by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1697
- Fix bugs affecting exception wrapping in rmtree callback by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1700
- Fix dynamically-set all variable by @DeflateAwning in https://github.com/gitpython-developers/GitPython/pull/1659
- Fix small #1662 regression due to #1659 by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1701
- Drop obsolete info on yanking from security policy by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1703
- Have Dependabot offer submodule updates by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1702
- Bump git/ext/gitdb from
49c3178to8ec2390by @dependabot in https://github.com/gitpython-developers/GitPython/pull/1704 - Bump git/ext/gitdb from
8ec2390to6a22706by @dependabot in https://github.com/gitpython-developers/GitPython/pull/1705 - Update readme for milestone-less releasing by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1707
- Run Cygwin CI workflow commands in login shells by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1709
New Contributors
- @DeflateAwning made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1659
Full Changelog: https://github.com/gitpython-developers/GitPython/compare/3.1.37...3.1.38
v3.1.37: - a proper fix CVE-2023-41040
What's Changed
- Improve Python version and OS compatibility, fixing deprecations by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1654
- Better document env_case test/fixture and cwd by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1657
- Remove spurious executable permissions by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1658
- Fix up checks in Makefile and make them portable by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1661
- Fix URLs that were redirecting to another license by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1662
- Assorted small fixes/improvements to root dir docs by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1663
- Use venv instead of virtualenv in test_installation by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1664
- Omit py_modules in setup by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1665
- Don't track code coverage temporary files by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1666
- Configure tox by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1667
- Format tests with black and auto-exclude untracked paths by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1668
- Upgrade and broaden flake8, fixing style problems and bugs by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1673
- Fix rollback bug in SymbolicReference.set_reference by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1675
- Remove
@NoEffectannotations by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1677 - Add more checks for the validity of refnames by @facutuesca in https://github.com/gitpython-developers/GitPython/pull/1672
Full Changelog: https://github.com/gitpython-developers/GitPython/compare/3.1.36...3.1.37
v3.1.36
v3.1.35: - a fix for CVE-2023-41040
What's Changed
- Bump actions/checkout from 3 to 4 by @dependabot in https://github.com/gitpython-developers/GitPython/pull/1643
- Fix 'Tree' object has no attribute '_name' when submodule path is normal path by @CosmosAtlas in https://github.com/gitpython-developers/GitPython/pull/1645
- Fix CVE-2023-41040 by @facutuesca in https://github.com/gitpython-developers/GitPython/pull/1644
- Only make config more permissive in tests that need it by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1648
- Added test for PR #1645 submodule path by @CosmosAtlas in https://github.com/gitpython-developers/GitPython/pull/1647
- Fix Windows environment variable upcasing bug by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1650
New Contributors
- @CosmosAtlas made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1645
- @facutuesca made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1644
Full Changelog: https://github.com/gitpython-developers/GitPython/compare/3.1.34...3.1.35
v3.1.34: - fix resource leaking
What's Changed
- util: close lockfile after opening successfully by @skshetry in https://github.com/gitpython-developers/GitPython/pull/1639
New Contributors
- @skshetry made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1639
Full Changelog: https://github.com/gitpython-developers/GitPython/compare/3.1.33...3.1.34
v3.1.33: - with security fix
What's Changed
- WIP Quick doc by @LeoDaCoda in https://github.com/gitpython-developers/GitPython/pull/1608
- Partial clean up wrt mypy and black by @bodograumann in https://github.com/gitpython-developers/GitPython/pull/1617
- Disable merge_includes in config writers by @bodograumann in https://github.com/gitpython-developers/GitPython/pull/1618
- feat: full typing for "progress" parameter in Repo class by @madebylydia in https://github.com/gitpython-developers/GitPython/pull/1634
- Fix CVE-2023-40590 by @EliahKagan in https://github.com/gitpython-developers/GitPython/pull/1636
- #1566 Creating a lock now uses python built-in "open()" method to work arou… by @HageMaster3108 in https://github.com/gitpython-developers/GitPython/pull/1619
New Contributors
- @LeoDaCoda made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1608
- @bodograumann made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1617
- @EliahKagan made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1636
- @HageMaster3108 made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1619
Full Changelog: https://github.com/gitpython-developers/GitPython/compare/3.1.32...3.1.33
v3.1.32: - with another security update
What's Changed
- Bump cygwin/cygwin-install-action from 3 to 4 by @dependabot in https://github.com/gitpython-developers/GitPython/pull/1572
- Fix up the commit trailers functionality by @itsluketwist in https://github.com/gitpython-developers/GitPython/pull/1576
- Name top-level exceptions as private variables by @Hawk777 in https://github.com/gitpython-developers/GitPython/pull/1590
- fix pypi long description by @eUgEntOptIc44 in https://github.com/gitpython-developers/GitPython/pull/1603
- Don't rely on del by @r-darwish in https://github.com/gitpython-developers/GitPython/pull/1606
- Block insecure non-multi options in clone/clone_from by @Beuc in https://github.com/gitpython-developers/GitPython/pull/1609
New Contributors
- @Hawk777 made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1590
- @eUgEntOptIc44 made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1603
- @r-darwish made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1606
- @Beuc made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1609
Full Changelog: https://github.com/gitpython-developers/GitPython/compare/3.1.31...3.1.32
v3.1.31
What's Changed
- Fix Sphinx rendering errors by @stephan-cr in https://github.com/gitpython-developers/GitPython/pull/1524
- tests: Use
command -vinstead of third-partywhichprogram by @mgorny in https://github.com/gitpython-developers/GitPython/pull/1525 - fix/add allow_unsafe_* params in docstrings + fix typo by @obfusk in https://github.com/gitpython-developers/GitPython/pull/1530
- use tempfile.TemporaryDirectory & fix clone_from_unsafe_protocol tests by @obfusk in https://github.com/gitpython-developers/GitPython/pull/1531
- Fix some resource leaks by open file handles by @marlamb in https://github.com/gitpython-developers/GitPython/pull/1532
- fix files list on file rename by @teknoraver in https://github.com/gitpython-developers/GitPython/pull/1537
- Declare support for Python 3.11 by @hugovk in https://github.com/gitpython-developers/GitPython/pull/1541
- Fix ignored by @Lightborne in https://github.com/gitpython-developers/GitPython/pull/1545
- Fix timezone parsing functions for non-hour timezones by @jcowgill in https://github.com/gitpython-developers/GitPython/pull/1547
- Enable user to override default diff -M arg by @mellowed100 in https://github.com/gitpython-developers/GitPython/pull/1551
- Remove optional from two member variables by @Sineaggi in https://github.com/gitpython-developers/GitPython/pull/1550
- Fix RecursionError when iterating streams by @eric-wieser in https://github.com/gitpython-developers/GitPython/pull/1554
- Fix get_values() so it correctly loads section names by @Codym48 in https://github.com/gitpython-developers/GitPython/pull/1555
New Contributors
- @stephan-cr made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1524
- @obfusk made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1530
- @marlamb made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1532
- @teknoraver made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1537
- @Lightborne made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1545
- @jcowgill made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1547
- @mellowed100 made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1551
- @Sineaggi made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1550
- @Codym48 made their first contribution in https://github.com/gitpython-developers/GitPython/pull/1555
Full Changelog: https://github.com/gitpython-developers/GitPython/compare/3.1.30...3.1.31
Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
- [ ] If you want to rebase/retry this PR, check this box
This PR was generated by Mend Renovate. View the repository job log.