0

This program fails

import git

repo = git.repo.Repo('..')
res = repo.git.rev_list('--since="2024-01-01" master').split('\n')

with the following error

git.exc.GitCommandError: Cmd('git') failed due to: exit code(129)
cmdline: git rev-list --since="2024-01-01" master
stderr: 'usage: git rev-list [<options>] <commit>... [--] [<path>...]

despite that the command git rev-list --since="2024-01-01" master works just fine from the command line.

Any ideas how to fix it?

1 Answer 1

2

I believe you are misuing the repo.git.rev_list method. The first argument is meant to be a branch name (or other commit reference). You are effectively running the command:

['git', 'rev-list', '--since="2024-01-01" master']

Which is to say, you're looking for a branch or other reference with the literal name --since="2024-01-01" master. You should get the result you expect if you spell the command like this:

res = repo.git.rev_list("master", since="2024-01-01").split('\n')

Although on my system I had to be explicit and use refs/heads/master to avoid a warning: refname 'master' is ambiguous. message from git.


Instead of using git rev-list, you could also do this entirely using the GitPython API:

import git
from datetime import datetime

repo = git.repo.Repo('.')
d =datetime.strptime('2024-01-01', '%Y-%m-%d')
ts = int(d.timestamp())
commits = [
  commit for commit in repo.iter_commits('refs/heads/master')
  if commit.committed_date > d.timestamp()
]

Or if you want just the hex sha values:

commits = [
  commit.hexsha for commit in repo.iter_commits('refs/heads/master')
  if commit.committed_date > d.timestamp()
]
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.