Technical specifications

(Spécification technique)

Constraints

L’exercice est donc l’écriture d’un script Python qui prendrait les données du dépôt d’une de nos applications (prenons Passerelle : https://git.entrouvert.org/passerelle.git) et afficherait ces taux.

NB : on est bien sur un script simple, pas sur du web.

Library

We need a Library to interact with git repositories. Specifically, we need an API to parse the result of git log:

$ git log | head
commit 1d8e084753d93602aec7a6260eaa4816c3281cc2
Author: Nicolas Roche <nroche@narval.fr.eu.org>
Date:   Fri Nov 9 16:22:49 2018 +0100

    document how to build documentation
...

Here is a “stabilized” library:

# apt-get install python-git-doc

Unfortunately it doesn’t perform any parsing, but just return a big string:

# apt-get install python-git
$ python
>>> import git
>>> g = git.Git('/home/nroche/git/keepcool')
>>> log = g.log()
>>> print log
...
>>> type(log)
<type 'unicode'>

It seems we need to play with git command line’s option and pass it to the log() function.

$ git log --committer=nroche \
          --after="2018-11-09 16:05:00" --before="2018-11-09 16:20:00" \
          --pretty='"%cN" %ct'
"Nicolas Roche" 1541776456
"Nicolas Roche" 1541776017
$ python
>>> import git
>>> g = git.Git('/home/nroche/git/keepcool')
>>> print g.log('--pretty="%cN" %ct')
"Nicolas Roche" 1541776969
"Nicolas Roche" 1541776456
...

Sadly it seems to me that the only way to interact with a git repository is to clone it first (see no git remote access).

Logs

Not necessary as we do not develop a daemon. Traces may be sufficient.

Conclusion

  • For now, we will use python-git library.
  • We first need to clone the remote git repositories we want to inspect.
  • We will get dates using the unix timestamp format (easier to parse)