Data-Test-Executer Framework speziell zum Test von Datenverarbeitungen mit Datengenerierung, Systemvorbereitungen, Einspielungen, ganzheitlicher diversifizierender Vergleich
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

128 lines
3.8 KiB

#!/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 | %cn | %cd | %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 | %cn | %cd | %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)