diff options
Diffstat (limited to 'pbr/packaging.py')
-rw-r--r-- | pbr/packaging.py | 50 |
1 files changed, 47 insertions, 3 deletions
diff --git a/pbr/packaging.py b/pbr/packaging.py index 44c14cc..4f5897c 100644 --- a/pbr/packaging.py +++ b/pbr/packaging.py @@ -24,6 +24,7 @@ from __future__ import unicode_literals import email import io +import json import os import re import subprocess @@ -776,6 +777,49 @@ def have_sphinx(): return _have_sphinx +def _get_raw_tag_info(git_dir): + describe = _run_git_command(['describe', '--always'], git_dir) + if "-" in describe: + return describe.rsplit("-", 2)[-2] + if "." in describe: + return 0 + return None + + +def get_is_release(git_dir): + return _get_raw_tag_info(git_dir) == 0 + + +def _run_git_functions(): + git_dir = _get_git_directory() + if git_dir and _git_is_installed(): + return git_dir + return None + + +def get_git_short_sha(git_dir=None): + """Return the short sha for this repo, if it exists.""" + if not git_dir: + git_dir = _run_git_functions() + if git_dir: + return _run_git_command( + ['log', '-n1', '--pretty=format:%h'], git_dir) + return None + + +def write_pbr_json(cmd, basename, filename): + git_dir = _run_git_functions() + if not git_dir: + return + values = dict() + git_version = get_git_short_sha(git_dir) + is_release = get_is_release(git_dir) + if git_version is not None: + values['git_version'] = git_version + values['is_release'] = is_release + cmd.write_file('pbr', filename, json.dumps(values)) + + def _get_revno(git_dir): """Return the number of commits since the most recent tag. @@ -783,9 +827,9 @@ def _get_revno(git_dir): tags then we fall back to counting commits since the beginning of time. """ - describe = _run_git_command(['describe', '--always'], git_dir) - if "-" in describe: - return describe.rsplit("-", 2)[-2] + raw_tag_info = _get_raw_tag_info(git_dir) + if raw_tag_info: + return raw_tag_info # no tags found revlist = _run_git_command( |