Skip to content

Commit 5e1b040

Browse files
committed
Remove deprecated support for passing str to Repository.merge()
Pass a Commit, Oid, or Reference object instead
1 parent 793d0ee commit 5e1b040

3 files changed

Lines changed: 8 additions & 34 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Unreleased
1+
# 1.20.0 (UNRELEASED)
22

33
- Add riscv64 wheels
44
[#1463](https://github.com/libgit2/pygit2/pull/1463)
@@ -8,6 +8,9 @@ Breaking changes:
88
- Remove deprecated `pygit2.legacyenums` module and `GIT_*` constants,
99
use `pygit2.enums` instead
1010

11+
- Remove deprecated support for passing `str` to `Repository.merge(...)`,
12+
pass a `Commit`, `Oid`, or `Reference` object instead
13+
1114

1215
# 1.19.3 (2026-06-13)
1316

pygit2/repository.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -983,7 +983,7 @@ def merge_trees(
983983

984984
def merge(
985985
self,
986-
source: Reference | Commit | Oid | str,
986+
source: Reference | Commit | Oid,
987987
favor: MergeFavor = MergeFavor.NORMAL,
988988
flags: MergeFlag = MergeFlag.FIND_RENAMES,
989989
file_flags: MergeFileFlag = MergeFileFlag.DEFAULT,
@@ -1003,8 +1003,6 @@ def merge(
10031003
It is preferable to pass in a Reference, because this enriches the
10041004
merge with additional information (for example, Repository.message will
10051005
specify the name of the branch being merged).
1006-
Previous versions of pygit2 allowed passing in a partial commit
1007-
hash as a string; this is deprecated.
10081006
10091007
favor
10101008
An enums.MergeFavor constant specifying how to deal with file-level conflicts.
@@ -1026,15 +1024,7 @@ def merge(
10261024
check_error(err)
10271025
else:
10281026
# Annotated commit from commit id
1029-
if isinstance(source, str):
1030-
# For backwards compatibility, parse a string as a partial commit hash
1031-
warnings.warn(
1032-
'Passing str to Repository.merge is deprecated. '
1033-
'Pass Commit, Oid, or a Reference (such as a Branch) instead.',
1034-
DeprecationWarning,
1035-
)
1036-
oid = self[source].peel(Commit).id
1037-
elif isinstance(source, Commit):
1027+
if isinstance(source, Commit):
10381028
oid = source.id
10391029
elif isinstance(source, Oid):
10401030
oid = source

test/test_merge.py

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,12 @@
3434
from pygit2.enums import FileStatus, MergeAnalysis, MergeFavor, MergeFileFlag, MergeFlag
3535

3636

37-
@pytest.mark.parametrize('id', [None, 42])
38-
def test_merge_invalid_type(mergerepo: Repository, id: None | int) -> None:
37+
@pytest.mark.parametrize('id', [None, 42, '5ebeeebb320790caf276b9fc8b24546d63316533'])
38+
def test_merge_invalid_type(mergerepo: Repository, id: None | int | str) -> None:
3939
with pytest.raises(TypeError):
4040
mergerepo.merge(id) # type:ignore
4141

4242

43-
# TODO: Once Repository.merge drops support for str arguments,
44-
# add an extra parameter to test_merge_invalid_type above
45-
# to make sure we cover legacy code.
46-
def test_merge_string_argument_deprecated(mergerepo: Repository) -> None:
47-
branch_head_hex = '5ebeeebb320790caf276b9fc8b24546d63316533'
48-
49-
with pytest.warns(DeprecationWarning, match=r'Pass Commit.+instead'):
50-
mergerepo.merge(branch_head_hex)
51-
52-
5343
def test_merge_analysis_uptodate(mergerepo: Repository) -> None:
5444
branch_head_hex = '5ebeeebb320790caf276b9fc8b24546d63316533'
5545
branch_id = mergerepo[branch_head_hex].id
@@ -91,15 +81,6 @@ def test_merge_no_fastforward_no_conflicts(mergerepo: Repository) -> None:
9181
assert {} == mergerepo.status()
9282

9383

94-
def test_merge_invalid_hex(mergerepo: Repository) -> None:
95-
branch_head_hex = '12345678'
96-
with (
97-
pytest.raises(KeyError),
98-
pytest.warns(DeprecationWarning, match=r'Pass Commit.+instead'),
99-
):
100-
mergerepo.merge(branch_head_hex)
101-
102-
10384
def test_merge_already_something_in_index(mergerepo: Repository) -> None:
10485
branch_head_hex = '03490f16b15a09913edb3a067a3dc67fbb8d41f1'
10586
branch_oid = mergerepo[branch_head_hex].id

0 commit comments

Comments
 (0)