@ -39,6 +39,12 @@ try:
except ImportError :
from md5 import md5 as _md5
try :
import git
HAS_GIT = True
except ImportError :
HAS_GIT = False
###############################################################
# UTILITY FUNCTIONS FOR COMMAND LINE TOOLS
###############################################################
@ -287,6 +293,32 @@ def default(value, function):
return function ( )
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
# 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 ) :
''' 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 " ,
help = ' verbose mode ' )
parser . add_option ( ' -f ' , ' --forks ' , dest = ' forks ' , default = constants . DEFAULT_FORKS , type = ' int ' ,