ishepard/pydriller

GitCommandError when traversing commits using from_commit and only_modifications_with_file_types.

joaodupont opened this issue · 1 comments

Describe the bug
Traversing commits using the parameters from_commit and only_modifications_with_file_types generates the following error:

git.exc.GitCommandError: Cmd('git') failed due to: exit code(128)
  cmdline: git rev-list --reverse ^COMMIT_HASH^ HEAD --
  stderr: 'fatal: bad revision '^COMMIT_HASH^'

Output:

Traceback (most recent call last):
  File "\tracker_FINAL.py", line 158, in <module>
    main()
  File "\tracker_FINAL.py", line 153, in main
    process_repositories(repos)
  File "\tracker_FINAL.py", line 125, in process_repositories
    update_repo(repo_path, repo_format, repo_branch, regex_analytics)
  File "\tracker_FINAL.py", line 93, in update_repo
    for commit in Repository(repo_path, from_commit=latest_commit.hexsha, only_modifications_with_file_types=[repo_format]).traverse_commits():
  File "\venv\Lib\site-packages\pydriller\repository.py", line 234, in traverse_commits
    for job in executor.map(self._iter_commits, git.get_list_commits(rev, **kwargs)):
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\AppData\Local\Programs\Python\Python311\Lib\concurrent\futures\_base.py", line 608, in map
    fs = [self.submit(fn, *args) for args in zip(*iterables)]
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\AppData\Local\Programs\Python\Python311\Lib\concurrent\futures\_base.py", line 608, in <listcomp>
    fs = [self.submit(fn, *args) for args in zip(*iterables)]
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\venv\Lib\site-packages\pydriller\git.py", line 121, in get_list_commits
    for commit in self.repo.iter_commits(rev=rev, **kwargs):
  File "\venv\Lib\site-packages\git\objects\commit.py", line 426, in _iter_from_process_or_stream
    finalize_process(proc_or_stream)
  File "\venv\Lib\site-packages\git\util.py", line 419, in finalize_process
    proc.wait(**kwargs)
  File "\venv\Lib\site-packages\git\cmd.py", line 604, in wait
    raise GitCommandError(remove_password_if_present(self.args), status, errstr)
git.exc.GitCommandError: Cmd('git') failed due to: exit code(128)
  cmdline: git rev-list --reverse ^latest_commit.hexsha^ HEAD --
  stderr: 'fatal: bad revision '^latest_commit.hexsha^'

Can this be happening because the latest_commit doesn't have changes in files with the specified file types?

OS Version
PyDriller 2.4.1, Windows 10, Python 3.11.2

Hi @joaodupont!
I can't repro unfortunately. This piece of code works for me:

for commit in Repository("test-repos/complex_repo", 
                        from_commit="71535a31f0b598a5d5fcebda7146ebc01def783a", 
                        only_modifications_with_file_types=['java'],
                        ).traverse_commits():

    print(commit.hash, commit.committer_date, commit.author_date)

output:

71535a31f0b598a5d5fcebda7146ebc01def783a 2014-09-28 22:47:41-03:00 2014-09-28 22:47:41-03:00
a3290ac2f555eabca9e31180cf38e91f9e7e2761 2014-09-28 23:37:48-03:00 2014-09-28 23:37:48-03:00
953737b199de233896f00b4d87a0bc2794317253 2014-09-28 23:38:06-03:00 2014-09-28 23:38:06-03:00
9e71dd5726d775fb4a5f08506a539216e878adbb 2015-04-08 10:08:30-03:00 2015-04-08 10:08:30-03:00
a4ece0762e797d2e2dcbd471115108dd6e05ff58 2015-07-21 11:38:31-03:00 2015-07-21 11:38:31-03:00
e7d13b0511f8a176284ce4f92ed8c6e8d09c77f2 2015-07-21 11:38:40-03:00 2015-07-21 11:38:40-03:00