'Configure GitPython to output/log commands and process output
I'm using GitPython to run several simple commands against repos. Essentially most of it is just:
repo = Repo(repo_dir)
repo.git.fetch()
result = repo.git.diff("origin", name_only=True)
repo.git.merge()
# ...
Is there some way to setup GitPython to output/log the commands that are run, and also display the raw output they produce?
For example, the above I would expect to be something along the lines of:
$ git fetch
$ git diff --name-only origin
path/to/differing_file
path/to/another/differing_file
$ git merge
Solution 1:[1]
GitPython uses the module logging. By adding logging.basicConfig(level=logging.DEBUG) before your code, it prints logs like
DEBUG:git.cmd:Popen(['git', 'fetch'], cwd=E:\path\foo, universal_newlines=False, shell=None)
If you want it to print formatted logs as you expect, you could modify GitPython's source code. I'm using Python 2.7 and my GitPython is installed at C:\Python27\lib\site-packages\git. You can run git.__file__ in REPL to find your installation directory. In the file C:\Python27\lib\site-packages\git\cmd.py, you can find a method def execute. It calls subprocess.Popen to run the command. You can modify the line log.debug before Popen or just insert print(' '.join(cmd)) at a proper line. If you are using Python 3.3 or newer, you could also refer to this answer on how to print the command with subprocess.
Solution 2:[2]
You could also:
pull = self.repo.git.pull('--rebase')
log.info(pull)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | Oweis Al-Agtash |
