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.
 
 
 

100 lines
3.0 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 utils.data_const as D
import basic.constants as B
import basic.text_const as T
import utils.date_tool
DEFAULT_CNT_COMMITS = 10
COMMIT_ID = "commit"
COMMIT_AUTHOR = "author"
COMMIT_DATE = "date"
COMMIT_COMMENT = "comment"
def runGit(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.confs[B.SUBJECT_PATH]:
cdpath = job.conf.confs[B.SUBJECT_PATH][repo]
else:
raise Exception(T.EXP_PATH_MISSING, repo)
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 = runGit(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 = runGit(job, repo, "git log -n "+str(cnt)+" --pretty=format:\"%H | %cn | %cd | %s\""+arg)
#print(text)
logs = []
i = 0
for l in text.split("\n"):
if i == cnt:
break
res = {}
a = l.split("|")
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_DIR)
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 = runGit(job, repo, "git log --pretty=format:\"%H | %cn | %cd | %s\""+arg)
print(text)
def gitPull(job, repo):
if "git" not in job.conf.confs[B.SUBJECT_TOOL] or repo not in job.conf.confs[B.SUBJECT_TOOL]["git"]:
raise Exception(T.EXP_CONFIG_MISSING, "tool.git."+repo)
#print(str(job.conf.confs[B.SUBJECT_TOOL]["git"][repo]))
master = job.conf.confs[B.SUBJECT_TOOL]["git"][repo]["master"]
remote = job.conf.confs[B.SUBJECT_TOOL]["git"][repo]["remote"]
text = runGit(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.")
#runGit(job, repo, "git pull "+remote+" "+master)