| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 420d2af commit ed45d5b
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -9,7 +9,7 @@ | |||
| 9 | 9 | ||
| 10 | 10 | # typing ---------------------------------------------------------------------- | |
| 11 | 11 | ||
| 12 | - from typing import NamedTuple, Sequence, TYPE_CHECKING, Tuple, Union, cast | ||
| 12 | + from typing import NamedTuple, Sequence, TYPE_CHECKING, Tuple, Union, cast, List | ||
| 13 | 13 | ||
| 14 | 14 | from git.types import PathLike | |
| 15 | 15 | ||
@@ -57,7 +57,11 @@ def __call__(self, stage_blob: Tuple[StageType, Blob]) -> bool: | |||
| 57 | 57 | for pathlike in self.paths: | |
| 58 | 58 | path: Path = pathlike if isinstance(pathlike, Path) else Path(pathlike) | |
| 59 | 59 | # TODO: Change to use `PosixPath.is_relative_to` once Python 3.8 is no longer supported. | |
| 60 | - if all(i == j for i, j in zip(path.parts, blob_path.parts)): | ||
| 60 | + filter_parts: List[str] = path.parts | ||
| 61 | + blob_parts: List[str] = blob_path.parts | ||
| 62 | + if len(filter_parts) > len(blob_parts): | ||
| 63 | + continue | ||
| 64 | + if all(i == j for i, j in zip(filter_parts, blob_parts)): | ||
| 61 | 65 | return True | |
| 62 | 66 | return False | |
| 63 | 67 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,31 @@ | |||
| 1 | + """Test the blob filter.""" | ||
| 2 | + from pathlib import Path | ||
| 3 | + from typing import Sequence, Tuple | ||
| 4 | + from unittest.mock import MagicMock | ||
| 5 | + | ||
| 6 | + import pytest | ||
| 7 | + | ||
| 8 | + from git.index.typ import BlobFilter, StageType | ||
| 9 | + from git.objects import Blob | ||
| 10 | + from git.types import PathLike | ||
| 11 | + | ||
| 12 | + | ||
| 13 | + # fmt: off | ||
| 14 | + @pytest.mark.parametrize('paths, stage_type, path, expected_result', [ | ||
| 15 | + ((Path("foo"),), 0, Path("foo"), True), | ||
| 16 | + ((Path("foo"),), 0, Path("foo/bar"), True), | ||
| 17 | + ((Path("foo/bar"),), 0, Path("foo"), False), | ||
| 18 | + ((Path("foo"), Path("bar")), 0, Path("foo"), True), | ||
| 19 | + ]) | ||
| 20 | + # fmt: on | ||
| 21 | + def test_blob_filter(paths: Sequence[PathLike], stage_type: StageType, path: PathLike, expected_result: bool) -> None: | ||
| 22 | + """Test the blob filter.""" | ||
| 23 | + blob_filter = BlobFilter(paths) | ||
| 24 | + | ||
| 25 | + binsha = MagicMock(__len__=lambda self: 20) | ||
| 26 | + blob: Blob = Blob(repo=MagicMock(), binsha=binsha, path=path) | ||
| 27 | + stage_blob: Tuple[StageType, Blob] = (stage_type, blob) | ||
| 28 | + | ||
| 29 | + result = blob_filter(stage_blob) | ||
| 30 | + | ||
| 31 | + assert result == expected_result | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments