Getting git informations¶
To easily log an information on code used for simulations, the git
module allow to get informations on the current state of a git repository.
A small tool to get information from git. Useful to reuse it in python scripts (and get a trace of the version of the code used when doing a simulation).
Can also be used as a script passing the path as an argument. It will print the main informations.
Note
This class does nothing when run with python 2
- Authors:
Léo Viallon-Galinier
- utils.git.COMMAND_OUTPUT = ('commit', 'short_commit', 'author', 'author_email', 'date', 'committer', 'committer_email', 'committer_date', 'branch_raw', 'message', 'message_full')¶
The keys that
git_infos
get from git log
- utils.git.current_git_repo(path=None)[source]¶
Get the git repo path if we are in a git repo else return None
- Parameters:
path (str or path-like) – Path where to search for git repo (default is curent directory)
- Returns:
Path of git repository, or None if an error occurs or not in a git repository
- Return type:
str
- utils.git.get_summary_git(path=None)[source]¶
Return a short string describing the state of git repository.
Try to use git command. If this fails, search for a .git_info file and return its content.
- Parameters:
path (str or path-like) – Path where to search for git repo (if None, search in curent directory)
- class utils.git.git_infos(path=None)[source]¶
Bases:
object
Get git informations and put it in a dictionary
self.dict
.- Parameters:
path (str or path-like) – Path where to search for git repo (if None, search in curent directory)
To get access to all information in a dictionnary, look at the
dict
attribute. Information can also be get by subscripting the object directly.All data is given as a string. A uncomplete list of available keys is available
here
. Parsed data includes:path
: it is the only one to be guaranteed to be present. IfNone
, the git repository have not been found.commit
: the full commit hashshort_commit
: the short commit hashauthor
,author_email
committer
,committer_email
,committer_date
date
: the date, as a string but on iso formatbranch
: the branch name, if the branch label is on the current commit onlymessage
: the commit header messagemessage_full
: the full commit messagelast_tag
: the last tag on the historyclean
: a boolean, True if the followed files have not been modified since last commit
Note that some of the keys may not be defined if the git repository was not found.
Example :
import os from snowtools.utils.git import git_infos gi = git_infos(os.environ.get('EXESURFEX'))
you can then access information :
>>> gi['commit'] 98730c7c7f486dc85462b0427ff2ff9275bd5537
print all what was collected:
>>> print(gi) path: /home/viallonl/bin/snowtools commit: 98730c7c7f486dc85462b0427ff2ff9275bd5537 short_commit: 98730c7 author: Matthieu Lafaysse author_email: matthieu.lafaysse@meteo.fr date: 2021-07-08 16:53:15 +0200 committer: Matthieu Lafaysse committer_email: matthieu.lafaysse@meteo.fr committer_date: 2021-07-08 16:53:15 +0200 branch_raw: HEAD -> master, origin/master, origin/HEAD message: bdpe for post-processing message_full: bdpe for post-processing branch: master last_tag: s2m_reanalysis_2020.2 clean: True
or get a dictionnary for further use:
>>> gi.dict {'path': '/home/viallonl/bin/snowtools', 'commit': '98730c7c7f486dc85462b0427ff2ff9275bd5537', 'short_commit': '98730c7', 'author': 'Matthieu Lafaysse', 'author_email': 'matthieu.lafaysse@meteo.fr', 'date': '2021-07-08 16:53:15 +0200', 'committer': 'Matthieu Lafaysse', 'committer_email': 'matthieu.lafaysse@meteo.fr', 'committer_date': '2021-07-08 16:53:15 +0200', 'branch_raw': 'HEAD -> master, origin/master, origin/HEAD', 'message': 'bdpe for post-processing', 'message_full': 'bdpe for post-processing', 'branch': 'master', 'last_tag': 's2m_reanalysis_2020.2', 'clean': False}
Some very often used strings are also computed by pre-coded functions with management of lacking keys:
>>> gi.pretty_str_commit() c46bb7a088fc182950621f6849e64d2654987325 (master) by Matthieu Lafaysse on 2021-07-20 (from s2m_reanalysis_2020.2) >>> gi.get_commit() c46bb7a088fc182950621f6849e64d2654987325
- get_commit(short=False, default='')[source]¶
Return the commit number if present, and a zero-length string else (or default if specified).
- Parameters:
short (bool) – If True, return the short commit format
default (str) – Default string to be returned if commit could not be read
- Returns:
commit string
- Return type:
str
- is_clean()[source]¶
Check if there is modified files in the repo.
- Returns:
True if the repository is clean (no modified file), else False. Could also return None in case of error in command execution or git repo not found.
- Return type:
bool
- last_tag()[source]¶
Get the last available tag from current commit
- Returns:
The last available tag
- Return type:
str
- parse_commit_infos()[source]¶
Parse commit information, executing
git log -1
and fill the dict containing all git informations
- pretty_str_commit(short=False, default='')[source]¶
Return a pretty one-line string to describe the commit
Example:
c46bb7a088fc182950621f6849e64d2654987325 (master) by Matthieu Lafaysse on 2021-07-20 (from s2m_reanalysis_2020.2)
- Parameters:
short (bool) – If True, return the short commit format
default (str) – Default string to be returned if commit could not be read
- Returns:
A pretty string describing the commit
- Return type:
str