#!/usr/bin/python
# -*- coding: utf-8 -*-
# ---------------------------------------------------------------------------------------------------------
# Author : Ulrich Carmesin
# Source : gitea.ucarmesin.de
# ---------------------------------------------------------------------------------------------------------
import os
import re
import subprocess
import sys
import basic . toolHandling
import tools . data_const as D
import basic . constants as B
import basic . text_const as T
import tools . date_tool
DEFAULT_CNT_COMMITS = 10
COMMIT_ID = " commit "
COMMIT_AUTHOR = " author "
COMMIT_DATE = " date "
COMMIT_COMMENT = " comment "
REPO_NAME = " name "
REPO_URL = " url "
REPO_BRANCH = " branch "
def execCmd ( job , repo , cmd ) :
"""
executes the command on the repository
: param job :
: param repo :
: param cmd :
: return :
"""
cdpath = " "
if os . path . isdir ( repo ) :
cdpath = repo
elif repo in job . conf [ B . SUBJECT_PATH ] :
cdpath = job . conf [ B . SUBJECT_PATH ] [ repo ]
else :
raise Exception ( T . EXP_PATH_MISSING , repo )
print ( " execCmd on " + cdpath + " : " + cmd )
os . chdir ( cdpath )
text = " "
process = subprocess . Popen ( cmd , stdout = subprocess . PIPE , shell = True )
btext = process . communicate ( ) [ 0 ]
text = btext . decode ( ' utf-8 ' )
return text
def gitStatus ( job , repo ) :
text = execCmd ( job , repo , " git status " )
return text
def gitLog ( job , repo , arg = " " , cnt = DEFAULT_CNT_COMMITS ) :
"""
extracts the last cnt commits into th structure
: param job :
: param repo :
: param cnt :
: return : [ { commit : " " , author : ]
"""
if len ( arg ) > 1 :
arg = " -- " + arg
else :
arg = " "
text = execCmd ( job , repo , " git log -n " + str ( cnt ) + " --pretty=format: \" % H | %c n | %c d | %s \" " + arg )
print ( text + " \n \n " )
logs = [ ]
i = 0
for l in text . split ( " \n " ) :
if i == cnt :
break
res = { }
a = l . split ( " | " )
print ( str ( a ) )
if len ( a ) < 2 :
continue
res [ COMMIT_ID ] = a [ 0 ] . strip ( )
res [ COMMIT_AUTHOR ] = a [ 1 ] . strip ( )
cdate = utils . date_tool . parseDate ( a [ 2 ] . strip ( ) )
res [ COMMIT_DATE ] = utils . date_tool . getFormatDatetupel ( cdate , utils . date_tool . F_TIME_DEFAULT )
res [ COMMIT_COMMENT ] = a [ 3 ] . strip ( )
logs . append ( res )
i + = 1
print ( str ( logs ) )
return logs
def gitCommits ( job , repo , arg = " " ) :
if len ( arg ) > 1 :
arg = " -- " + arg
else :
arg = " "
text = execCmd ( job , repo , " git log --pretty=format: \" % H | %c n | %c d | %s \" " + arg )
print ( text )
def checkoutLocal ( job , local ) :
os . chdir ( local [ " url " ] )
cmd = " git checkout " + local [ " branch " ]
execCmd ( job , cmd )
def updateLocal ( job , local , repo ) :
job . m . logInfo ( " --- aktualisiere git-Repo " + str ( repo ) + " , " + str ( local ) )
checkoutLocal ( job , local )
cmd = " git pull " + repo [ " name " ] + " " + repo [ " branch " ]
execCmd ( job , cmd )
os . chdir ( job . home )
def updateRemote ( job , local , repo ) :
job . m . logInfo ( " --- aktualisiere git-Repo " + str ( repo ) + " , " + str ( local ) )
checkoutLocal ( job , local )
cmd = " git push " + repo [ " name " ] + " " + repo [ " branch " ]
execCmd ( job , cmd )
os . chdir ( job . home )
def gitPull ( job , repo ) :
if " git " not in job . conf [ B . SUBJECT_TOOL ] or repo not in job . conf [ B . SUBJECT_TOOL ] [ " git " ] :
raise Exception ( T . EXP_CONFIG_MISSING , " tool.git. " + repo )
#print(str(job.conf[B.SUBJECT_TOOL]["git"][repo]))
master = job . conf [ B . SUBJECT_TOOL ] [ " git " ] [ repo ] [ " master " ]
remote = job . conf [ B . SUBJECT_TOOL ] [ " git " ] [ repo ] [ " remote " ]
text = execCmd ( job , repo , " git status " )
if " Commit vor " in text :
print ( " Das Repository " + repo + " bitte zuerst pushen \n " )
#print(text+"\"-------------------------------------\n")
else :
print ( " Repository " + repo + " kann gepullt werden. " )
#execCmd(job, repo, "git pull "+remote+" "+master)