Skip to content

Commit

Permalink
Merge pull request #1545 from Lightborne/fix_ignored
Browse files Browse the repository at this point in the history
Fix ignored
  • Loading branch information
Byron committed Jan 22, 2023
2 parents f594266 + df4dabb commit cc92d51
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 2 deletions.
11 changes: 9 additions & 2 deletions git/repo/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -873,8 +873,15 @@ def ignored(self, *paths: PathLike) -> List[str]:
"""
try:
proc: str = self.git.check_ignore(*paths)
except GitCommandError:
return []
except GitCommandError as err:
# If return code is 1, this means none of the items in *paths
# are ignored by Git, so return an empty list. Raise the
# exception on all other return codes.
if err.status == 1:
return []
else:
raise

return proc.replace("\\\\", "\\").replace('"', "").split("\n")

@property
Expand Down
27 changes: 27 additions & 0 deletions test/test_repo.py
Original file line number Diff line number Diff line change
Expand Up @@ -1384,3 +1384,30 @@ def test_clone_from_command_injection(self, rw_repo):
rw_repo.clone_from(payload, temp_repo.common_dir)

assert not unexpected_file.exists()

def test_ignored_items_reported(self):
with tempfile.TemporaryDirectory() as tdir:
tmp_dir = pathlib.Path(tdir)
temp_repo = Repo.init(tmp_dir / "repo")

gi = tmp_dir / "repo" / ".gitignore"

with open(gi, 'w') as file:
file.write('ignored_file.txt\n')
file.write('ignored_dir/\n')

assert temp_repo.ignored(['included_file.txt', 'included_dir/file.txt']) == []
assert temp_repo.ignored(['ignored_file.txt']) == ['ignored_file.txt']
assert temp_repo.ignored(['included_file.txt', 'ignored_file.txt']) == ['ignored_file.txt']
assert temp_repo.ignored(['included_file.txt', 'ignored_file.txt', 'included_dir/file.txt', 'ignored_dir/file.txt']) == ['ignored_file.txt', 'ignored_dir/file.txt']

def test_ignored_raises_error_w_symlink(self):
with tempfile.TemporaryDirectory() as tdir:
tmp_dir = pathlib.Path(tdir)
temp_repo = Repo.init(tmp_dir / "repo")

os.mkdir(tmp_dir / "target")
os.symlink(tmp_dir / "target", tmp_dir / "symlink")

with pytest.raises(GitCommandError):
temp_repo.ignored(tmp_dir / "symlink/file.txt")

0 comments on commit cc92d51

Please sign in to comment.