Added git information to version string
Running ansible --version now outputs git information when the repo lives in .git in the root of the ansible source (coping with the case where the git info is elsewhere is left as an exercise). This uses gitpython where installed, otherwise it interrogates the files in the .git directory to get the same information. The gitpython path could be removed, but then people might ask 'why did you do it like this when gitpython exists'
This commit is contained in:
parent
f757d659cc
commit
9a50ed9b7b
1 changed files with 33 additions and 1 deletions
|
@ -39,6 +39,12 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
from md5 import md5 as _md5
|
from md5 import md5 as _md5
|
||||||
|
|
||||||
|
try:
|
||||||
|
import git
|
||||||
|
HAS_GIT = True
|
||||||
|
except ImportError:
|
||||||
|
HAS_GIT = False
|
||||||
|
|
||||||
###############################################################
|
###############################################################
|
||||||
# UTILITY FUNCTIONS FOR COMMAND LINE TOOLS
|
# UTILITY FUNCTIONS FOR COMMAND LINE TOOLS
|
||||||
###############################################################
|
###############################################################
|
||||||
|
@ -287,6 +293,32 @@ def default(value, function):
|
||||||
return function()
|
return function()
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
def _gitinfo():
|
||||||
|
''' returns a string containing git branch and commit id
|
||||||
|
using gitpython if installed and native file operations if not '''
|
||||||
|
result = None
|
||||||
|
repo_path = os.path.join(os.path.dirname(__file__), '..', '..', '.git')
|
||||||
|
if os.path.exists(repo_path):
|
||||||
|
if HAS_GIT:
|
||||||
|
repo = git.Repo(repo_path)
|
||||||
|
head = repo.head
|
||||||
|
branch = head.reference.name
|
||||||
|
commit = head.commit.hexsha[:10]
|
||||||
|
else:
|
||||||
|
with open(os.path.join(repo_path, "HEAD")) as f:
|
||||||
|
branch = f.readline().split('/')[-1].rstrip("\n")
|
||||||
|
with open(os.path.join(repo_path, "refs", "heads", branch)) as f:
|
||||||
|
commit = f.readline()[:10]
|
||||||
|
result = "({0}) [{1}]".format(branch, commit)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def version(prog):
|
||||||
|
result = "{0} {1}".format(prog, __version__)
|
||||||
|
gitinfo = _gitinfo()
|
||||||
|
if gitinfo:
|
||||||
|
result = result + " {0}".format(gitinfo)
|
||||||
|
return result
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
# option handling code for /usr/bin/ansible and ansible-playbook
|
# option handling code for /usr/bin/ansible and ansible-playbook
|
||||||
# below this line
|
# below this line
|
||||||
|
@ -301,7 +333,7 @@ class SortedOptParser(optparse.OptionParser):
|
||||||
def base_parser(constants=C, usage="", output_opts=False, runas_opts=False, async_opts=False, connect_opts=False):
|
def base_parser(constants=C, usage="", output_opts=False, runas_opts=False, async_opts=False, connect_opts=False):
|
||||||
''' create an options parser for any ansible script '''
|
''' create an options parser for any ansible script '''
|
||||||
|
|
||||||
parser = SortedOptParser(usage, version="%prog " + __version__)
|
parser = SortedOptParser(usage, version=version("%prog"))
|
||||||
parser.add_option('-v','--verbose', default=False, action="store_true",
|
parser.add_option('-v','--verbose', default=False, action="store_true",
|
||||||
help='verbose mode')
|
help='verbose mode')
|
||||||
parser.add_option('-f','--forks', dest='forks', default=constants.DEFAULT_FORKS, type='int',
|
parser.add_option('-f','--forks', dest='forks', default=constants.DEFAULT_FORKS, type='int',
|
||||||
|
|
Loading…
Reference in a new issue