fix bugs: correctly diff against working tree or other commits now. add documentation for recent method
This commit is contained in:
parent
7b277ad8b6
commit
c24eb9cd25
1 changed files with 23 additions and 6 deletions
|
@ -2,24 +2,41 @@ import git
|
||||||
|
|
||||||
from .git_version import get_latest_commit
|
from .git_version import get_latest_commit
|
||||||
from typing import Union, Optional, List
|
from typing import Union, Optional, List
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
def is_recent(file, repo, compare: Optional[Union[git.Commit, List[git.Commit]]] = None) -> Optional[bool]:
|
def is_recent(file: Path, repo: git.Repo, compare: Optional[Union[git.Commit, List[git.Commit]]] = None) -> Optional[bool]:
|
||||||
|
"""
|
||||||
|
:param file: file to check
|
||||||
|
:param repo: repo that the file belongs to
|
||||||
|
:param compare: commit or list of commits to compare to. None stands for 'working tree'
|
||||||
|
:return: Whether the given file is currently the same as in compared commit
|
||||||
|
|
||||||
|
If compare is a commit, checks if the file has changed since given commit, compared to the most recent commit
|
||||||
|
of the repository
|
||||||
|
For a list of commits, checks the same, but for all of these commits. In particular, only returns true if the file
|
||||||
|
is the same in all of the specified commits (and in the most recent of the repository)
|
||||||
|
|
||||||
|
If compare is None, compares the file against the corking tree, i.e. if the file has been modified since the last
|
||||||
|
commit on the repo. This also involves staged files, i.e. modified and staged files will be considered as
|
||||||
|
'not recent' since changes are not committed
|
||||||
|
"""
|
||||||
newly_committed_files = []
|
newly_committed_files = []
|
||||||
if type(compare) == git.Commit:
|
if type(compare) == git.Commit:
|
||||||
newly_committed_files = [item.a_path for item in repo.index.diff(compare)]
|
newly_committed_files = [item.a_path for item in get_latest_commit(repo).diff(compare)]
|
||||||
elif type is None:
|
elif compare is None:
|
||||||
newly_committed_files = [item.a_path for item in repo.index.diff(None)]
|
com = get_latest_commit(repo)
|
||||||
|
newly_committed_files = [item.a_path for item in com.diff(None)]
|
||||||
|
pass
|
||||||
elif type(compare) == list:
|
elif type(compare) == list:
|
||||||
for commit in compare:
|
for commit in compare:
|
||||||
for item in repo.index.diff(commit):
|
for item in get_latest_commit(repo).diff(commit):
|
||||||
newly_committed_files.append(item.a_path)
|
newly_committed_files.append(item.a_path)
|
||||||
else:
|
else:
|
||||||
print("Invalid argument type for compare")
|
print("Invalid argument type for compare")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if file in newly_committed_files:
|
if str(file.relative_to(repo.working_dir)) in newly_committed_files:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
Loading…
Reference in a new issue