Skip to content

Commit d191e14

Browse files
dtrifiropmrowla
authored andcommitted
dulwich: use untracked_files="no" in is_dirty
This will speed up calling `is_dirty` with untracked_files=False related to #69
1 parent ca28ae0 commit d191e14

File tree

2 files changed

+72
-2
lines changed

2 files changed

+72
-2
lines changed

scmrepo/git/backend/dulwich/__init__.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from io import BytesIO, StringIO
88
from typing import (
99
TYPE_CHECKING,
10+
Any,
1011
Callable,
1112
Dict,
1213
Iterable,
@@ -344,8 +345,10 @@ def is_tracked(self, path: str) -> bool:
344345
return False
345346

346347
def is_dirty(self, untracked_files: bool = False) -> bool:
347-
staged, unstaged, untracked = self.status()
348-
return bool(staged or unstaged or (untracked_files and untracked))
348+
kwargs: Dict[str, Any] = (
349+
{} if untracked_files else {"untracked_files": "no"}
350+
)
351+
return any(self.status(**kwargs))
349352

350353
def active_branch(self) -> str:
351354
raise NotImplementedError

tests/test_git.py

+67
Original file line numberDiff line numberDiff line change
@@ -1041,3 +1041,70 @@ def test_status(
10411041
assert staged["modify"] == ["foo"]
10421042
assert unstaged == ["bar"]
10431043
assert untracked == expected_untracked
1044+
1045+
1046+
@pytest.mark.skip_git_backend("pygit2")
1047+
def test_is_dirty_empty(
1048+
tmp_dir: TmpDir,
1049+
scm: Git,
1050+
git: Git,
1051+
):
1052+
assert not git.is_dirty()
1053+
1054+
1055+
@pytest.mark.skip_git_backend("pygit2")
1056+
def test_is_dirty_added(
1057+
tmp_dir: TmpDir,
1058+
scm: Git,
1059+
git: Git,
1060+
):
1061+
tmp_dir.gen("foo", "foo")
1062+
scm.add("foo")
1063+
1064+
assert git.is_dirty()
1065+
scm.commit("commit")
1066+
assert not git.is_dirty()
1067+
1068+
1069+
@pytest.mark.skip_git_backend("pygit2")
1070+
def test_is_dirty_modified(
1071+
tmp_dir: TmpDir,
1072+
scm: Git,
1073+
git: Git,
1074+
):
1075+
tmp_dir.gen("foo", "foo")
1076+
scm.add_commit("foo", message="add foo")
1077+
1078+
tmp_dir.gen("foo", "modified")
1079+
assert git.is_dirty()
1080+
scm.add_commit("foo", message="modified")
1081+
assert not git.is_dirty()
1082+
1083+
1084+
@pytest.mark.skip_git_backend("pygit2")
1085+
def test_is_dirty_deleted(
1086+
tmp_dir: TmpDir,
1087+
scm: Git,
1088+
git: Git,
1089+
):
1090+
tmp_dir.gen("foo", "foo")
1091+
scm.add_commit("foo", message="add foo")
1092+
1093+
assert not git.is_dirty()
1094+
os.unlink(tmp_dir / "foo")
1095+
assert git.is_dirty()
1096+
scm.add("foo")
1097+
assert git.is_dirty()
1098+
scm.commit("deleted")
1099+
assert not git.is_dirty()
1100+
1101+
1102+
@pytest.mark.skip_git_backend("pygit2")
1103+
def test_is_dirty_untracked(
1104+
tmp_dir: TmpDir,
1105+
scm: Git,
1106+
git: Git,
1107+
):
1108+
tmp_dir.gen("untracked", "untracked")
1109+
assert git.is_dirty(untracked_files=True)
1110+
assert not git.is_dirty(untracked_files=False)

0 commit comments

Comments
 (0)